Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jsp输入标记上的跨站点脚本问题_Jsp_Security_Servlets_Xss - Fatal编程技术网

jsp输入标记上的跨站点脚本问题

jsp输入标记上的跨站点脚本问题,jsp,security,servlets,xss,Jsp,Security,Servlets,Xss,我对Acunetix和XSS的问题还不熟悉,所以我在这里有点迷茫 问题是,我有一份报告说,我的代码中可能存在易受跨站点脚本(XSS)攻击的漏洞 URL encoded POST input chkId_0 was set to 203_908434'():;998649 The input is reflected inside Javascript code between single quotes. 在我的JSP中,我有如下内容: <% if (!someCond

我对Acunetix和XSS的问题还不熟悉,所以我在这里有点迷茫

问题是,我有一份报告说,我的代码中可能存在易受跨站点脚本(XSS)攻击的漏洞

URL encoded POST input chkId_0 was set to 203_908434'():;998649
The input is reflected inside Javascript code between single quotes.
在我的JSP中,我有如下内容:

<%          if (!someCondition) { %>                
            <input class="chkbox" type="checkbox" name="chkId_0" value="<%=office.getId()%>" <%=auxDisabled%> />
<%          } else { %>          
            <input class="chkbox" type="checkbox" name="chkId_0" value="    <%=office.getId()%>" <%=auxDisabled%> disabled/>
<%          } %>
我已经读到我可以使用JSTL(
)解决这个问题,但不幸的是,这不是我的选择,因为代码是遗留的

任何形式的帮助都将不胜感激。 提前谢谢

 <input class="chkbox" type="checkbox" name="chkId_0" value="<%=office.getId()%>"/>
但是,看看错误:

输入反映在单引号之间的Javascript代码中

它不是在抱怨HTML注入,而是在抱怨JS注入。接收表单提交的页面上可能有类似的内容:

<script>
    var chkId = '<%= request.getParameter("chkId_0") %>';
</script>
(这些示例使用了,在许多方面都不令人满意,但对于这些目的来说已经足够了。)

我正在使用一个过滤器并重写HttpServletRequestWrapper中的getParameter()和getParameterValues(),以避免一些其他XSS问题

这是完全行不通的。有几十种方法可以绕过你的黑名单模式。为了捕获所有可能的攻击,您必须禁止在HTML、JS或任何其他格式中使用的特殊字符,这些字符基本上阻止了所有标点符号,这是不可接受的


相反,请专注于在输出端使用正确的转义形式。

如果您将ID打印到输入值中,我看不出XSS如何容易受到攻击,除非用户可以将任意字符串设置为ID。但不要尝试使用黑名单“剥离XSS”,否则您会遇到麻烦。黑客可能会想出一些你根本想不到的东西,如果你想这样做,最好尝试使用白名单。问题是,当我使用request.getQueryString()创建URL时,这个参数会进入URL的构造中。那么,在你看来,我应该怎么做而不是使用黑名单的方法呢。。?谢谢你的评论,你是说我没有用过滤器和黑名单模式来解决我的问题,但是正确的解决方案是什么?有什么建议吗?谢谢你的回答。
 <input class="chkbox" type="checkbox" name="chkId_0" value="<%= StringEscapeUtils.escapeHtml4(office.getId()) %>"/>
<script>
    var chkId = '<%= request.getParameter("chkId_0") %>';
</script>
<script>
    var chkId = '<%= StringEscapeUtils.escapeEcmaScript(request.getParameter("chkId_0")) %>';
</script>