Могу ли я оставить свой сайт уязвимым для атак, не фильтруя данные внутри перенаправления заголовка?
Например:
$foo = $_GET['foo'];
header("Location: /bar.php?foo=$foo");
die();
если ответ «да», то какие это типы атак, и является ли просто спасение данных надежным решением?
$foo = $_GET['foo'];
$foo = htmlentities($foo);
header("Location: /bar.php?foo=$foo");
die();
Параметры URL не выполняются, поэтому вы не открываете себя для атаки. Однако невозможность кодирования данных может привести к неверной интерпретации параметра. Вы должны использовать urlencode()
:
$foo = urlencode($foo);
header("Location: /bar.php?foo=$foo");
Других решений пока нет …