如何清理 HttpServletRequest 中 getCookies()、getRequestURL() 的返回值?
在我的 Java EE 项目中,我在 web.xml 文件中设置了一个过滤器,它将使用 MyHttpServeltRequestWrapper 类(extends HttpServletRequestWrapper
)。我重写了其中的 getParameter/ getParametervalues 方法,以防止任何 XSS 攻击。
我正在对参数值执行 HTML 转义。
等方法是否是个好主意吗?
- 有人可以告诉我重新定义诸如
getRequestURL()
、 getRequestURI()
、getQueryString()
、>getCookies()
方法来放入 XSS 预防逻辑。
我可以对 getRequestURL()
、getRequestURI()
、getQueryString()
返回的值使用 URLEncoder
吗?
那么 getCookies 方法呢?如果我的 getcookies()
方法未经消毒,我的页面会以何种方式容易受到攻击?
In my Java EE project, I set a filter in web.xml file which will use the Class MyHttpServeltRequestWrapper
(extends HttpServletRequestWrapper
). I am overriding the methods getParameter/ getParametervalues method in it inorder to prevent any XSS attacks.
I'm performing HTML escaping on parameter values.
Can someone please tell if it is a good idea to redefine the methods like
getRequestURL()
,getRequestURI()
,getQueryString()
,getCookies()
methods to put in XSS prevention logic.
Can I use URLEncoder
on values returned by getRequestURL()
, getRequestURI()
, getQueryString()
?
And what about the getCookies methods? In what way it makes my pages vulnerable to attacks if I leave my getcookies()
method unsanitized?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
对于 XSS 预防,您走错了路。 XSS 不会损害服务器端代码。它只会损害生成的 HTML 输出。当您在现有 HTML 源代码中内联未转义的用户控制输入,以便浏览器将其解释为真实 HTML 源代码的一部分时,这会造成损害。您需要将
<
、>
等 HTML 特殊字符替换为<
、>< /code> 等,以便它们按原样显示。
仅在视图端 (JSP) 执行此操作。只需在重新显示用户控制输入的任何地方使用 JSTL
或fn:escapeXml()
即可。它们会转义 HTML 特殊字符。例如,
另请参阅:
You're going the wrong path as to XSS prevention. XSS does not harm in server side code. It only harms in the generated HTML output. It will harm when you inline user-controlled input unescaped among the existing HTML source code so that it get interpreted by the browser as part of real HTML source code. You need to replace HTML special characters like
<
,>
, etc by<
,>
, etc so that they get displayed as-is instead.Do it in the view side (JSP) only. Just use JSTL
<c:out>
orfn:escapeXml()
everywhere you're redisplaying user-controlled input. They will escape HTML special characters.E.g.
See also: