10

假设我有一个简单的 ASP.NET MVC 博客应用程序,我希望允许读者向博客文章添加评论。如果我想防止任何类型的 XSS 恶作剧,我可以对所有评论进行 HTML 编码,以便它们在呈现时变得无害。但是,如果我想要一些基本功能,如超链接、粗体、斜体等,该怎么办?

我知道 StackOverflow 使用WMD Markdown Editor ,如果不是因为它同时支持HTML 和 Markdown 这使其容易受到 XSS 攻击,这对于我想要完成的工作来说似乎是一个不错的选择。

4

7 回答 7

8

如果您不想使用编辑器,您可以考虑OWASP 的 AntiSamy

你可以在这里运行一个例子: http ://www.antisamy.net/

于 2009-01-15T15:21:22.860 回答
3

你要支持多少 HTML?只是粗体/斜体/基本的东西?在这种情况下,您可以将它们转换为 markdown 语法,然后剥离 HTML 的其余部分。

剥离需要在服务器端完成,然后再存储。在检查 SQL 漏洞和其他不需要的东西时,您还需要验证服务器上的输入。

于 2009-01-15T00:15:10.913 回答
2

如果您需要在浏览器中执行此操作:http ://code.google.com/p/google-caja/wiki/JsHtmlSanitizer

于 2009-01-16T01:43:59.517 回答
1

我建议你只提交降价语法。在前端,客户端可以键入 markdown 并进行 HTML 预览(与 SO 相同),但只能在服务器端提交 markdown 语法。然后您可以验证它、生成 HTML、转义并存储它。

我相信这是我们大多数人的做法。无论哪种情况,markdown 都可以减轻任何人编写结构化 HTML 代码的负担,并为那些甚至不知道如何编写的人提供权力。

如果您想对 HTML 做一些特定的事情,那么您可以使用一些 CSS 继承来调整它 '.comment a { color: #F0F; }',前端 JS 或者只是在存储之前遍历从解析 markdown 生成的 HTML。

于 2009-01-15T00:20:53.100 回答
1

为什么不使用 Jeff 的代码?http://refactormycode.com/codes/333-sanitize-html

于 2009-01-15T00:41:04.557 回答
1

我会投票给FCKEditor ,但你必须对返回的输出做一些额外的步骤

于 2009-01-15T00:47:19.613 回答
0

您可以使用 HTML 白名单,以便某些标签仍然可以使用,但其他所有内容都会被阻止。

有一些工具可以为您做到这一点。SO 使用Slough链接的代码

于 2009-01-15T00:47:07.243 回答