防止XSS黑客攻击的最佳实践

时间:2013-01-27 17:40:19

标签: asp.net-mvc xss

我是25名开发人员的团队成员。我们使用mvc.net应用程序,安全性对我们来说非常重要。我们使用@Html.AntiForgeryToken()以及任何与安全相关的内容但我们担心防止XSS黑客入侵。 我们编码每个地方,但有些地方我们需要来自用户的html。 防止XSS黑客行为的最佳做法是什么?

1 个答案:

答案 0 :(得分: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编码的情况下输出一些用户输入,我建议您使用Microsoft的AntiXSS库。它将从输入中过滤掉所有危险标签,您可以安全地输出它。例如,它将从输入中删除<script>标记。还有一个关于这个库的article on MSDN你可以结账。