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

时间:2011-05-25 00:29:34

标签: c# asp.net html validate-request

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

对我而言,对XSS攻击不太了解,这看起来非常严格。

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

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

1)保持validateRequest = true并且不允许用户输入<或者>一点都不 2)切换validateRequest = false并采取预防措施。

如果是2,我是要编码所有数据输入?比如从登录和密码到用户文本到搜索标准的文本字段?或者我只需要对某些输入执行此操作?如果是,我应该定位哪些字段?

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题并在Stack Overflow上找到答案:
A potentially dangerous Request.Form value was detected from the client

阅读标记答案中的排名较高的评论 这是我在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控件的所有输入进行编码。

答案 1 :(得分:0)

据我所知,你是对的。要么自己进行验证,要么自己手动执行。麻烦的是,默认验证非常严格,并且在很多情况下都不实用(我见过的很多网络应用程序只是在网站范围内将其关闭而不考虑后果)。

有关代码转义的精彩文章http://wonko.com/post/html-escaping

供您参考