gpt4 book ai didi

asp.net - 如何在 asp.net 中优雅地处理这个错误?

转载 作者:行者123 更新时间:2023-12-02 00:41:35 25 4
gpt4 key购买 nike

我有一个 asp.net 站点....我想知道当用户输入并提交非法字符(xss 攻击)时如何优雅地处理此错误。

“从客户端检测到具有潜在危险的 Request.Form 值 (ctl00$TextBox1="").......等等"

我可以关闭 requestvalidation 属性并编写代码来过滤包含非法字符的字符串,但我认为关闭它不是一个好习惯。我宁愿保留它并优雅地捕获错误说将用户重定向到另一个页面会告诉他/她错误。你会怎么做?

最佳答案

我在一个项目中遇到了同样的问题,我们希望继续使用验证请求选项作为第一道防线。问题在于,在 Web 表单中,表单值在处理请求的初始阶段得到验证。

我们最终通过以下方式解决了这个问题:

  1. 禁用项目的请求验证
  2. 创建一个继承自基本验证器的自定义验证器
  3. 在所有页面(或母版页)上使用自定义验证器

我们的自定义验证器看起来与下面的类似:

public class UserInputValidator : BaseValidator
{

private HttpRequest Request
{
get { return HttpContext.Current.Request; }
}


protected override bool ControlPropertiesValid()
{
//Override the base functionality because this will check for a control to validate, what we won't do.
return true;
}

protected override bool EvaluateIsValid()
{
bool isValid = true;
var message = new StringWriter();
if (Request != null)
{
//Validate input will enable request validation.
Request.ValidateInput();
NameValueCollection formValues = Request.Form;
foreach (string formKey in formValues.Keys)
{
try
{
#pragma warning disable 168
//Access the form variable to trigger request validation.
string formValue = formValues[formKey];
#pragma warning restore 168
}
catch (HttpRequestValidationException)
{
string orgValue = Request.Unvalidated.Form[formKey];



message.WriteLine("The following input is not allowed: {0}", HttpUtility.HtmlEncode(orgValue));
isValid = false;
}
}
}
ErrorMessage = message.ToString();
return isValid;
}
}

这是有效的,因为当禁用请求验证时,ValidateInput没有被调用。通过在验证页面时调用此方法,我们强制为请求激活请求验证。

接下来我们要做的是访问表单集合中的每个值(至少在 asp.net 4.5 中),以便在适当的时候触发异常。

关于asp.net - 如何在 asp.net 中优雅地处理这个错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2374866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com