当前位置: 首页 > 知识库问答 >
问题:

用于XSS预防的ESAPI不起作用

班景龙
2023-03-14

以下是原代码

 //scriplet code
    <% String userId = request.getParameter("sid"); 
    ...%>

在相同的Jsp中

     <input type = hidden name = "userID" value = "<%= userId %>" />

我做了一些修改,在lib中包括esapi-2.1.0.jar,在类路径中包括esapi.properties,validation.properties。然后对scriplet代码进行以下更改以修复上面的代码

      //scriplet code
    <% String userId = ESAPI.encoder().encodeForHTML(request.getParameter("sid")); 
    ...%>
          String              userSID=ESAPI.encoder().encodeForHTMLAttribute(request.getHeader("janus_sid")); session.setAttribute("username",userSID);<input type=hidden name="USERNAME" value="<%= userSID %>"
       String debugFlag =  ESAPI.encoder().encodeForJavaScript(request.getParameter("debug"));var debugFlag = "<%= debugFlag%>";if(debugFlag == "y"){       
        document.title=   title + " (" + host + ")";
        defaultAppTitle = title + " (" + host +  ")";           
    }                                                           

共有1个答案

冯星阑
2023-03-14

谢谢你们的帮助。最后给出了一个解决方案,以防止XSS问题,并通过强化静态代码分析。我已经将ESAPI与Anitsamy库一起使用。以下是所需的3个主要更改。

>

  • 实现Anitsamy筛选器

    添加一个新的过滤器并重写请求方法getParameter、getParameterValues,以去除请求中的任何可疑标记。Filter加载一个策略文件,我们在其中定义规则,如

     String reportName = request.getParameter("reportName");
     ESAPI.validator().getValidInput("Report Name", 
                                      reportName, "ReportNamePattern", 100, false);
    

    在上面的代码中,

    1. “报表名称”是上下文
    2. ReportName是数据字段
    3. ReportNamePattern是在esapi.properties中定义为验证器的regex模式。ReportNamePattern=^[a-zA-Z]{1}[0-9]{6}$
    4. 100是数据字段reportname的最大长度
    5. false是表示不允许空值的标志。

    执行输出编码
    正如@avgvstvs所指出的,输出编码也是必须的。

    <tr> <th> Report :     <%=ESAPI.encoder().encodeForHTML(reportName)%> </th> </tr>
    
     var reportName = "<%= ESAPI.encoder().encodeForJavaScript(reportName)%>";
    
    <input type=hidden name="USERNAME" value="<%=ESAPI.encoder().encodeForHTMLAttribute
        (reportName)%>"/>       
    

  •  类似资料:
    • 问题内容: 有一个Node.js项目用于清理数据,还有一个用于JavaScript的OWASP库,用于处理清理过程以防止XSS。 我一直在对这些库进行基准测试,它们非常密集,也许是一个过大的杀伤力,我的应用程序不需要任何动态HTML(由用户,bbtags提交,甚至根本不需要,都不需要),所以为什么不这样做呢: 禁用“ ”和“ ”字符,不要替换它们或其他任何东西,只需禁用它们,如果用户提交了这些,则

    • 问题内容: 我的REST API之一期望属性“ url”,该属性期望URL作为用户的输入。我正在使用ESAPI来防止XSS攻击。问题是用户提供的URL类似于 来自ESAPI编码器的cannonicalize方法在此处引发入侵异常,声称输入具有混合编码,因为该输入是url编码的,而段’&phi’被视为HTML编码,因此是该异常。 在清理我的一个应用程序URL时,我遇到了类似的问题,其中第二个查询参数

    • 如何实现防止XSS的Java ESAPI? 除了在构建路径中添加ESAPI jar之外,还需要其他配置吗? 提前感谢您的回答。

    • 在其他一些论坛中,提到使用HTML消毒剂。什么是正确的方法,请…

    • 问题内容: 如何防止JSP / Servlet Web应用程序中的XSS攻击? 问题答案: 当(重新)显示用户控制的输入时,可以通过使用JSTL 标签或函数在JSP中防止XSS 。这包括请求参数,标头,cookie,URL,正文等。从请求对象中提取的所有内容。同样,在重新显示期间,也需要转义存储在数据库中的先前请求的用户控制输入。 例如: 这将逃脱这可能渲染,如人物,”,’和&成HTML / XM

    • EDIT做了一些更多的测试:当我只配置secure-annotations=“enabled”时,基于角色的安全性工作。此外,配置pre-postannotations=“enabled”时,既不安全也不预授权。当我只配置前-后注释时,它仍然不起作用。 编辑2 更多的测试:只有secured_annotations=“enabled”,对channelservice的调用通过Cglib2AopPr