Предотвращение подделки межсайтовых запросов

Я понимаю подделку межсайтовых запросов и нашел множество блогов, статей в Интернете, чтобы обрабатывать его в asp.net mvc, но не получил достойных ссылок, полезных решений для борьбы с CSRF-атаками в веб-приложениях asp.net. Я запустил инструмент безопасности на моем веб-сайте и сообщает о подделке межсайтовых запросов и показывает риск

Возможно украсть или манипулировать сеансом клиента и файлами cookie, которые могут использоваться для выдачи себя за законного пользователя, позволяя хакеру просматривать или изменять записи пользователя и выполнять транзакции от имени этого пользователя

Мой вопрос: как бороться с CSRF-атаками в веб-приложениях ASP.NET?


person F11    schedule 10.07.2014    source источник


Ответы (3)


Для защиты от CSRF в приложении веб-форм.

ASP.NET имеет возможность поддерживать ваше ViewState. ViewState указывает статус страницы при отправке на сервер. Статус определяется через скрытое поле, размещенное на каждой странице с элементом управления. Viewstate можно использовать в качестве защиты от CSRF, поскольку злоумышленнику сложно подделать действительное Viewstate. Невозможно подделать действительное Viewstate, поскольку вполне возможно, что значения параметров могут быть получены или угаданы злоумышленником. Однако, если текущий идентификатор сеанса добавляется к ViewState, он делает каждое Viewstate уникальным и, следовательно, невосприимчивым к CSRF.

Также относительно вашего другого вопроса о CSRF:

Можно украсть или манипулировать сеансом клиента и файлами cookie, которые могут использоваться для выдачи себя за законного пользователя, позволяя хакеру просматривать или изменять записи пользователя и выполнять транзакции от имени этого пользователя.

Атака CSRF обычно не позволяет злоумышленнику ничего просматривать, а только делать запросы от имени вошедшего в систему пользователя. Тем не менее, если есть опция смены пароля, которая не требует отправки текущего пароля, злоумышленник может вызвать эту функцию, используя сеанс жертвы, чтобы затем позже войти непосредственно в систему как пользователь-жертва.

person SilverlightFox    schedule 12.07.2014

Если вы посмотрите на вторую ссылку, которую вы разместили, вы увидите логику проверки Html.AntiForgeryToken() в MVC:

void ValidateRequestHeader(HttpRequestMessage request)
{
    string cookieToken = "";
    string formToken = "";

    IEnumerable<string> tokenHeaders;
    if (request.Headers.TryGetValues("RequestVerificationToken", out tokenHeaders))
    {
        string[] tokens = tokenHeaders.First().Split(':');
        if (tokens.Length == 2)
        {
            cookieToken = tokens[0].Trim();
            formToken = tokens[1].Trim();
        }
    }
    AntiForgery.Validate(cookieToken, formToken);
}

Не должно быть так сложно сделать то же самое в вашем приложении веб-форм.

См. ЭТО ответ для возможного решения.

person Christoph Fink    schedule 10.07.2014

Есть ли какое-либо решение для того же в приложении веб-формы Asp.net, которое будет обрабатываться в Global.asax.

В MVC это становится очень простым, но если старое приложение представляет собой простую веб-форму и вы хотите предотвратить такую ​​​​атаку на глобальном уровне, то какое решение будет.

person Vishal Hatiskar    schedule 20.08.2014