我的网站上有一个联系人表单,我收到了一段时间以来来自的"潜在危险请求。从客户端检测到表单值"的错误。
我已经采取了一些措施来试图阻止这些行为,包括:
- 添加防伪令牌
- 将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