1

我是 25 名开发人员的团队成员。我们使用 mvc.net 应用程序,安全性对我们来说很重要。我们使用@Html.AntiForgeryToken()任何与安全性相关的东西,但我们担心防止 XSS 黑客攻击。我们对每个地方都进行编码,但有些地方我们需要用户的 html。防止 XSS 黑客攻击的最佳实践是什么?

4

1 回答 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 编码的情况下输出一些用户输入,我建议您使用AntiXSSMicrosoft 的库。它将从输入中过滤掉所有危险标签,您可以安全地输出它。例如,它将<script>从输入中删除标签。还有一个article on MSDN关于这个库的内容,您可以查看。

于 2013-01-27T17:41:22.097 回答