SV.XXE.SF
XML 外部实体攻击的可能性
当 XML 输入由配置较弱的 XML 分析程序 SchemaFactory 处理时,会发生此错误。
漏洞与风险
XML 外部实体攻击是一种针对解析 XML 输入的应用程序的攻击。当包含对外部实体进行引用的 XML 输入由配置较弱的 XML 分析程序处理时,会发生此攻击。这种攻击可能导致机密数据泄露、拒绝服务、服务器端请求伪造、从分析程序所在机器的角度进行端口扫描,或其他系统影响。
缓解与预防
防止 XML 外部实体攻击的最安全方法是始终完全禁用 DTD(外部实体)。根据分析程序的不同,方法可能会有所不同。
漏洞代码示例
复制
import javax.xml.transform.Source;
import javax.xml.validation.SchemaFactory;
public class Test {
public void test(Source source) {
SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
factory.newSchema(source);
}
}
在此示例中,Klocwork 报告第 6 行出现 SV.XXE.SF 错误,这表示 XML 输入由配置较弱的 XML 分析程序 SchemaFactory 处理。
修正代码示例
复制
import javax.xml.transform.Source;
import javax.xml.validation.SchemaFactory;
public class Test {
public void test(Source source) {
SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
factory.setProperty("http://javax.xml.XMLConstants/property/accessExternalDTD", "");
factory.setProperty("http://javax.xml.XMLConstants/property/accessExternalSchema", "");
factory.setProperty("http://javax.xml.XMLConstants/property/accessExternalStylesheet", "");
factory.newSchema(source);
}
}