SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);报Disable access to external entities in XML parsing.
时间: 2024-10-09 10:02:47 浏览: 42
当你在Java中使用`SchemaFactory.newInstance()`创建XML Schema解析工厂并试图实例化XML标准schema时,提示`Disable access to external entities in XML parsing.`通常是出于安全考虑。这是由于默认情况下,XML解析器允许读取外部实体(external entities, 或者称为entity expansion),这可能导致跨站脚本攻击(XSS)或者其他形式的安全风险。
Java的`javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI`常量关联的是W3C XML Schema规范,而启用外部实体会增加解析过程中的潜在安全隐患。为了防止这种情况,你需要设置禁止外部实体(disabling entity expansion):
```java
SecuritySupport.setExternalEntity ExpansionEnabled(false);
// 然后创建SchemaFactory实例
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
```
或者,如果你使用的是JAXB (Java Architecture for XML Binding),可以在`Unmarshaller`设置中禁用:
```java
Unmarshaller unmarshaller = JAXBContext.newInstance(Schema.class).createUnmarshaller();
unmarshaller.setExpandEntities(false);
```
这样可以避免XML文档中的恶意代码通过外部实体引入。
阅读全文