В моем веб-приложении я использую заголовки HTTP Location:
для перенаправления (например, POST / redirect / GET).Но целевые местоположения должны быть динамическими (например, login.php?dest=pagexy.php
).Мы все знаем, что любой изменяемый пользователем ввод должен быть правильно экранирован для предотвращения XSS, поэтому
header('Location: '.$_REQUEST['dest']);
выглядит неправильно.Простой urlencode
-ing может использоваться только для простых файлов, но не для путей (например, междоменных URL-адресов с единой регистрацией).
Я также читал об уязвимостях, таких как:
Location: javascript:...bad.stuff... or
Location: data:text/html:base64,...
Наличие явного белого списка адресатов, вероятно, было бы наиболее безопасным решением, но оно утомительно и может быть невозможно даже для всех вариантов использования.
Решения?
Редактировать:
Достаточно ли правильное urlencoding для простых файлов?Предположим, что последняя версия PHP (> 5.1.2, AFAIK) запрещает переводы строк в header ().
Как я могу безопасно обрабатывать междоменную проверку учетных данных, не зная друг друга-домензаранее?