我有一个这样的重写规则:
RewriteCond %{DOCUMENT_ROOT}/cache/%{REQUEST_URI} -f
RewriteRule ^(.*)$ cache/$1 [QSA,PT,L]
此规则的简要说明:它检查缓存目录中是否存在请求的文件。如果是,则它为缓存目录提供服务。
例如,对http://somehost.tld/about.html的请求 将从http://somehost.tld/cache/about.html 提供(如果该文件存在)。
我担心的是 RewriteRule 是否不安全。是否有人可以请求这样的 URL,其中包含两个句点以向上移动目录:
http://somehost.tld/../../private_file.txt
那么导致 private_file.txt 从我的 apache 公用文件夹上方的目录中提供服务?
在 URL 中包含
..
在 HTTP 请求级别或浏览器级别都不起作用。浏览器只是解析相对路径,发送对适当文件的请求(将其限制在服务器根目录)。所以在地址栏中输入:将导致对以下内容的 HTTP 请求:
换句话说,有人必须手动制作一个 HTTP 请求
../..
才能到达 Apache。这又回来了HTTP 400 Bad Request
。来自我的本地服务器的示例(没有重写规则):apache不允许“向上移动目录”。