webservice XML实体注入漏洞解决方案

来源:互联网 发布:qt编程入门 书籍 编辑:程序博客网 时间:2024/06/16 01:52
  1. 漏斗描述
    目标存在webservice XML实体注入漏洞。XML是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。当允许引用外部实体时,通过构造恶意内容,可导致读取任意文件、执行系统命令、探测内网端口、攻击内网网站等危害。
  2. 解决方案
    (1) 关闭XML解解析函数的外部实体。
    在生成xml的代码中加入:
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();        dbf.setExpandEntityReferences(false);

如果使用的是DOM4J的Document生成的xml请改成w3c的Document生成。代码如下:

        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();        factory.setExpandEntityReferences(false);        // 创建DocumentBuilder        DocumentBuilder builder = factory.newDocumentBuilder();        // 创建Document        Document document = builder.newDocument();        Element rss = document.createElement("rss");        rss.setAttribute("version", "2.0");

(2) 过滤用户输入的非法字符,如“<>” “%” “+”等。
在项目filter目录下加入XssFilter.java和XssHttpServletRequestWrapper.java
同时在web.xml中加入

        <filter>            <filter-name>XssFilter</filter-name>            <filter-class>com.xxx.xxx.web.filter.XssFilter</filter-class>        </filter>        <filter-mapping>            <filter-name>XssFilter</filter-name>            <url-pattern>/*</url-pattern>            <dispatcher>REQUEST</dispatcher>        </filter-mapping>

附件下载:XssFilter.java和XssHttpServletRequestWrapper.java

原创粉丝点击