是否有可能通过内部的JSP代码通过html注释进行XSS攻击?

时间:2010-05-06 09:22:32

标签: html security jsp xss

以下代码是否在某些JSP页面中添加了XSS漏洞?

<!--    <%=paramName%>=<%=request.getParameter(paramName)%><BR>  -->

它看起来像一个“剩余的调试”,绝对应该从代码中删除,但它有多危险?

2 个答案:

答案 0 :(得分:5)

是的,你正在看的是反射XSS攻击。这很危险,因为它允许攻击者劫持经过身份验证的会话。如果您的系统上运行此代码,攻击者将无需知道其用户名/密码即可访问其他人的帐户。

XSS漏洞也可用于绕过CSRF protection。这是因为XSS允许攻击者使用XmlHTTPRequest读取CSRF令牌的值。 XSS也可以用来欺骗引用者检查。

这是手动测试xss的简单方法,这里我打破HTML注释来执行javascript。

http://localhost/xss_vuln.jsp?paramName='--><script>alert(document.cookie)</script><!--' 

这是免费的xss scanner,您应该测试您编写的所有应用程序。

答案 1 :(得分:1)

JSP解析器将HTML注释处理为模板文本。它不会忽略它的内容。只有HTML解析器/解释器(webbrowsers!)才会忽略HTML注释。您应该使用JSP注释来阻止JSP解析器处理特定的代码段。

<%--    <%=paramName%>=<%=request.getParameter(paramName)%><BR>  --%>

注意<%-- --%>样式而不是<!-- --> HTML注释样式。 JSP解析器不会解析它们,但从输出中删除它们。因此,您不会在生成的HTML输出中看到它们。

此处存在XSS风险,因为您没有在此处转发用户控制的输入。请求参数可由内核完全控制。例如,最终用户可以传递--><script>alert('xss')</script><!--作为参数值,并且它将被执行。这为XSSCSRF攻击敞开了大门。恶意脚本可以例如通过ajax请求将所有cookie发送到恶意服务器。然后,攻击者可以复制cookie值,以便能够以自己的身份登录。

您应该使用JSTL c:out标记或fn:escapeXml函数来逃避用户控制的输入。在here之下,我已经多次详细解答了这个问题。有关CSRF的更多说明可以在我的回答here中找到。