即使没有可执行权限也可以执行php文件

即使没有可执行权限也可以执行php文件,php,permissions,Php,Permissions,在一个网站上,我为用户提供上传文件和下载文件的选项 我上传了一个hack.php文件,很惊讶我只需在浏览器中键入url就可以执行它 我对该文件的权限非常严格。我不希望用户执行他们上传的脚本。这是相关的ls-la输出: 如果我将上载文件的权限收紧为: -rwx------ user apache hack.php 用户无法下载该文件,因为apache无法读取该文件 整个情况在我看来很奇怪。我没有给hack.php任何可执行权限,但我仍然可以毫无困难地执行。我错过了什么 简而言之,主要目标是禁止执

在一个网站上,我为用户提供上传文件和下载文件的选项

我上传了一个hack.php文件,很惊讶我只需在浏览器中键入url就可以执行它

我对该文件的权限非常严格。我不希望用户执行他们上传的脚本。这是相关的ls-la输出:

如果我将上载文件的权限收紧为:

-rwx------ user apache hack.php
用户无法下载该文件,因为apache无法读取该文件

整个情况在我看来很奇怪。我没有给hack.php任何可执行权限,但我仍然可以毫无困难地执行。我错过了什么


简而言之,主要目标是禁止执行上传到服务器的任何类型的文件。

PHP文件本身不是可执行文件。实际上,要执行它,您需要一个PHP解释器,它只需读取文件、解析文件并执行即可。因此,从操作系统的角度来看,不需要对.php文件拥有可执行权限。只需要读取权限。

PHP文件本身不是可执行文件。实际上,要执行它,您需要一个PHP解释器,它只需读取文件、解析文件并执行即可。因此,从操作系统的角度来看,不需要对.php文件拥有可执行权限。只需要读取权限。

php文件由Web服务器执行-这与文件本身的可执行标志无关

为了防止出现问题,您需要将上载的文件存储在单独的文件夹中,理想情况下,不能通过浏览器直接访问

现在,根据您使用的Web服务器,您可以禁用此文件夹/路径的php文件的执行

对于Apache,您可以使用以下内容在上载文件夹中创建.htaccess:

php_flag engine off

php文件由Web服务器执行-这与文件本身的可执行标志无关

为了防止出现问题,您需要将上载的文件存储在单独的文件夹中,理想情况下,不能通过浏览器直接访问

现在,根据您使用的Web服务器,您可以禁用此文件夹/路径的php文件的执行

对于Apache,您可以使用以下内容在上载文件夹中创建.htaccess:

php_flag engine off

您不需要将文件存储在公用文件夹中,您可以将文件存储在检索区域中,然后在不运行它的情况下动态读取文件并写入输出。您还可以设置新的文件扩展名


类似这样的情况:

您不需要将文件存储在公用文件夹中,您可以将文件存储在检索区域中,然后读取文件并动态写入输出,而无需运行它。您还可以设置新的文件扩展名


类似这样:

那么可执行权限仅适用于bash scrips?而且,由于PHP解释器是我的系统上唯一的解释器,所以我需要做的就是检查文件是否有.PHP扩展名,如果有,则放弃它?可执行权限对于二进制文件最有用。例如,如果您有一些具有可执行权限的bash脚本,它允许您通过./your_script.sh运行它,但这只是因为您的shell。请注意,如果您取消了这些权限,您仍然可以使用bash your_script.shIf执行脚本。如果您想阻止在Web服务器上执行php文件,则应使用.htaccess文件。因此,可执行权限仅适用于bash scrips?此外,由于php解释器是我的系统上唯一的解释器,我所需要做的就是检查文件是否有.php扩展名,如果有,就放弃它。可执行权限对二进制文件最有用。例如,如果您有一些具有可执行权限的bash脚本,它允许您通过./your_script.sh运行它,但这只是因为您的shell。请注意,如果您取消了这些权限,您仍然可以使用bash your_script.shIf执行脚本。如果您希望阻止在Web服务器上执行php文件,则应使用.htaccess文件。不要将其存储在可公开访问的文件夹中;这样,用户永远无法执行它,您可以通过php提供服务;这样,用户永远无法执行它,您可以通过php提供服务。