Что такое open redirect и почему он опасен?
Атаки на клиент
Open redirect — уязвимость, при которой сайт перенаправляет пользователя по адресу из параметра, не проверяя его, например ?next=https://evil.com.
Почему это проблема
Ссылка выглядит доверенной (https://site.com/login?next=...), но после входа пользователь оказывается на фишинговой странице. Также open redirect помогает обходить проверки в OAuth и красть коды авторизации.
Как защититься
- Разрешать только относительные пути, начинающиеся с одного
/, и отвергать//evil.comи/\evil.com. - Или сверять адрес с белым списком доменов.
- Разбирать адрес через
new URL()и сравниватьorigin, а не искать подстроку.
function safeNext(next) {
try {
const url = new URL(next, location.origin);
return url.origin === location.origin ? url.pathname + url.search : '/';
} catch {
return '/';
}
}Коротко для собеседования
Не перенаправляйте на произвольный адрес из параметров. Допускайте только свой origin или белый список.