TinyMCE, AntiXSS, MVC3 and GetSafeHtmlFragment



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

我正在开发一个 ASP.Net MVC3 应用程序。 我需要能够从用户条目显示 HTML(例如<强>、

  • 等),但我不想要任何 XSS 风险。

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

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

在我看来,我把TinyMCE挂在了文本区域。

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

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

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

您被发布针对某些表格。允许 html 是一个危险的操作,因此您正在尝试尽可能减轻它。你的方法在这里很好。

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

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

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

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

当我们在白名单的帮助下使用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仅返回测试数据作为其输出时。

相关内容

  • 没有找到相关文章

最新更新