Является ли это перенаправление PHP небезопасным?

Хм, я не могу действительно указать какие-либо неуверенности, но задавался вопросом, можете ли вы, если да, как можно патч / исправить?

Вот код:

header("Location: http://example.com/search/{$_POST['term']}/{$_POST['type']}"); 

Сайт, на который я перенаправляю, также делает валидацию и дезинфекцию на их стороне, но то, что меня беспокоит, – это перенаправление небезопасно (на моей стороне – видя, что я использую прямые $_POST ) ,

Цените всю помощь.

PS: Просто стало любопытно, поскольку я всегда думал, что использование несанкционированного входа пользователя опасно (или, по крайней мере, это относится к XSS и SQLi).

В целом, для большинства веб-сайтов, на которых установлена ​​современная версия PHP, она безопасна .

Есть две проблемы:

  • Злоумышленник может обмануть жертву, невольно посещая любую страницу формы /search/*/* на сайте, связывая их со вредоносной страницей, которая отправляет сообщения на страницу с вашей перенаправлением. (Обратите внимание, что они не ограничиваются двумя сокращениями после /search потому что их переменные POST могут содержать слэши.) Это похоже на передачу кому-то сокращенного URL-адреса bit.ly, который перенаправляет их, поэтому это не так уж плохо.
  • Разделение ответа HTTP . Если злоумышленник включает в себя новые строки (в частности, CRLF / \r\n ) в своих POST-данных, они могут вызвать вызов header() для вывода нескольких заголовков, включая заголовки для установки файлов cookie и т. Д. Однако с PHP 5.1.2 это исправлено .

Это не проблема безопасности, но вы должны, вероятно, URL-кодировать эти аргументы с помощью urlencode($_POST['term']) .

Да, это довольно неуверенно. НИКОГДА НИКОГДА НЕ ВКЛЮЧАЕТ НЕПРЕРЫВНЫЙ ВХОД пользователя в скрипт. Я рекомендовал бы, как минимум , использовать filter_input_array для дезинфекции вашего массива $ _POST, прежде чем что-либо делать с ним.

Надеемся, что веб-уровень, который получает перенаправленный URL-адрес от клиента, выполнит проверку по URL-адресу в целом, поэтому вы, вероятно, будете в безопасности. Но это не помешало бы запустить эти два поля с помощью простой проверки перед отправкой перенаправления.

Я думаю, вы найдете это прочитанное стоящим.