MVC输入中的Html编码

fea*_*net 7 security asp.net-mvc html-encode

我正在通过NerdDinner工作,我对以下部分感到有点困惑......

首先,他们添加了一个用于创建新晚餐的表单,其中包含一些文本框,如下所示:

<%= Html.TextArea("Description") %>

然后,他们展示了将表单输入绑定到模型的两种方法:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create() {
    Dinner dinner = new Dinner();
    UpdateModel(dinner);
    ...
}
Run Code Online (Sandbox Code Playgroud)

要么:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(Dinner dinner) { ... }
Run Code Online (Sandbox Code Playgroud)

好的,很棒,到目前为止看起来都非常简单.

然后他们说:

在接受任何用户输入时,始终对安全性总是偏执是很重要的,并且在将对象绑定到表单输入时也是如此.您应该小心始终对任何用户输入的值进行HTML编码,以避免HTML和JavaScript注入攻击

咦?MVC正在为我们管理数据绑定.您应该在哪里/如何进行HTML编码?

Red*_*ter 3

您通常(但并非总是)希望在将值写出之前对其进行 HTML 编码,通常是在视图中,但也可能从控制器中。

这里有一些信息:http://weblogs.asp.net/scottgu/archive/2010/04/06/new-lt-gt-syntax-for-html-encoding-output-in-asp-net-4-and- asp-net-mvc-2.aspx

  • 是的。跨站点脚本攻击有很多种类型,但对您自己的站点进行简单的检查就是尝试在用户可以输入数据的任何位置(包括在创建其数据时)输入 `&lt;script&gt;alert('XSS 漏洞')&lt;/script&gt;`用户名)。如果您看到警报弹出窗口(假设您已打开 JavaScript),则您将找到需要 HTML 编码的位置。最好对**所有**输出进行 HTML 编码,并且仅在必要时删除该编码。 (2认同)