如果为站点启用了ASP.NET请求验证,您还需要在简单表单(例如,ASP.NET)之间来回发送HtmlEncode和HtmlDecode字符串信息吗?
发布于 2009-10-02 17:51:09
无论请求验证是打开还是关闭,ASP.NET文本框中的文本都没有危险。文本框控件在文本框中显示数据时会自动对数据进行编码。
当输出来自其他地方的用户的数据时,对该数据进行超文本标记语言(或JavaScript)编码是很重要的。ASP.NET的请求验证只提供最低级别的保护。它不是不可逾越的,甚至不是接近它的。它只被设计用来防御最简单的攻击。
在站点的其他部分输出内容时,您仍然需要对其进行编码。
编辑
我所说的其他地方的意思是,如果用户在文本框中输入数据,则使用ASP.NET文本框控件是安全的,因为该控件会自动对输出进行编码,以便安全地呈现输出。
例如,假设您正在使用StackOverflow的用户信息页面。当用户选择他们的用户名时,他们可以选择输入一些可能是恶意的东西,当输出到您站点的另一部分时。例如,我的StackOverflow登录名显示在每个页面的顶部,也列在"Users“页面上。
在users页面上,AJAX用于加载用户。当JavaScript计算用户名时,它不受与HTML标记相同的编码规则的约束,因此我可以在user name文本框中键入一些内容,这些内容在输出到用户列表中时可能会导致一些破坏行为。
当用户数据发送到客户端时,StackOverflow显然是正确编码的,所以它们是安全的。在将我的用户名发送到客户端之前,他们(可能)有一些JavaScript编码例程,以确保我的用户名在以JavaScript代码执行时不会变得恶意。
如果在非ASP.NET输入控件中使用它,也可能会出现问题。Input标记使用属性来定义内容,因此您可以轻松地输入可以通过请求验证检查的文本,但可能允许用户添加恶意的"mouseover“属性。
https://stackoverflow.com/questions/1510903
复制相似问题