在我的Java EE项目中,我在web.xml文件中设置了一个过滤器,该过滤器将使用类MyHttpServeltRequestWrapper
(extends HttpServletRequestWrapper
)。我重写了方法中的getParameter / getParametervalues方法,以防止任何XSS攻击。
我正在对参数值执行HTML转义。
有人可以告诉我们重新定义像
这样的方法是否是个好主意getRequestURL()
,getRequestURI()
,getQueryString()
,getCookies()
方法放入XSS预防逻辑。 我可以对URLEncoder
,getRequestURL()
,getRequestURI()
返回的值使用getQueryString()
吗?
那getCookies方法怎么样?如果我将getcookies()
方法放在未经过清理的情况下,它会以什么方式使我的网页容易受到攻击?
答案 0 :(得分:0)
你走错了XSS预防的道路。 XSS在服务器端代码中没有损害。它只会在生成的HTML输出中造成伤害。当您在现有HTML源代码中未内联用户控制的输入时,它会受到损害,因此它会被浏览器解释为实际HTML源代码的一部分。您需要将<
,>
等HTML特殊字符替换为<
,>
等,以便它们按原样显示。
仅在视图端(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)}" />