【发布时间】:2011-08-22 00:23:06
【问题描述】:
我有一种情况,我想在 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 不允许在 path 中使用编码斜线,但在查询字符串中允许使用它们。查询字符串同样容易受到 Christian 下面列出的攻击(“远程代码执行、本地文件访问和目录遍历”)。
那么,为什么 ASF 会创建一个特殊指令来允许这种行为呢?我不是想变得困难,我只是真的不明白。我认为在任何数据库或文件系统功能中使用之前,任何用户输入(包括 URI)都需要经过验证。
【问题讨论】:
标签: php apache mod-rewrite