Java でのパス トラバーサル攻撃の防止
インターネットの急速な発展に伴い、ネットワーク セキュリティの問題はますます重要になっています。パス トラバーサル攻撃は、攻撃者がファイル パスを操作してシステム情報を取得したり、機密ファイルを読み取ったり、悪意のあるコードを実行したりする一般的なセキュリティ脆弱性です。 Java 開発では、パス トラバーサル攻撃を防ぐために適切な方法を講じる必要があります。
パス トラバーサル攻撃の原理は、ユーザーが入力したファイル パスの誤った処理によって引き起こされます。パス トラバーサル攻撃がどのように機能するかを示す簡単なサンプル コードを次に示します。
import java.io.*; public class PathTraversalDemo { public static void readFile(String filePath) { try { File file = new File(filePath); BufferedReader reader = new BufferedReader(new FileReader(file)); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } reader.close(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { String userInput = "/path/to/sensitive/file.txt"; readFile(userInput); } }
上記のサンプル コードでは、readFile() メソッドはユーザーが入力したファイル パスを受け取り、ファイルの内容を読み取ろうとします。 。ただし、ユーザーが入力したファイル パスに特殊文字またはディレクトリ トラバーサル記号 (../
など) が含まれている場合、攻撃者は機密ファイルを含むあらゆるファイルを読み取ることができる可能性があります。
パス トラバーサル攻撃を防ぐために、次の提案に従うことができます。
// 示例代码 public static boolean isSafePath(String filePath) { // 使用正则表达式检查文件路径 String regex = "^[a-zA-Z0-9-_]+$"; return filePath.matches(regex); } public static void main(String[] args) { String userInput = "/path/to/sensitive/file.txt"; if (isSafePath(userInput)) { readFile(userInput); } else { System.out.println("Invalid file path!"); } }
canonicalFile()
や getCanonicalPath()
など、Java が提供するファイル パス処理関数を使用します。ユーザーが入力したファイル パスは絶対パスに正規化され、パス トラバーサルの問題は自動的に解決されます。 // 示例代码 public static void readFile(String filePath) { try { File file = new File(filePath); String canonicalPath = file.getCanonicalPath(); // 正规化文件路径 if (!canonicalPath.startsWith("/path/to/sensitive/")) { throw new IllegalArgumentException("Invalid file path!"); } BufferedReader reader = new BufferedReader(new FileReader(file)); // ... } catch (IOException e) { e.printStackTrace(); } }
// 示例代码 public static void readFile(String filePath) { try { File file = new File(filePath); if (!file.canRead()) { throw new SecurityException("No permission to read file!"); } BufferedReader reader = new BufferedReader(new FileReader(file)); // ... } catch (IOException e) { e.printStackTrace(); } }
要約すると、Java でのパス トラバーサル攻撃を防ぐには、開発者はユーザーが入力したファイル パスを常に検証し、ファイル パスを処理するために Java が提供する正規化関数を使用する必要があります。さらに、アプリケーションが必要なファイルにのみアクセスできるように、ファイル アクセス許可を厳密に制御する必要があります。
上記のセキュリティ対策を講じることにより、パス トラバーサル攻撃を効果的に防止し、アプリケーションとユーザーのデータ セキュリティを保護できます。設計およびコーディングのプロセス中にセキュリティを最前線に置くと、アプリケーションのセキュリティを効果的に向上させることができます。
以上がJava でのパス トラバーサル攻撃の防止の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。