4

我一直在 asp.net mvc 学习网站上阅读有关 JavaScript 注入的内容,这让我大开眼界。

我什至从未意识到/想过有人使用 JavaScript 进行一些奇怪的屁股注入攻击。

然而,它给我留下了一些悬而未决的问题。

第一的

你什么时候使用 html.encode?就像您仅在要显示该用户或其他用户提交的信息时使用它一样?

还是我将它用于所有事情。比如说我有一个用户提交的表单,这个信息永远不会显示给任何用户,我应该还在使用 html.encode 吗?

我该怎么做,就像我不确定如何在 say 和 Html.TextBox() 中放入 html.encode 标记一样。

第二

会发生什么说我的网站上有一个丰富的 html 编辑器。用户被允许使用它并使事情变得大胆等等。现在我想通过标签向用户显示信息。我不能 Html.Encode 从那以后所有的粗体和东西都不会被渲染。

但是我不能让它保持原样,因为什么会阻止用户添加一些 Javascript 攻击?

那我该怎么办?使用正则表达式过滤掉所有标签?

第三

您还可以使用另一个标签,称为“AntiforgeryToken”,您什么时候使用这个标签?

谢谢

编辑

几乎每个人都说使用“白名单”和“黑名单”我将如何编写此列表并将其与传入值进行比较(C# 中的示例会很好)?

4

4 回答 4

2

好问题!

  1. 对于第一个答案,我会考虑在这里查看以前提出的问题。正如答案所讨论的,使用 HTML 编码并不能完全保护您免受所有 XSS 攻击。为了解决这个问题,您应该考虑使用 Microsoft 提供的Microsoft Web 保护库(特别是AntiXSS)。

  2. 正如已经提到的,使用允许的标签列表是最好的做法,让其他标签被剥离。

  3. AntiforgeryToken 令牌用于防止请求伪造 (CSRF),因为它为用户提供了一个 cookie,该 cookie 在页面发布时根据呈现的表单字段进行验证。我没有理由知道这意味着您不能在所有表单中使用它。

于 2009-07-21T08:03:45.403 回答
2

对用户提交的任何正在显示的数据使用 HTML 编码。提交到数据库时不需要使用它,否则会得到奇怪的数据,例如:Simon '&' Sons。真的,我看不出在动态写入页面的任何内容上使用它有什么害处。

使用允许的标签列表并为您的 HTML 编辑器丢弃所有其他内容。正如人们所说,使用白名单。

第三个是为了防止跨站点请求伪造攻击。您可以使用它来阻止人们使用来自用户的“被盗”cookie 进行 POST。因此,在接受帖子之前,您可能需要经过身份验证的 cookie,但恶意用户可能会在用户访问他们的网站时获取该 cookie,然后向您的网站提交一份声称是他们的表单。

请参阅此处了解更多信息:http: //haacked.com/archive/2009/04/02/anatomy-of-csrf-attack.aspx

如何使用它: http: //blog.codeville.net/2008/09/01/prevent-cross-site-request-forgery-csrf-using-aspnet-mvcs-antiforgerytoken-helper/

于 2009-07-21T07:50:58.677 回答
1

根据应用程序的设计考虑,可以实现不同级别的安全性。

我会遵循以下基本规则:

  1. 清理所有输入,删除已知的恶意部分(例如,<script>富 HTML 编辑器中的标签)。基于正则表达式的模式匹配通常用于这种清理。

  2. 删除所有不在允许值白名单中的输入。

  3. 在存储到数据库之前对任何 HTML 进行编码,并在检索到显示时将其解码回来。

编辑:@Phoenix 在这种情况下谈论验证,所以我想我会添加这个。我之前已经说过,我重申:我不反对基于脚本的验证。我只是提醒人们不要明确依赖它。一种常见的设计模式是使用基于脚本的验证来验证基本标准,并在提交数据时在服务器端应用严格的验证。

于 2009-07-21T07:59:58.673 回答
1

始终根据白名单验证收到的输入。如果您使用黑名单,您可能并且可能会遇到编码问题。验证输入时始终使用白名单。

不要依赖客户端验证来验证用户输入。客户端验证非常适合帮助用户输入正确的数据。但是恶意用户不会使用它并且可以绕过客户端验证。客户端验证永远不应被视为安全修复。不应使用使用 javascript 来验证输入。如您所见,javascript 在任何 html 页面上都非常容易更改和修改。也可以在浏览器中禁用 javascript。因此,请额外检查您的代码隐藏文件。

此外,每次都验证输入,而不仅仅是在最初接受数据时。例如,如果您设置了一个 cookie,请确保该 cookie 是相同的值,并且在每个请求上都是正确的。恶意用户可以在会话期间随时修改和更改该值。

于 2009-07-21T07:54:16.063 回答