#c# #asp.net #asp.net-mvc #http #redirect
#c# #asp.net #asp.net-mvc #http #перенаправление
Вопрос:
Я использую следующий код для перенаправления на реферер в моем контроллере:
return Redirect(this.HttpContext.Request.UrlReferrer.AbsolutePath);
Во время сканирования с помощью инструмента безопасности приложения было указано, что приведенный выше код допускает фишинговые атаки.
Веб-приложение принимает управляемый пользователем ввод, который указывает ссылку на внешний сайт, и использует эту ссылку для создания перенаправления. Это позволяет проводить фишинговые атаки.
Есть ли какой-нибудь способ безопасно перенаправить на реферер?
Комментарии:
1. Из интереса, почему вы перенаправляете пользователя обратно на страницу, с которой он пришел?
Ответ №1:
Это звучит как ошибка общего назначения, которая, вероятно, безвредна в вашем случае. Инструмент app sec не понимает, что вы отправляете людей обратно на ту страницу, с которой они пришли, а скорее видит потенциал для вас, чтобы сделать что-то вроде:
return Redirect(
is_trusted_site( this.HttpContext.Request.UrlReferrer.AbsolutePath )
? sensitiveURL
: otherURL
);
Если перенаправленный URL-адрес изменился в зависимости от содержимого UrlReferrer
, то вы можете стать жертвой подделки реферера.
Тем не менее, если вы хотите исправить «ошибку», вы, возможно, можете использовать JavaScript history.back()
.
Ответ №2:
Я не вижу никаких проблем с этим, учитывая, что на самом деле вы хотите перенаправить на того, кто размещает ссылку на ваш сайт во всем Интернете. Вы не можете контролировать, как «реферер» попадает в заголовок HTTP. Это может быть законным, это может быть подделано. Если вас это устраивает, я не вижу проблем.
Имейте в виду, что кто-то МОЖЕТ использовать ваш сайт для перенаправления на что угодно, и это открывает возможности для возможных атак. Т.е. Отправьте электронное письмо, которое фактически ссылается на ваш сайт, но в параметре запроса указывает фишинговый сайт.
Для чего вы планируете это использовать?