Ваш последний комментарий был верным.
Строки запроса - и любые специальные символы, в этом отношении, всегда кодируются.Единственный возможный способ внедрения такого рода инъекций был 1), если < > "
и т. Д. Были действительные символы URL или 2) даже действительные символы имени файла .Обратите внимание, что оба набора исключают любые символы HTML.Единственный раз, когда вам придется беспокоиться о внедрении, это если вы используете переменные $_GET
или $_POST
в PHP и выводите их напрямую - так как они декодируются в простой текст.Затем вы должны использовать htmlentities
для их надлежащей очистки. См. Более широкое обсуждение внедрения текста.
Поскольку вы непосредственно получаете доступ к допустимой строке URL-адреса (через $_SERVER['REQUEST_URI']
), вы никогда не получите недействительный (по спецификации) URL-адрес.
Браузер должен автоматически обрабатывать эту кодировку перед отправкой на сервер, а если нет, сервер должен защищать от любого некорректного URL.В любом случае, вашему сценарию не нужно беспокоиться об обработке этого.
РЕДАКТИРОВАТЬ
Похоже, вы можете иметь такие символы, как < >
в именах файлов на Mac /Linux, однако они никогда не будут должным образом загружены сервером, поскольку они не следуют рекомендациям URL.
РЕДАКТИРОВАТЬ 2
Я только что протестировал это на сервере Node.JSи кажется, что ему удается обслуживать файлы со специальными символами.Чтобы быть в безопасности, всегда кодируйте, используя htmlentities
или htmlspecialchars
, как предложено на этой странице, однако, я никогда не могу себе представить, чтобы кто-то имел имя файла со специальными символами HTML - это, в основном, XSSing самостоятельно - но это полезно знатьиз.
РЕДАКТИРОВАТЬ 3
Curiosity взяла верх над собой, и я развернул файл с именем "<test.php
на своем сервере NGINX, работающем на виртуальной машине Linux.Вот частичный вывод print_r($_SERVER)
:
[DOCUMENT_URI] => /"<test.php
[REQUEST_URI] => /%22%3Ctest.php
[SCRIPT_NAME] => /"<test.php
Обратите внимание, что REQUEST_URI
все еще кодируется, даже если сервер правильно разрешает путь.Таким образом, вы можете игнорировать мое последнее редактирование, предполагая, что вы придерживаетесь REQUEST_URI
.Повторим, что файлы никогда не должны именоваться специальными символами, так что в любом случае это не будет проблемой.