Подделка межсайтовых запросов Asp.net core .cshtml страницы - PullRequest
0 голосов
/ 05 июня 2018

Я запустил инструмент анализа качества кода в моем веб-приложении, и он предупреждает меня о «подделке межсайтовых запросов» при редактировании и создании страниц cshtml.

Я автоматически создал веб-приложение mvc asp.net coreгенерация кода с помощью моделей сущностей.поэтому сгенерированные формы работают нормально для грубых операций.Я запустил приложение и обнаружил, что в исходном коде html есть скрытый токен, сгенерированный с автоматически сгенерированным кодом по умолчанию.Но почему качественные инструменты жалуются на эту проблему безопасности?

Я попробовал следующее, но не повезло.Раньше я добавлял AntiforgeryToken в мои бритвенные страницы MVC.Не уверен, как справиться с этим сценарием в ядре asp.net MVC.Я думал, что это будет генерировать автоматический токен без добавления какого-либо конкретного кода.

<form asp-action="Edit" class="myForm">
            @Html.AntiForgeryToken()
<-- my form elements -->
</form>

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

ASP .NET Core 2.2 автоматически генерирует токен защиты от подделки в теге HTML <form/> (в конечном итоге @using (Html.BeginForm(..)) только с указанным методом POST.По умолчанию ваша форма будет считаться методом GET, поэтому в вашем случае не будет сгенерирован токен защиты от подделки.Приложения ASP.NET Core не генерируют токены защиты от подделки для безопасных методов HTTP (GET, HEAD, OPTIONS и TRACE).Полное объяснение можно найти в статье, упомянутой ранее в @ JamieD77: Предотвращение атак подделки межсайтовых запросов (XSRF / CSRF) в ASP.NET Core

Существует несколько возможных сценариев.:

  • сценарии без API: Рекомендуется AutoValidateAntiforgeryToken.Это гарантирует, что небезопасные действия HTTP-глаголов (например, POST, DELETE, PUT и PATCH) защищены по умолчанию.

  • API-сценарии: Здесь вы можете предотвратить и другие действия(например, методы GET) с ValidateAntiForgeryToken.

0 голосов
/ 06 июня 2018

попробуйте добавить method = "post"

<form asp-action="Edit" class="myForm" method="post">
...