Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何保护php文件_Php_Security - Fatal编程技术网

如何保护php文件

如何保护php文件,php,security,Php,Security,我想知道php文件实际上是如何安全的。为什么即使知道确切的位置,也不能下载php文件 当我上传一个php文件到我的Web服务器时,比如说到domain.com/files,我调用domain.com/files页面,我可以清楚地看到php文件及其实际大小。但是,下载该文件会导致一个空文件 接下来的问题是:安全机制到底是如何工作的?web服务器的责任是将PHP脚本交给PHP解释器,PHP解释器将HTML(或其他)输出发送回web服务器 配置错误的web服务器可能无法正确处理PHP脚本,并将其以原始

我想知道php文件实际上是如何安全的。为什么即使知道确切的位置,也不能下载php文件

当我上传一个php文件到我的Web服务器时,比如说到domain.com/files,我调用domain.com/files页面,我可以清楚地看到php文件及其实际大小。但是,下载该文件会导致一个空文件


接下来的问题是:安全机制到底是如何工作的?

web服务器的责任是将PHP脚本交给PHP解释器,PHP解释器将HTML(或其他)输出发送回web服务器

配置错误的web服务器可能无法正确处理PHP脚本,并将其以原始形式发送到请求浏览器,这将使直接访问PHP脚本成为可能

您的web宿主可能有一种列出目录内容的机制,但除非它提供下载机制,在不将PHP脚本交给PHP解释器的情况下为PHP脚本提供纯文本标题(与HTML相反),否则它将作为PHP执行,而不是向下提供


为了能够下载原始PHP文件,服务器必须做一些额外的工作(可能通过另一个PHP脚本),从磁盘读取PHP文件并将其内容发送到带有纯文本标题的浏览器。

简短回答:由于服务器配置为执行PHP文件并返回结果,您将永远无法从外部访问PHP源代码。服务器会立即执行所有代码。所以,要回答你的问题:


安全机制是服务器在请求.php文件时自动执行这些文件

当您请求domain.com/files时,您的web服务器将设置为显示该目录中的所有文件

当您请求实际的php文件时,web服务器将执行该文件并将结果返回给您,而不是源代码

当然,以上两项都可以配置。您可以切换目录列表并禁用php文件的解析,以便输出实际的文件内容/源代码


关闭目录列表通常是一种很好的做法。

当您第一次在服务器上安装PHP时,它会重新配置Apache,以便在请求.PHP文件时,Apache将处理交给PHP。PHP然后处理文件中的代码,并将PHP代码
echo
ed或
print
ed返回给Apache,然后Apache通过网络将其发送回请求PHP文件的人


“安全性”很简单,因为Apache不只是为PHP文件提供服务,而是将其交给PHP处理器执行。如果Apache配置不正确,或者您使用的服务器软件不识别PHP,原始PHP文件将被发送到客户端。

这是一个巨大的误解。当您试图通过端口80访问PHP文件时,您的请求很可能是通过web服务器运行的,该服务器对该文件进行处理。对于PHP,它通过PHP解释器运行该文件,这会导致该文件创建一些输出,这就是发送给您的内容


通过删除该文件类型的解释器,您可以轻松地允许下载PHP文件。如果web服务器没有任何特殊功能,并且不理解该文件,它将让客户端下载它。

是的,我本来打算关闭目录列表,但不知何故它似乎不起作用。我的httpd.conf文件如下所示:我做错了什么?