java防止xxe漏洞
关于xml的xxe漏洞的处理
xml通过xxe可以执行远程代码。在xml中植入:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE nsfocus-sec [
<!ELEMENT methodname ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<methodcall>
<methodname>&xxe;</methodname>
</methodcall>
篡改以后,如果可读取file文件或者达到植入命令的效果,则说明存在该漏洞。
在java代码中设置:
SAXReader reader = new SAXReader();
reader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); // Compliant
reader.setFeature("http://xml.org/sax/features/external-general-entities", false);
reader.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
reader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
那么读取是会检测DOCTYPE并抛出异常。