2016-08-02 13 views
1

ich javax.xml.validation.Validator bin mit meiner xml zu validieren, wie unten -Disable DTD in javax XML Validator

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

Ich möchte XML External Entity-Angriffe verhindern, indem DTDs (Document Type Definitions) vollständig zu deaktivieren, so würde ich wie für den Validator, um eine Ausnahme im Falle einer DTD in meinem XML, wenn möglich, zu werfen. Ich habe darüber gelesen, DocumentBuilderFactory zu verwenden. Wie konfiguriere ich das in Validator?

+0

So nicht die Qualität für die Sicherheit zu werfen. Sie können [** XML-Kataloge **] (https://en.wikipedia.org/wiki/XML_Catalog) für lokale (überprüfte) Kopien von DTD-Dateien verwenden –

Antwort

2

Nach dem OWASP XXE prevention spreadsheet für Java, sollten folgende Arbeiten:

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 ... 

, um weitere Informationen zu der XMLConstants JavaDocs finden.

+0

Awesome thanks! –

+0

Dies funktioniert derzeit nicht. Wir erhalten diese Ausnahme Eigenschaft 'http: //javax.xml.XMLConstants/property/accessExternalDTD' wird nicht erkannt. –

+0

@GaneshBhat - Sie könnten eine neue SA-Frage öffnen und Details zu Ihrer Einrichtung veröffentlichen, einschließlich der Java-Version, des XML-Anbieter-Herstellers und der Version usw. Fühlen Sie sich frei, hier zu verlinken, wenn Sie dies tun. – coastalhacking