我是 25 名开发人员的团队成员。我们使用 mvc.net 应用程序,安全性对我们来说很重要。我们使用@Html.AntiForgeryToken()
任何与安全性相关的东西,但我们担心防止 XSS 黑客攻击。我们对每个地方都进行编码,但有些地方我们需要用户的 html。防止 XSS 黑客攻击的最佳实践是什么?
user1968030
问问题
2598 次
1 回答
3
防止 XSS 的黄金法则是对您输出到视图的所有内容进行 HTML 编码。
希望@
Razor 功能已经为您自动执行此操作。
因此,当您编写以下内容之一时,您是非常安全的:
@Model.SomeProperty
@Html.DisplayFor(x => x.SomeProperty)
你应该小心@Html.Raw
助手:
@Html.Raw(Model.SomeProperty)
如果你使用它,输出将不会是 HTML 编码的。这并不意味着您的网站容易受到 XSS 注入的攻击。例如,如果您完全控制该属性并且不是来自用户输入,那么您应该是非常安全的。
如果您使用的是 WebForms 视图引擎,那么您应该更加小心,因为该<%=
函数不对输出进行 HTML 编码。
所以以下是不安全的:
<%= Model.SomeProperty %>
您应该使用以下方法之一:
<%= Html.DisplayFor(x => x.SomeProperty) %>
<%: Model.SomeProperty %>
另一方面,如果您需要在没有 HTML 编码的情况下输出一些用户输入,我建议您使用AntiXSS
Microsoft 的库。它将从输入中过滤掉所有危险标签,您可以安全地输出它。例如,它将<script>
从输入中删除标签。还有一个article on MSDN
关于这个库的内容,您可以查看。
于 2013-01-27T17:41:22.097 回答