У меня есть ситуация, когда я хочу кодированные косые черты в 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) должен быть проверен перед его использованием в любой функции базы данных или файловой системы.