2016-08-02 8 views
1

に私は以下のように私のxmlを検証するためにjavax.xml.validation.Validatorを使用しています -を無効にDTDのjavax XMLバリデータ

 Validator validator = myschema.newValidator(); 
     validator.validate(new StreamSource(new StringReader(xmlString))); 

私は完全のDTD(文書型定義)を無効にすることによって、XML外部エンティティ攻撃を防ぐしたいので、私は思います可能であれば、バリデーターがXML内のDTDの場合に例外をスローするのが好きです。私はDocumentBuilderFactoryを使ってこれについて行うことを読んだ。 Validatorでこれをどのように設定するのですか?

+0

セキュリティのために品質を捨てないように。 DTDファイルのローカル(チェックされた)コピーには[** XMLカタログ**](https://en.wikipedia.org/wiki/XML_Catalog)を使用できます –

答えて

2

Java用OWASP XXE prevention spreadsheetによれば、次のように動作するはずです:

SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema"); 
Schema myschema = factory.newSchema(); 
Validator validator = myschema.newValidator(); 
try { 
    validator.setProperty(XMLConstants.ACCESS_EXTERNAL_DTD, ""); 
    validator.setProperty(XMLConstants.ACCESS_EXTERNAL_SCHEMA, ""); 
    validator.validate(new StreamSource(new StringReader(xmlString))); 
} catch ... 

は詳細についてはXMLConstants JavaDocsを参照してください。

+0

ありがとう! –

+0

これは現在動作していません。この例外が発生する プロパティ 'http://javax.xml.XMLConstants/property/accessExternalDTD'が認識されません。 –

+0

@GaneshBhat - 新しいSA質問を開き、Javaバージョン、XMLプロバイダのベンダー、バージョンなどの設定の詳細を投稿したいと思うかもしれません。 – coastalhacking

関連する問題