1

我刚刚发现,因为默认情况下 ValidateRequest = true,所以默认情况下,您不能在任何输入字段中输入“<”或“>”。

对我来说,对 XSS 攻击不太了解,这似乎很受限制。

为了解决这个问题,我意识到我可以使用 validateRequest = false,并对用户数据进行编码。显然,微软有充分的理由设置 validateRequest = true,所以现在的问题是我有一个包含很多页面的整个站点,所有这些都是“无法放置 < 或 > 问题”。

我的问题是我只有两个选择吗?

1) 保留 validateRequest = true 并且根本不允许用户输入 < 或 > 2) 切换 validateRequest = false 并采取预防措施。

如果为 2,我是否打算对所有数据输入进行编码?就像从登录名和密码到用户文本到搜索条件的文本字段一样?还是我只需要对某些输入进行操作?如果是这样,我应该定位哪些领域?

4

2 回答 2

1

我在这里遇到了同样的问题并在 Stack Overflow 上找到了答案:
从客户端检测到潜在危险的 Request.Form 值

阅读标记答案中排名靠前的评论。
这是我在 Web.Config 中使用的,因为我使用的是 .net 4.0 框架:

<httpRuntime requestValidationMode="2.0" />

然后我逐页添加 ValidateRequest="false" :

<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPages/Site.Master"
    AutoEventWireup="true" CodeBehind="ScheduleAppointment.aspx.cs"
    Inherits="DentalPower.Pages.Public.ScheduleAppointment"
    ValidateRequest="false" %>

如果 Asp.net TexBoxes 有一个功能,我可以将 ForceEncode 属性设置为 true,它会在发送之前自动对输入进行编码,那就太好了。也许他们会这样做……总有一天。

哦,并且始终在禁用验证的页面上对来自 Web 控件的所有输入进行编码。

于 2011-05-25T01:05:34.713 回答
0

据我所知,你是正确的。要么保留验证,要么自己手动进行。问题是默认验证非常严格,在很多情况下都不实用(我见过的很多 Web 应用程序只是在站点范围内关闭它,而没有过多考虑后果)。

供您参考,关于代码转义的精彩文章是http://wonko.com/post/html-escaping

于 2011-05-25T04:31:19.433 回答