如何在HttpServletRequest中清理getCookies(),getRequestURL()的返回值?

时间:2012-02-14 09:52:40

标签: java security servlets xss

在我的Java EE项目中,我在web.xml文件中设置了一个过滤器,该过滤器将使用类MyHttpServeltRequestWrapperextends HttpServletRequestWrapper)。我重写了方法中的getParameter / getParametervalues方法,以防止任何XSS攻击。

我正在对参数值执行HTML转义。

有人可以告诉我们重新定义像

这样的方法是否是个好主意
  • getRequestURL()
  • getRequestURI()
  • getQueryString()
  • getCookies()方法放入XSS预防逻辑。

我可以对URLEncodergetRequestURL()getRequestURI()返回的值使用getQueryString()吗?

那getCookies方法怎么样?如果我将getcookies()方法放在未经过清理的情况下,它会以什么方式使我的网页容易受到攻击?

1 个答案:

答案 0 :(得分:0)

你走错了XSS预防的道路。 XSS在服务器端代码中没有损害。它只会在生成的HTML输出中造成伤害。当您在现有HTML源代码中未内联用户控制的输入时,它会受到损害,因此它会被浏览器解释为实际HTML源代码的一部分。您需要将<>等HTML特殊字符替换为&lt;&gt;等,以便它们按原样显示。

仅在视图端(JSP)中执行此操作。只需在重新显示用户控制输入的任何地方使用JSTL <c:out>fn:escapeXml()。他们将逃脱HTML特殊字符。

E.g。

<c:out value="${someBean.someUserControlledValue}" />
<c:out value="${cookie.cookiename}" />
<c:out value="${header.headername}" />
<c:out value="${param.paramname}" />
<input type="text" name="foo" value="${fn:escapeXml(param.foo)}" />

另见: