6

我已经阅读了很多关于 XSS 和如何处理的关于 SO 的帖子。通常,共识是白名单而不是黑名单,避免使用正则表达式(太多变体无法处理)。

我正在开发一个 ASP.Net MVC3 应用程序。我需要能够显示来自用户条目的 HTML(例如 <strong>、<ul>、<li> 等...),但我不希望有任何 XSS 风险。

我正在通过 Nuget 使用 AntiXSS 包。在我的模型中,我有

[AllowHtml]
public string UserDetails{ get; set; }

在我看来,我将 TinyMCE 连接到了 textarea。

在我的控制器中,我从视图中获取帖子并对其进行清理:

using Microsoft.Security.Application;
...
string SanitizedDetails = Sanitizer.GetSafeHtmlFragment(model.UserDetails);

我的问题:我做对了吗?我是否受到了大多数 XSS 问题的保护,或者我是在吠叫错误的树吗?

4

2 回答 2

4

您被张贴在某些表格上。允许 html 是一项危险的操作,因此您正在尝试尽可能地减轻它。你的方法在这里很好。

还有其他选项可以提供帮助,但不幸的是,并非一切都已准备好生产。有各种浏览器部分支持的内容安全策略标头。例如: http ://www.w3.org/TR/CSP/

所以你所拥有的是不错的,但如果你想冒险进入内容安全策略,你可以稍微增强一下(对于一个)

如果您有兴趣,我会在这里讨论很多 XSS 攻击。 http://www.pluralsight-training.net/microsoft/Courses/TableOfContents?courseName=hack-proofing-dotnet-app

您可能希望在渲染之前(和保存之前)包含额外的清理,以防另一个攻击(例如 sql 注入)将 xss 代码插入到您的 html 中。

于 2012-06-04T04:40:49.650 回答
0

当我们Sanitizer.GetSafeHtmlFragment(model.UserDetails);在白名单的帮助下使用时,它不会允许任何标签通过它执行。例如当

model.UserDetails = "Testdata `<script>alert('Malicious Code');</script>`"

它是一个注入代码,SafeHtmlFragment 方法不允许<script>标签执行。

model.UserDetails = "Testdata `<a href="www.google.com">Google <a/>`"

这是一个安全的代码,它应该返回一个文本和谷歌超链接以导航到 google.com。

model.UseDetails仅返回Testdata作为其输出时。

于 2014-01-03T10:59:25.583 回答