У меня есть ситуация, когда мне нужны закодированные косые черты в URI (% 2F
), но мои правила .htaccess
игнорируются, когда я сделайте запрос, отправив меня вместо этого на страницу 404. Я быстро нашел директиву Apache AllowEncodedSlashes
, которую планирую включить, но до сих пор не понимаю, почему это вообще представляет угрозу безопасности. Никто не мог вручную преобразовать закодированные косые черты в настоящие косые черты, если они пытались быть гнусными? (Хотя я не вижу, какой вред они могут нанести ...)
Приложение, которое я тестирую, написано на PHP, и правило mod_rewrite, которое взаимодействует с ним, выглядит так:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^test/(.*)$ /test.php?_escaped_fragment_=$1 [NE,QSA,L]
Я просто хочу убедиться Я понимаю риски, прежде чем продолжить.
Для пояснения: Apache не разрешает закодированные косые черты в пути , но они разрешены в строке запроса. Строка запроса так же восприимчива к эксплойтам, перечисленным ниже Кристианом («Удаленное выполнение кода, доступ к локальным файлам и обход каталогов»).
Так почему же ASF зашел так далеко, что создал специальную директиву только для разрешения этого поведение? Я не пытаюсь быть сложным, я просто не понимаю. Я думаю, что само собой разумеется, что любой вводимый пользователем (включая URI) должен быть проверен перед использованием его в любой функции базы данных или файловой системы.