Получение «потенциально опасного значения Request.Form» из формы, несмотря на принятые меры безопасности - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть форма контакта на моем веб-сайте, из-за которой я получаю сообщения об ошибке "Возможно, из клиента обнаружено потенциально опасное значение Request.Form".

Я предпринял некоторые меры чтобы попытаться остановить их, в том числе:

  • Добавление токена защиты от подделки
  • Добавление регулярного выражения в модель формы контакта для предотвращения отправки большинства специальных символов
  • Добавление Напомним 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");
}

Однако они до сих пор имеют не удалось остановить эти сообщения об ошибках.

В сообщении об ошибке никогда не указывается все отправленное сообщение, поэтому я не вижу, что его вызвало. Есть ли что-то еще, что я могу добавить, чтобы предотвратить их прохождение, или чтобы я мог видеть, что публикуется из формы?

Спасибо

1 Ответ

0 голосов
/ 03 апреля 2020

Я думаю, что у вас проблема в том, что приложение отклоняет значение перед проверкой вашего регулярного выражения.

Вы можете использовать атрибут [AllowHtml], чтобы вход мог передавать значение в контроллер без быть отвергнутым за наличие опасных персонажей.

Но вы должны очень тщательно проверить значение ввода, так как этот атрибут отключает проверку этого свойства.

Подробнее об этом можно прочитать здесь: Класс AllowHtmlAttribute в Docs.Microsoft

...