【问题标题】:Show HTML user input, security issue显示 HTML 用户输入,安全问题
【发布时间】:2012-09-13 12:44:37
【问题描述】:

在我的网站上,用户将能够为内容输入 html 标签,因此文本可以是粗体、斜体或链接和图像。我打算使用真正使用 HTML 标签的 ckeditor 或 tinymce(不是 BBC 代码或 wiki 语法) 如果我允许 HTML,当显示文本时,它将被解释,并且可能包含一些“hack”,如 javascript 或 XSS .... 我该怎么做才能避免这个安全问题? 我是否必须列出想要的 html 标签并删除所有不需要的标签和内容? 我可以为此使用条形标签吗?

例如在stackoverflow上是如何完成的?

你知道一些可以安全保存和安全解释有限html标签的php/jquery插件吗?

提前感谢您的帮助

【问题讨论】:

标签: html security input


【解决方案1】:

您需要同时使用服务器端 HTML 清理程序和 Content Security Policy 防止内联脚本、评估和远程托管脚本

根据您在服务器端使用的语言,使用 HtmlSanitiser 或 python Bleach。

使用客户端验证或朴素过滤根本无法保护您:

  1. 如果用户手动提交表单,@Smamatti 建议的客户端验证将无济于事。
  2. 当有人上传<script src="foo"><<script>script>alert('foo');</script><body onload="alert('foo')";</body>时,@user1477388建议的str_replace('<script>', '', $str);等幼稚过滤将无法保护您

【讨论】:

  • 我完全同意托马斯的观点。编码恶意代码的方法有很多,实际上不可能想出一种安全的方法来过滤(黑名单)。例如,查看XSS Cheat Sheet 以了解注入脚本的疯狂方式。其实挺吓人的。例如,尝试将这段代码检测为恶意代码:<IMG SRC=javascript: alert('XSS')>,或此代码:<XSS STYLE="behavior: url(xss.htc);">
  • 感谢大家的回答。事实上,ckeditor 正在转义不允许的 html 标签或特殊字符因此,当您选择标签例如 时,它会按原样发送到您的表单但是如果您键入 则“
  • @user:正如 Thomas 在 (1) 中所说,CKeditor 是一个客户端工具。您不能相信在客户端发生的任何验证措施。攻击者可以更改或绕过 CKeditor 并提交危险的 HTML。您必须在服务器端清理 HTML。如果您使用 PHP,通常的工具是 HTML Purifier。 FWIW 个人对于粗体/斜体/图像/链接我会使用比 HTML 更小、更友好、更简单的语言。
  • @bobince 感谢 HTML 净化器。您将仅对这些标签使用什么。 BB代码?如果您知道一个好用且易于使用的工具,那就太好了
  • @user1496486 如果您使用的是 CKEditor,请坚持使用 HTML,只要确保您与客户端和服务器端验证相同。
猜你喜欢
  • 1970-01-01
  • 2015-12-16
  • 2014-08-19
  • 1970-01-01
  • 1970-01-01
  • 2019-04-26
  • 2012-04-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多