Java 强化源扫描

Java 强化源扫描,java,fortify,Java,Fortify,我们对代码进行了强化源代码扫描。在许多地方,它显示了关键问题/违规: 跨站点脚本:反射-中的方法_jspService() WorkSheet.jsp将未验证的数据发送到第368行的web浏览器, 这可能导致浏览器执行恶意代码 368号线是 subNum="<%=submissionNo%>"; 有没有办法不用JSTL解决这个问题,或者JSTL是唯一的选择?看看@jcoppens给出的URL,记住一条主要规则:在输入时执行输入验证,在输出时执行编码 查看输入的OWASP Sting

我们对代码进行了强化源代码扫描。在许多地方,它显示了关键问题/违规:

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

368号线是

subNum="<%=submissionNo%>";

有没有办法不用JSTL解决这个问题,或者JSTL是唯一的选择?

看看@jcoppens给出的URL,记住一条主要规则:在输入时执行输入验证,在输出时执行编码

查看输入的OWASP Stinger和替代编码的OWASP ESAPI或OWASP JEP,不要使用自己的验证框架

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


不考虑任何受信任的数据源,除非您可以绝对保证不可能恶意修改数据。是的,这意味着您的数据库不受信任。

消除XSS风险的最佳解决方案始终是在源代码中解决问题。要做到这一点,您必须在用户输入被处理和/或呈现回浏览器之前对其进行清理。例如,在JSP中,当显示用户控制的输入时,使用JSTL
标记或
fn:escapeXml()
EL函数

如果您无法执行第一个解决方案,因为它会给您带来巨大的成本,那么您应该执行常规服务器输入验证

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

你检查过这个了吗?
String submissionNo = request.getParameter("SUBMISSIONNO");