为什么在 URI 中允许编码斜杠存在安全风险?
我有一种情况,我想要在URI中编码斜杠(),但是当我发出请求时,我的规则被忽略,而是将我发送到404页面。我很快就找到了Apache指令RecordEdSlashes
,我计划打开它,但我仍然不明白为什么它首先是一个安全风险。难道没有人能手动将编码的斜杠转换为真正的斜杠,如果他们试图成为邪恶的?(虽然我看不出他们能造成什么伤害...)%2F
.htaccess
我正在测试的应用程序是用PHP编写的,与它交互的mod_rewrite规则如下所示:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^test/(.*)$ /test.php?_escaped_fragment_=$1 [NE,QSA,L]
在继续之前,我只想确保我了解风险。
澄清一下:Apache不允许在路径中使用编码斜杠,但在查询字符串中允许使用斜杠。查询字符串同样容易受到 Christian 在下面列出的漏洞利用(“远程代码执行、本地文件访问和目录遍历”)。)。
那么,为什么ASF甚至创建了一个特殊指令来允许这种行为呢?我不是想变得困难,我只是真的不明白。我认为不言而喻,在任何数据库或文件系统功能中使用任何用户输入(包括URI)都需要经过验证。