强化 - 源扫描

时间:2015-05-26 16:04:02

标签: java fortify

我们在代码上运行了Fortify源扫描。在许多地方,它显示了严重的问题/违规行为:

  

跨站点脚本:已反映 - 方法_jspService()   WorkSheet.jsp将未经验证的数据发送到第368行的Web浏览器,   这可能导致浏览器执行恶意代码。

第368行是

subNum="<%=submissionNo%>";

我们使用

获取 submissionNo
String submissionNo = request.getParameter("SUBMISSIONNO");

有没有办法在不使用JSTL的情况下解决这个问题,或者JSTL是唯一的选择吗?

2 个答案:

答案 0 :(得分:0)

查看@jcoppens给出的URL,并记住这一条主要规则:在出路上进行输入验证并在出路时进行编码。

查看OWASP Stinger的输入和OWASP ESAPI或OWASP JEP的编码替代方案,不要推出自己的验证框架。

不要在客户端执行输入验证,它太容易绕过。

除非您绝对可以保证不会恶意修改任何数据,否则不要将任何数据源视为可信任。是的,这意味着您的数据库不受信任。

答案 1 :(得分:0)

消除XSS风险的最佳解决方案始终是解决源代码中的问题。为此,您必须在处理和/或渲染回浏览器之前清理任何用户输入。例如,在JSP中使用JSTL <c:out>标记或fn:escapeXml() EL函数显示用户控制的输入时。

如果您无法执行第一个解决方案,因为它的成本很高,您应该执行常规服务器输入验证。

如果你使用的是Spring MVC,Struts,Struts2,Grails或JSF,你可以尝试HDIV。它消除了对于只读数据的XSS风险,对来自客户端的其余数据应用完整性验证(确保接收的值与服务器端生成的值相同)。对于表单中包含的文本字段(非只读数据),HDIV提供通用验证(白名单和黑名单)。此外,它还提供了更多功能,以消除或减轻OWASP十大风险。