Request.UrlReferrer легко обойти и не надежно использовать в качестве охраны? - PullRequest
1 голос
/ 13 февраля 2020

Я пытался сделать охрану для какого-либо действия, чтобы оно было недоступно, если запрос не поступил от определенного хоста. Вот пример кода.

public ActionResult test()
{
    if (Request.UrlReferrer == null || Request.UrlReferrer.Host != "mydomain.com") { return Content("Blocked!"); }
    else { return Content("Authorized!"); }
}

Кажется, все работает хорошо, пока я не захожу на mydomain.com"набрал ссылку в адресной строке", открыл консоль браузера и набрал

window.location.href = "https://domainholdingthatacion.whatever/ActionRoute/test"; //trying to get unauthorized access

Это сработало! Он входит в ветку else. Мне нужен ваш вклад, потому что я понятия не имею, правильно ли я его использую, поскольку Request.UrlReferrer не предназначен для этого или является уязвимым по своей природе.

1 Ответ

3 голосов
/ 13 февраля 2020

UrlReferrer не является безопасным для использования для авторизации. Любой браузер или клиент может установить URL-адрес реферера по своему усмотрению. Кроме того, некоторые браузеры блокируют отказ от соблюдения этого заголовка (хотя это в основном верно только для разных доменов) по соображениям конфиденциальности.

Специально для этого есть аннотация Authorize.

...