【问题标题】:What do I need to do to protect my site if I choose to set ValidateRequest= false?如果我选择设置 ValidateRequest=false,我需要做些什么来保护我的网站?
【发布时间】:2011-09-01 09:03:04
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 据我所知,您是正确的,因为您只有两个选择。我不知道防止用户输入特殊字符的干净方法。如果用户输入 ,您不希望抛出异常。而且您不想设置 ValidateRequest="False" 然后有人向页面添加输入控件并忘记在使用它之前对其进行正确编码,从而使您容易受到脚本攻击。我也不满意。我认为微软只是在 4.0 中对此进行了处理。希望他们能在未来的版本中找到更好的方法来处理这个问题。

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


【解决方案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 控件的所有输入进行编码。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-07
      • 2021-10-13
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 2021-01-03
      • 2017-09-22
      相关资源
      最近更新 更多