在Apache中将目录声明为“数据”目录?

时间:2019-09-06 09:49:21

标签: apache

我有一个使用Apache(和PHP)的网站,用户可以在其中上传内容(例如图像)。 Apache根目录为/project/www/,上传的数据保存到/project/data/中(有关信息,php类位于/project/php/中。)

因此,我有一个指向/project/www/resources/data/的符号链接/project/data/,允许通过网络访问上载的内容。

我在PHP上传脚本中确实有一些限制(它仅允许jpg / gif / png,并且在将其保存到/project/data/目录之前始终将其转换为png文件,并使用服务器定义的名称,例如{{ 1}})。

我还使用player-ID-random8hexabytes.png规则限制了所提供的网址:

/project/www/.htaccess

但是我想确保# User can upload images, turned into PNG, in /data/player/...png RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^resources/data/avatars/[a-z0-9-]+\.png$ - [E=IS_RESOURCE:yes] #[...] RewriteCond %{ENV:IS_RESOURCE} =yes RewriteRule ^ - [END] # Let /project/www/request.php file PHP handle all the rest RewriteRule ^ request.php [END] 目录中的内容永远不会被Apache解释,因此,如果某种方式,一个PHP文件最终出现在该数据目录中,它将不会被执行,只会被执行。充当八位字节流(因此,即使仅是HTML,也不会打开XSS攻击)。如果是我不知道的HTML,XML或cgi脚本引擎,则相同(这是托管的Web托管,因此,Perl或类似的其他内容也可能处于活动状态,我不知道)

用不同的措词,也许我可以将Apache可以“直接”执行的PHP脚本列入白名单,所以我只允许执行data并禁用其他所有内容(包括Perl,其他PHP脚本等)。

我不确定是否会带来比我已经拥有的更多的安全性...但是听起来也有这样的限制。

0 个答案:

没有答案