尽管采取了安全措施,但仍从表单中获取"potentially dangerous Request.Form value"



我的网站上有一个联系人表单,我收到了一段时间以来来自的"潜在危险请求。从客户端检测到表单值"的错误。

我已经采取了一些措施来试图阻止这些行为,包括:

  • 添加防伪令牌
  • 将regex添加到联系人表单模型中,以防止大多数特殊字符被发布
  • 将Recapcha V3添加到表单

型号:

[Required]
[DataType(DataType.MultilineText)]
[RegularExpression(@"^[a-zA-Z0-9!?£$'"",.&-s]+$", ErrorMessage = "Special characters are not allowed")]
public string Message { get; set; }

查看

@using (Html.BeginForm(null, null, FormMethod.Post, new { controller = "home", action = "Contact"}))
{
@Html.AntiForgeryToken()
<div class="form">
<div class="form_inner">
<div class="fieldset">
@Html.TextAreaFor(model => model.Message, 8, 25, new { required = "required" })
@Html.ValidationMessageFor(model => model.Message)
</div>           
<footer>
@Html.HiddenFor(model => model.GoogleCaptchaToken)
<input type="submit" value="Send Email" class="btn btn_submit" />
</footer>
</div>
</div>
}

控制器

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Contact(Contact model)
{
if (ModelState.IsValid)
{
var isCaptchaValid = await IsCaptchaValid(model.GoogleCaptchaToken);
if (isCaptchaValid)
{
_contactUsService.SendEmail(model);
}
else
{
ModelState.AddModelError("GoogleCaptcha", "The captcha is not valid");
}            }
return Redirect("/contact/thankyou");
}

然而,到目前为止,这些还没有成功地阻止这些错误消息的传播。

该错误从未说明已发布的整个消息,因此我看不到是什么触发了它。我是否可以添加其他内容来阻止这些消息通过,或者让我可以从表单中看到发布的内容?

感谢

我认为您遇到的问题是,应用程序在检查正则表达式之前会拒绝该值。

您可以使用[AllowHtml]属性来允许输入将值传递给控制器,而不会因为具有危险字符而被拒绝。

但是,您应该非常仔细地检查输入的值,因为该属性会禁用该属性的验证。

您可以在这里阅读更多信息:文档中的AllowHtmlAttribute类。Microsoft

相关内容

  • 没有找到相关文章

最新更新