3

XXE 攻撃を防ぐために、Java DocumentBuilderFactory で推奨されている以下の機能を無効にしました - https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet

        dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
        dbf.setFeature("http://xml.org/sax/features/external-general-entities", false);
        dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
        dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
        dbf.setXIncludeAware(false);
        dbf.setExpandEntityReferences(false);

external-general-entites と external-parameter-entities を false に設定しない場合、脆弱性は存在しますか? disallow-doctype-decl を true に設定し、XIncludeAware を false に設定すると、これらの外部エンティティを展開できなくなります。

上記のコードからこれらの 2 行を削除しても安全です dbf.setFeature("http://xml.org/sax/features/external-general-entities", false); dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);か。それとも、保持することも必須です。必須の場合、false に設定しない場合の脆弱性は何ですか?

disallow-doctype を true に、XIncludeAware を false に、ExpandEntityReferences を false に設定した場合でも、external-genereal/Parameter-entities に固有の脆弱性の例を提供してください。

4

1 に答える 1

3

それらを保持することは必須ではありません。信頼されていない XML 内のインライン宣言によってパーサーが例外をスローするため、この設定disallow-doctype-declにより XXE 攻撃が防止されます。DOCTYPE

ただし、external-general-entitiesexternal-parameter-entitiesデフォルトで trueであるため、コードをそのままにしておくことをお勧めします。これらの 2 行が存在せず、後のメンテナーが (単純にまたは誤って) 最初の行を削除すると、コードは再び脆弱になります。そこに他の行が明示的にあると、さらに変更を加えたときに、メンテナーがそれらの機能を調べて、それらがなぜそこにあるのかを知る可能性が高くなります。

于 2019-03-01T20:56:22.953 に答える