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