如果选择设置ValidateRequest = false,该怎么做才能保护我的网站?

问题描述

| 我有点发现,因为认情况下ValidateRequest = true,所以认情况下,您不能在任何输入字段中输入\“ <\”或\“> \”。 对我来说,对XSS攻击了解得不多,这似乎很严格。 为了解决这个问题,我意识到我可以使用validateRequest = false来对用户数据进行编码。显然,Microsoft有充分的理由将validateRequest = true,所以现在的问题是我的整个站点都有很多页面,所有页面都带有“不能放置<或>问题”。 我的问题是我只有两个选择吗? 1)保留validateRequest = true,并且完全不允许用户输入<或> 2)切换validateRequest = false并采取预防措施。 如果是2,我是否要对所有数据输入进行编码?喜欢从登录名和密码的文本字段到用户文本再到搜索条件?还是只需要对某些输入执行此操作?如果是这样,我应该针对哪些领域?     

解决方法

我遇到了同样的问题,并在此处找到堆栈溢出的答案: 从客户端检测到潜在的危险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控件的所有输入进行编码。     ,据我所知,您是正确的。保留验证或手动进行验证。问题在于默认验证非常严格,并且在许多情况下不切实际(我见过很多Web应用程序只是在站点范围内将其关闭,而没有过多考虑后果)。 供您参考,有关代码转义的精彩文章是http://wonko.com/post/html-escaping