Безопасно ли использовать $_SERVER['REQUEST_URI']?

18 авг. 2013 г., 15:51:12
Просмотры: 18.8K
Голосов: 6

Я изучил другие ответы и вижу, что $_SERVER['REQUEST_URI'] обычно рекомендуется и является общепринятым решением для получения URI текущей страницы вместе с $_SERVER['HTTP_HOST'].

Я посмотрел исходный код WordPress, и там это тоже широко используется.

Но я нашел некоторые противоречия по поводу того, что это не работает на IIS. Возможно, это было проблемой только в прошлом? Я даже попытался установить IIS на свой компьютер, чтобы проверить, но не смог его настроить, и это кажется излишним просто для подтверждения этого факта.

Похоже, это единственная переменная SERVER, которая включает нужную мне информацию:

/pane-slug/nggallery/tags/dark-colors/

выделенная часть примера добавляется через NextGEN Gallery 2 и доступна только через $_SERVER['REQUEST_URI'], больше никак. Ранее это можно было получить через get_query_var, но теперь нет.

Если $_SERVER['REQUEST_URI'] не установлена, попытка сымитировать ее вручную на основе PHP_SELF и QUERY_STRING дает неэквивалентные результаты.

Так можно ли безопасно полагаться на то, что $_SERVER['REQUEST_URI'] всегда доступна для использования в WordPress? Я предполагаю, что да, так как ядро WordPress использует ее, но хотел уточнить.

0
Все ответы на вопрос 1
1
13

$_SERVER['REQUEST_URI'] в WordPress никогда не будет пустым, так как он заполняется в функции wp_fix_server_vars() (файл wp-includes/load.php).

Эта функция вызывается в wp-settings.php до загрузки любых плагинов. Поэтому вы можете использовать её.

Но всегда экранируйте значение. Оно является глобальным и может быть изменено любым другим кодом, поэтому нельзя доверять его содержимому.

Другой случай — доступ к значению через

filter_input(INPUT_SERVER, 'REQUEST_URI'); 

Запись значения WordPress не повлияет на результат, так как filter_input() всегда берёт исходное значение. Хотя это более современный и чистый подход, он может не работать в некоторых случаях. См. также эту ветку на Stack Overflow.

18 авг. 2013 г. 15:56:06
Комментарии

Спасибо большое, отличная информация. Теперь я могу удалить IIS и забыть о нем :) Я массово искал в файлах WP $_SERVER['REQUEST_URI'], но каким-то образом пропустил то, на что вы указали. Конечно, я его экранирую, я ничему не доверяю. Просто нужно было узнать, можно ли его использовать. Еще раз спасибо.

Firsh - justifiedgrid.com Firsh - justifiedgrid.com
18 авг. 2013 г. 16:22:57