存储 HTML 时避免 XSS 攻击
我的网站存储用户生成的 HTML。当然,这些数据会呈现在网页上。渲染 HTML 和避免 XSS 攻击的最佳实践是什么?剥离 和
标签就足够了吗?这会覆盖所有浏览器吗?我听说旧浏览器通过奇怪的编码呈现 HTML...我该如何处理这个问题?
我想要一个一般性的答案,与任何语言或技术无关。
My site stores HTML that is generated by the user. Then of course this data is rendered on a web page. What are the best practices for rending the HTML and avoiding XSS attacks? Is stripping <script>
and <iframe>
tags enough? Will this cover all browsers? I heard of old browsers rendering HTML from weird encoding... how can I handle this?
I would like a general answer, not related to any languages or technologies.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您可以使用像 Jsoup 这样的库,尤其是它们的 whitelist-sanitizer 以防止 XSS。
总的来说,我认为使用白名单是一种更好/更安全的方法,而不是过滤黑名单标签。此外,首先应该避免使用 HTML。相反,应该使用一些简单的标记,例如 markdown。
You could use libraries like Jsoup especially their whitelist-sanitizer to prevent XSS.
In general, I think it is a better/safer aproach to use a white list, rather than filtering black listed tags. Besides, HTML should be avoided in the first place. Instead, some simple markup, like markdown, should be used.
我可以向你保证,没有办法安全地完成你所要求的事情。狡猾的黑客总是能够利用允许用户发送任意 html 的系统,即使是通过剥离某些标签进行清理。这正是 markdown 和 BBcode 存在。为什么看,连 StackOverflow 都在使用类似的。
您正在考虑走的道路上散布着 10,000 个被利用的网站。
I can assure you there is no way to safely do what you are asking. A crafty hacker will always be able to exploit a system that allows arbitrary html from the user, even when cleaned up by stripping away certain tags. This is exactly why tools like markdown and BBcode exist. Why look, even StackOverflow is using similar.
The road you are considering traveling down is littered with 10,000 exploited web sites.
当允许您的用户在您的页面上设置 HTML 时,您会迷失方向,有多种可能性,例如 onmouseover"myEvilJS" 或
You're lost when will allow your user do set HTML on your page, there a re wide range of possibilities like onmouseover"myEvilJS" or
至少您必须转换此符号。
& -> &
< -> <
> -> >
“-> ”
'-> '
/-> /
Minimum you must convert this symbols.
& -> &
< -> <
> -> >
“ -> "
‘ -> '
/ -> /