Это перенаправление PHP небезопасно? - PullRequest
9 голосов
/ 07 февраля 2011

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

Вот код:

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

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

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

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

Ответы [ 4 ]

8 голосов
/ 07 февраля 2011

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

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

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

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

0 голосов
/ 07 февраля 2011

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

0 голосов
/ 07 февраля 2011

Да, это довольно небезопасно.НИКОГДА не следует НИКОГДА не вставлять в скрипт неконтролируемый пользовательский ввод.Я бы рекомендовал при минимуме использовать filter_input_array для очистки вашего массива $ _POST, прежде чем что-либо делать с ним.

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