在网站上,我为用户提供了上传文件的选项(以后再下载)。
我上传了一个location /gis {
alias /var/www/gis;
index index.html;
}
文件,很惊讶我仅通过在浏览器中输入网址就能执行该文件。
我对文件的权限非常严格。我不希望用户执行他们上传的脚本。这是相关的hack.php
输出:
ls -la
如果我严格限制了上载文件的权限,则为:
-rwxr----- user apache hack.php
与用户无法下载文件相比,因为apache无法读取文件。
整个情况对我来说似乎很奇怪。我没有给-rwx------ user apache hack.php
赋予可执行权限,但是我仍然可以执行而没有任何麻烦。我在这里想念什么?
简而言之,主要目标是禁止执行任何上传到服务器的任何文件。
答案 0 :(得分:1)
PHP文件本身不是可执行文件。实际上,要执行它,您需要一个PHP解释器,该解释器将仅读取文件,解析并执行。因此,从操作系统的角度来看,无需对.php文件具有可执行权限。只需要读取权限。
答案 1 :(得分:1)
php文件由网络服务器执行-与文件本身的可执行标志无关。
要防止出现此问题,请将上传的文件存储在单独的文件夹中(最好不要直接通过浏览器访问)。
现在,根据所使用的网络服务器,您可以为此文件夹/路径禁用php文件的执行
对于Apache,您可以使用以下内容在上传文件夹中创建.htaccess
:
php_flag engine off
答案 2 :(得分:1)
您不需要将文件存储在公用文件夹中,可以将文件存储在受限区域中,然后读取文件并动态写入输出而无需运行它。您还可以设置新的文件扩展名。