gpt4 book ai didi

java - URLEncoder.encode(string, "UTF-8") 是一个糟糕的验证吗?

转载 作者:行者123 更新时间:2023-11-29 07:16:20 24 4
gpt4 key购买 nike

在我的 J2EE/java 代码的一部分中,我对 getRequestURI() 的输出进行了 URLEncoding 以对其进行清理以防止 XSS 攻击,但 Fortify SCA 认为验证不佳。

为什么?

最佳答案

重点是需要将HTML特殊字符转换为HTML实体。这也称为“HTML 转义”或“XML 转义”。基本上,字符 < , > , " , &'需要替换为&lt; , &gt; , &quot; , &amp;&#39; .

URL 编码不会那样做。 URL 编码将 URL 特殊字符转换为百分比编码值。这不是 HTML 转义。

在 Web 应用程序的情况下,HTML 转义通常在 View 端完成,就在您重新显示用户控制的输入的地方。对于 Java EE Web 应用程序,这取决于您使用的 View 技术。

  1. 如果 web 应用程序使用现代 Facelets View 技术,那么您不需要自己转义它。 Facelets 已经隐含地做到了这一点。

  2. 如果 webapp 使用旧的 JSP View 技术,那么您需要确保您使用的是 JSTL <c:out>标签或 fn:escapeXml()重新显示用户控制的输入的功能。

    <c:out value="${bean.foo}" />
    <input type="text" name="foo" value="${fn:escapeXml(param.foo)}" />
  3. 如果 webapp 非常陈旧或设计糟糕,并且使用 servlet 或 scriptlet 来打印 HTML,那么您的问题就更大了。没有内置的标签或函数,更不用说可以转义 HTML 实体的 Java 方法了。你应该写一些 escape()自己方法或使用 Apache Commons Lang StringEscapeUtils#escapeHtml() 为了这。然后,您需要确保在打印用户控制的输入的任何地方都使用它。

    out.print("<p>" + StringEscapeUtils.escapeHtml(request.getParameter("foo")) + "</p>");

    更好的方法是重新设计遗留的 web 应用程序以将 JSP 与 JSTL 结合使用。

关于java - URLEncoder.encode(string, "UTF-8") 是一个糟糕的验证吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9291912/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com