【问题标题】:Is it possible to make XSS attacks through html comments with JSP code inside?是否可以通过html注释和里面的JSP代码进行XSS攻击?
【发布时间】:2021-12-18 13:28:14
【问题描述】:

下面的代码是不是真的给某个JSP页面添加了XSS漏洞?

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

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

【问题讨论】:

    标签: html security jsp xss


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 请记住,大多数(如果不是全部)xss 扫描程序只能发现最简单的 XSS 漏洞类别,并且只使用非常有限的一组攻击向量。更好地了解问题以修复您的代码。一些简单的规则见owasp.org/index.php/…
    • @Cheekysoft 非常正确,但攻击者也很可能对您的应用程序使用相同的简单测试。没有什么是 100%,这是攻击者的另一个优势。
    【解决方案2】:

    JSP 解析器将 HTML cmets 处理为 模板文本。它不会忽略它的内容。 HTML cmets 仅被 HTML 解析器/解释器(网络浏览器!)忽略。您应该改用 JSP cmets 来防止 JSP 解析器处理特定的代码。

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

    注意&lt;%-- --%&gt; 样式与&lt;!-- --&gt; HTML 注释样式相对。 JSP 解析器不会解析它们,但会从输出中删除它们。因此,您不会在生成的 HTML 输出中看到它们。

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

    您应该使用JSTL c:out 标签或fn:escapeXml 函数来转义用户控制的输入。我之前已经多次详细回答过这个问题,在每个here 下。关于 CSRF 的更多解释可以在我的回答 here 中找到。

    【讨论】:

    • 我听说 JSTL 标记对从服务器到客户端的 XSS 很有用,但在从客户端到服务器时却不行。在这种情况下,请求来自客户端,而不是来自服务器,那么 JSTL 将如何防止这种攻击呢?请澄清我的疑问。感谢您的帮助!
    • @Sam:XSS 内容在服务器中是无害的。 XSS 只是在 HTML 代码中重新显示用户控制的输入时出现的问题。 HTML 根本不在网络服务器中运行,而是由网络服务器生成 HTML。另见stackoverflow.com/questions/2658922/xss-prevention-in-java/…
    • 感谢您的帮助。我已经浏览了这个有用的链接。我在下面的链接中发布了另一个线程,但没有得到正确的答案如何防止这种情况:stackoverflow.com/questions/16743043/how-to-prevent-xss-attack/…你能看一下代码并提出建议吗?
    • @Sam:只需使用&lt;c:out&gt;${fn:escapeXml()} 重新显示用户控制的输入。完全停止使用&lt;% ... %&gt;
    • 再次感谢!我仍然不清楚如何使用 或 ${fn:escapeXml()} 来处理 request.getQueryString()?我可以在那个jsp中写 来处理这个问题。如果我遗漏了什么,请告诉我。谢谢!
    猜你喜欢
    • 2013-07-03
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    • 2015-04-23
    • 2011-09-15
    • 2019-12-11
    • 2013-04-09
    • 2021-11-07
    相关资源
    最近更新 更多