如果我将ValidateRequest设置为false并不危险?

我在我的asp.net项目中的一些webforms中使用FreeTextBox HTML编辑器。如果我没有将ValidateRequest属性设置为false,我会收到此错误:   从客户端检测到潜在危险的Request.Form值 但是在管理文件夹中没问题,因为只有授权用户才有权使用它。但是公共页面怎么样,每个用户都可以访问的部分留下评论(使用FreeTextBox收集用户评论)?对XSS攻击没有风险吗?如果答案不是,那么ValidateRequest属性是什么?     
已邀请:
不,你是对的,这是有潜在危险的。它背后的想法是.net不想限制它的控件可以做什么,但同时消除了安全漏洞的许多可能性。 ValidateRequest属性就在那里,所以你可以告诉ASP.NET,“嘿,不要担心这个。我将自己验证它,因为我期待一些可能对你来说很危险的东西。” 它设置为默认验证响应,因为不验证潜在的xss攻击是危险的,并且最好得到一个你没有意识到的验证错误,而不是你的网站遭到攻击。     
是的,可以禁用请求验证。 请求验证捕获了XSS攻击中使用的最常见的字符和短语,但它无法捕获所有可能的漏洞利用方式。因此,虽然请求验证提供了对大多数漏洞的保护,但您永远不会受到它的完全保护,您仍然必须将所有输入视为潜在的恶意。 请求验证的第一个目的是保护由对XSS攻击无关的人构建的应用程序,以便它们不会完全不受保护。如果您知道如何正确处理输入,并且还设法正确实现输入,则不需要请求验证。     
看看MSDN上的ValidateRequest。这会告诉您扫描输入是否存在潜在危险内容。如果您只使用明文的输入字段等,这一切都很好。 一旦您希望用户提供例如,问题就会出现。指向其他页面的链接,或者开始在隐藏的输入字段中保留额外的数据(例如XML格式)。 ValidateRequest不会容忍此类内容。 ValidateRequest是一个很好的功能,我几乎总是最终禁用,但禁用它确实意味着你需要自己对输入进行一些验证。在我看来,无论如何你应该总是自己验证输入。     
FreeTexBox控件和“从客户端检测到一个潜在危险的Request.Form值” 你可以尝试另一个决定
 if(!this.Page.ClientScript.IsOnSubmitStatementRegistered("Replace"))
{
 string script = @"if (Page_IsValid){FTB_API['" + txtBox.ClientID + @"'].initialized=false;   FTB_API['"  + txtBox.ClientID + @"'].htmlEditor.value=FTB_FreeTextBox.prototype.HtmlEncode( FTB_API['" + txtBox.ClientID + @"'].htmlEditor.value);}";
 this.Page.ClientScript.RegisterOnSubmitStatement(this.Page.GetType(), "Replace", script);
}
当您将字符串从服务器发送到客户端应用程序时,不要忘记替换符号
if(!String.IsNullOrEmpty(yourstring)) txtBox.Text= yourstring.Replace("&gt;", ">").Replace("&lt;", "<").Replace("&amp;", "&").Replace("&quot;", ('"').ToString()).Replace("&#146;", "'");
在这种情况下,您不需要关闭ValidateRequest。您还可以在将字符串保存到数据库之前替换字符。     

要回复问题请先登录注册