2012-02-14 78 views
4

我想知道PHP文件如何确保安全。即使确切的位置是已知的,为什么不能下载php文件?如何保护PHP文件

当我上传一个php文件到我的网络服务器,让我们说到domain.com/files,我打电话到domain.com/files页面,我可以清楚地看到php文件和它的实际大小。然而,下载文件会导致一个空文件。

现在的问题是:安全机制是如何工作的?

回答

7

Web服务器的职责是将PHP脚本传递给PHP解释器,该解释器将HTML(或其他)输出发送回Web服务器。

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

你的虚拟主机可能有一个机制来列出目录的内容,但除非它提供了一个下载机制来为PHP脚本提供纯文本头(而不是HTML),而无需将其交给PHP解释器,它将以PHP身份执行而不是传送。

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

0

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

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

2

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

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

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

它通常是关闭目录列表的好习惯。

+0

是的,我打算关闭目录列表,但不知怎的,它似乎不工作。我的httpd.conf文件如下所示:http://pastebin.com/b6rgh15h我做错了什么? – cherrun 2012-02-14 18:30:18

+0

杜!没有所有的目录标签... – cherrun 2012-02-14 18:47:09

1

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

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

0

这是一个巨大的误解。当您尝试通过端口80访问PHP文件时,您的请求可能会通过网络服务器运行,该服务器会对文件执行某些操作。在PHP的情况下,它通过PHP解释器运行该文件,该文件会导致该文件创建一些输出,而是发送给您的内容。

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