2010-05-25 110 views
6

我工作过NerdDinner和我有点困惑的以下部分...HTML编码

首先,他们已经增加了一个表单创建一个新的晚餐,一束文本框delcared像:

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

然后,他们表现出的形式输入绑定到模型两种方式:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Create() { 
    Dinner dinner = new Dinner(); 
    UpdateModel(dinner); 
    ... 
} 

或:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Create(Dinner dinner) { ... } 

好吧,太棒了,看起来这一切都很容易。

然后有点后来他们说:

它接受任何用户输入 时,总是偏执 对安全是非常重要的,这也是如此,当 对象绑定到表单输入。您 应仔细总是HTML编码 任何用户输入的值,以避免 HTML和JavaScript注入攻击

咦? MVC正在为我们管理数据绑定。你应该在哪里/如何做HTML编码?

回答

2

您通常(但不是总是)希望在将值写出之前对其进行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

+0

所以没关系我让用户进入的形式,只要我不输出它无需再次编码?我真的不知道HTML注入是如何工作的。 – fearofawhackplanet 2010-05-25 18:53:32

+1

是的。有很多类型的跨站点脚本攻击,但在您自己的站点上进行简单检查就是在用户输入数据(包括创建用户名时)的任何位置尝试输入''。如果您看到警报弹出窗口(假设您已打开javascript),则会找到需要HTML编码的位置。最好对所有**输出进行HTML编码,并在必要时仅删除该编码。 – RedFilter 2010-05-25 19:04:34

+0

好的,谢谢orbman – fearofawhackplanet 2010-05-25 22:52:48