PHP: Защита от CRLF внедрения через пользовательский ввод

Обработка пользовательских данных для предотвращения изменения HTTP-сообщения с помощью спецсимволов возврата каретки и подачи строки - перевода строки (carriage return line feed или crlf). В качестве примера передаём GET параметр value, который содержит %0D (\n) и %0A (\r), а также тестовую полезную нагрузку newHeaders.

test.php?value=%0d%0anewHeaders

Данные без обработки переводят полезную нагрузку на новую строку

echo '<pre>', var_dump( $_GET['value'] ) ,'</pre>';
# > string(12) "
# > newHeaders"

Очистить данные можно заменой по регулярному выражению или по прямому вхождению:

echo '<pre>', var_dump( preg_replace( "/[^\\S ]/", '', $_GET['value'] ) ) ,'</pre>';
# > string(10) "newHeaders"

echo '<pre>', var_dump( str_replace( [ "\r\n", "\n", "\r" ], '', $_GET['value'] ) ) ,'</pre>';
# > string(10) "newHeaders"

Можно использовать функцию trim. Если второй параметр не передан, trim() удаляет следующие символы:

echo '<pre>', var_dump( trim( $_GET['value'] ) ) ,'</pre>';
# > string(10) "newHeaders"
PHP Безопасность up: 1.3 г. Просмотров: 615
Оценить код:

Комментарии

Ваш комментарий будет первым.
Войдите, чтобы оставить комментарий.