如果我选择设置ValidateRequest = false,我需要做些什么来保护我的网站?

问题描述:

我刚刚发现,因为默认情况下,ValidateRequest = true,所以默认情况下,您不能在任何输入字段中输入“<”或“>”。如果我选择设置ValidateRequest = false,我需要做些什么来保护我的网站?

对于我来说,对XSS攻击不了解太多,对我来说这似乎是相当严格的。

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

我的问题是我只有两个选择? 2)switch validateRequest = false,并采取预防措施。1)将validateRequest = true并且不允许用户输入<或>根本不要输入 2)switch validateRequest = false并采取预防措施。

如果是2,我的意思是编码所有数据输入?就像从登录和密码到用户文本到搜索标准的文本字段一样?或者我只需要对某些输入进行操作?如果是这样,我应该瞄准哪些领域?

+0

至于我可以告诉你是在正确的你只有两个选择。我不知道一种干净的方式来防止用户输入特殊字符。如果用户输入,则不希望抛出异常。你不想设置ValidateRequest =“False”,然后有人在页面上添加一个输入控件,忘记在使用前对它进行正确编码,从而让你打开脚本攻击。我也不满意。我认为微软只是在4.0版本上发布了一个绷带。希望他们能够在未来的版本中找出更好的方法来处理这个问题。 – MikeTeeVee 2011-05-25 01:25:45

+0

我一直使用。 – 2011-05-25 07:17:43

我碰到了同样的问题,以发现对堆栈溢出这里的答案:
A potentially dangerous Request.Form value was detected from the client

阅读中所标示的答案了高的等级评价。
这是我在我的web.config使用,因为我使用的是.NET 4.0框架:

<httpRuntime requestValidationMode="2.0" /> 

然后,添加ValidateRequest =“假”在页逐页:

<%@ 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控件的输入进行编码,以禁用验证。

据我所知,您的答案是正确的。要么开启验证,要么自己手动进行验证。麻烦的是,默认的验证是非常严格的,并且在很多情况下都不实用(我见过的很多网络应用只是在不考虑后果的情况下将其全部关闭)。

供您参考,对代码转义一个伟大的文章是http://wonko.com/post/html-escaping