html - 从请求中接受一组预定义的无害 HTML 标记有多安全?

标签 html tags tinymce security

作为 Web 开发人员,我学到的第一件事就是永远不要接受来自客户端的任何 HTML。 (也许只有当我对它进行 HTML 编码时。)
我使用输出 HTML 的所见即所得编辑器 (TinyMCE)。到目前为止,我只在管理页面上使用过它,但现在我也想在论坛上使用它。它有一个 BBCode 模块,但似乎不完整。 (BBCode 本身可能不支持我想要的一切。)

所以,这是我的想法:

我允许客户端直接发布一些 HTML 代码。然后,我检查代码的完整性(格式良好)并根据一组预定义的允许标签和样式删除所有不允许的标签、属性和 CSS 规则。
显然,我会允许我使用的 TinyMCE 功能子集可以输出的内容。

我会允许以下标签:
span, sub, sup, a, p, ul, ol, li, img, strong, em, br

具有以下属性:
style(用于所有内容)、hreftitle(用于 a)、altsrc(对于 img)

以及以下 CSS 规则:
颜色字体字体大小字体粗细字体样式 , 文字装饰

这些涵盖了我格式化所需的一切,并且(据我所知)不存在任何安全风险。基本上,格式良好的强制执行和布局样式的缺乏可以防止任何人破坏网站的布局。禁止脚本标签等防止XSS。
(一个异常(exception):也许我应该在图像的预定义范围内允许 width/height。)

其他优势:这些东西可以让我免于编写/寻找 BBCode-Html 转换器的需要。

你怎么看?
这是一件安全的事情吗?

(据我所知,StackOverflow 还允许在“关于我”字段中使用一些基本的 HTML,因此我认为我不是第一个实现此功能的人。)

编辑:

我找到了 this answer这解释了如何相当容易地做到这一点。
当然,noone should think about using regex for this .

问题本身与任何语言或技术无关,但如果您想知道,我是用 ASP.NET 编写的这个应用程序。

最佳答案

不清楚您正在使用或喜欢哪种编程语言,但在 Java 中有 Jsoup ,这是一个非常巧妙的 HTML 解析器 API,其中包含一个基于可自定义的 HTML 标签和属性白名单的 HTML 清理器(不幸的是,没有 CSS 规则,因为这完全超出了 HTML 解析器的范围)。这是来自 its site 的相关摘录.

Sanitize untrusted HTML

Problem

You want to allow untrusted users to supply HTML for output on your website (e.g. as comment submission). You need to clean this HTML to avoid cross-site scripting (XSS) attacks.

Solution

Use the jsoup HTML Cleaner with a configuration specified by a Whitelist.

String unsafe = 
      "<p><a href='http://example.com/' onclick='stealCookies()'>Link</a></p>";
String safe = Jsoup.clean(unsafe, Whitelist.basic());
      // now: <p><a href="http://example.com/" rel="nofollow">Link</a></p>

Whitelist类本身包含几个可能有用的预定义白名单,例如 Whitelist#basic()Whitelist#relaxed() .

对于 .NET,顺便说一句,有一个名为 NSoup 的 Jsoup 端口

关于html - 从请求中接受一组预定义的无害 HTML 标记有多安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3740366/

相关文章:

Javascript 样式的错误

Javascript 或 Jquery 数学函数

mysql - 如何使用一个 MySQL 查询选择所有带有标签的文章和所有文章的标签?

javascript - (jquery) 将嵌套的相同 html 标签更改为其他 bbcode 标签

path - TinyMCE/MCImageManager 路径问题

TinyMce 4 到期日

html - <hr> 的问题

jquery - 根据容器上的类切换主体颜色

javascript - 无法通过 jQuery ajax 发送特殊字符

javascript - TinyMCE--点击上传文件按钮时出现 "HTTP Error 404.0 - Not Found"错误