Безопасное перенаправление в переменную $ _GET с помощью header () - PullRequest
1 голос
/ 22 марта 2011

Я прохожу текущую систему входа в систему, и после успешного входа в систему выполняется редирект, просто используя header("Location: ".$_POST['url']);. Сам $_POST['url'] устанавливается из параметра $_GET['url'] в скрытом поле при загрузке формы.

Как видите, существует очевидный способ похитить пользователя и, возможно, даже заставить его войти на фишинговый сайт.

Есть ли надежный и простой способ предотвратить угон $_POST['url']? Первоначально я думал о чем-то вроде basename(), но иногда нужная страница находится в каталоге, поэтому это не сработало бы.

Ответы [ 4 ]

4 голосов
/ 22 марта 2011

Вы должны установить URL перенаправления в сеансе пользователя и перенаправить пользователя на этот URL после успешного входа в систему. Таким образом, URL не может быть взломан.

3 голосов
/ 22 марта 2011

Я думаю, что самым безопасным способом было бы использовать только часть после имени домена и создать белый список файлов / каталогов, которые разрешены, и проверить их.

1 голос
/ 22 марта 2011

Используйте parse_url(), чтобы получить PHP_URL_PATH и PHP_URL_QUERY детали и перенаправить на относительный путь.

Но лучше хранить ссылки перенаправления в сеансе.

0 голосов
/ 22 марта 2011

Это будет из переменных POST, использующих этот код, а не переменных GET.Однако ни один из них не является более «безопасным» в том смысле, что оба могут быть подделаны с относительной легкостьюЕсли вас беспокоят значения, которые могут быть переданы, вам необходимо каким-то образом их проверить.Если существует всего несколько возможных URL-адресов, просто проверьте, является ли это значение in_array(), и перенаправьте в местоположение по умолчанию, если нет.Не мог ли пользователь просто ввести какой-либо URL в адресную строку?Что хорошего в том, чтобы перенаправить себя на другой URL этим способом?Если это программное обеспечение не использует HTTP_REFERER для обеспечения безопасности ..., что также не будет безопасным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...