Asp.net Isn';如果我将ValidateRequest设置为false,这并不危险吗?

Asp.net Isn';如果我将ValidateRequest设置为false,这并不危险吗?,asp.net,validation,xss,freetextbox,Asp.net,Validation,Xss,Freetextbox,我在asp.net项目的一些Web表单中使用FreeTextBox HTML编辑器。如果我没有将ValidateRequest属性设置为false,则会出现以下错误: 潜在危险的请求。从客户端检测到表单值 但在admin文件夹中也可以,因为只有授权用户才有权使用它。但是,像每个用户都有权留下评论的部分这样的公共页面(使用FreeTextBox收集用户评论)怎么样?XSS攻击没有风险吗?如果答案不是“是”,那么什么是ValidateRequest属性?不,如果你是正确的,这可能会有危险。其背后的想

我在asp.net项目的一些Web表单中使用FreeTextBox HTML编辑器。如果我没有将ValidateRequest属性设置为false,则会出现以下错误:

潜在危险的请求。从客户端检测到表单值


但在admin文件夹中也可以,因为只有授权用户才有权使用它。但是,像每个用户都有权留下评论的部分这样的公共页面(使用FreeTextBox收集用户评论)怎么样?XSS攻击没有风险吗?如果答案不是“是”,那么什么是ValidateRequest属性?

不,如果你是正确的,这可能会有危险。其背后的想法是.net不想限制它的控件所能做的事情,但同时消除了许多安全漏洞的可能性。ValidateRequest属性就在那里,因此您可以告诉ASP.NET,“嘿,别担心,我会亲自验证它,因为我期待一些对您来说可能很危险的东西。”


默认情况下,它被设置为验证响应,因为不验证潜在的xss攻击是危险的,最好得到一个您没有意识到的验证错误,而不是让您的站点被黑客攻击。

是的,可以禁用请求验证

请求验证捕获XSS攻击和类似攻击中使用的最常见字符和短语,但它不能捕获进行攻击的所有可能方式。因此,虽然请求验证提供了针对大多数漏洞的保护,但您永远不会完全受到它的保护,您仍然必须将所有输入视为潜在的邪恶

请求验证的第一个目的是保护由对XSS攻击和类似攻击一无所知的人构建的应用程序,以便它们不会完全不受保护。如果您知道如何正确地处理输入,并且能够正确地实现输入,则不需要进行请求验证。

查看MSDN。这表明将扫描输入以查找潜在的危险内容。如果您只对纯文本使用输入字段等,那么这一切都很好。 当您希望用户提供(例如)指向其他页面的链接,或者开始在隐藏的输入字段中保留额外数据(例如XML格式)时,问题就开始了。ValidateRequest不会容忍此类内容。 ValidateRequest是一种很好的功能,我几乎总是会禁用它,但禁用它确实意味着您需要自己对输入进行一些验证。在我看来,您应该始终自己验证输入。

FreeTexBox控件和“从客户端检测到潜在危险的请求。表单值”

你可以试试另一个决定

 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;", "'");

如果(!String.IsNullOrEmpty(yourstring))txtBox.Text=yourstring.Replace(“,”>”).Replace(“,”我使用HttpUtility.HtmlEncode(),验证就足够了吗?@Mostafa:使用
HtmlEncode
就足够了,可以防止XSS攻击,但可能还有其他地方需要确保数据编码正确,例如,如果您将其存储在数据库中。@Mostafa:下载并使用MS AntiXSS库,其实现与使用Server.HtmlEncod相同e、 但是它用来清除的charachter库要大得多,使用起来也更好。作为开发人员,总是有理由反对某些东西。在一天结束时,你必须记住“深入防御”的原则“。正如@Guffa所说,请求验证有帮助,但这并不是全部。IE8和其他浏览器倾向于帮助剥离XSS,但只要遵循不信任任何输入的基本模式……这是最重要的。