将我的 PHP 文件放在哪里
Posted
技术标签:
【中文标题】将我的 PHP 文件放在哪里【英文标题】:Where to put my PHP files 【发布时间】:2015-02-28 16:12:48 【问题描述】:我已经完成了我的 php 项目开发。它是在我的 PC 上本地开发的。现在我准备将它上传到我的网络服务器上并公开访问。
然而有一件事情困扰着我:目前,所有 PHP 文件都在我的 WWW 文件夹中,其中包含所有 html、javascript、CSS 和图像文件。 PHP 文件很敏感,因为它们访问 mysql 数据库并且通常包含密码和文件路径,这些密码和文件路径旨在对用户保密。
如果我将 PHP 文件留在 WWW 目录中,恐怕它们可以像其他文件和图像一样被公众访问。恐怕熟练的用户可以下载并阅读它们,因此会泄露有关我的Web服务器的秘密信息。
我的担心合法吗? Web 服务器会自动隐藏 .php 文件吗?我应该将 PHP 文件移动到另一个位置,远离 WWW 文件夹吗?有没有其他方法可以保护我的 PHP 文件不被下载?
我正在使用:
Apache 2.4.7 PHP 5.5.8 MySQL 5.6.15【问题讨论】:
没有 PHP 文件不能像静态文件一样访问 是的。说不要担心的人是粗心的。如果一切都配置了权限并且您的网络服务器配置为运行 PHP 文件,那么就没有问题。但是 PHP 源文件只是文本文件,如果你的服务器配置不正确,它可能只是这样对待它们。 @GolezTrol 如果服务器配置不正确,我不建议将任何敏感数据放在任何地方。网络服务器尊重您的.htaccess
的保证是什么(假设 apache 网络服务器认为 AllowOverride None
)
网络服务器默认配置为只提供文件。您需要 extra 配置来将 PHP 文件作为 PHP 文件处理,并隐藏目录列表。很容易出错或忘记导致这些额外设置不再起作用的东西。这比授予对 doc root 外部文件的访问权限的错误要现实得多。关于将敏感文件上传到未完全配置的服务器@bansi 的好处。
啊,是的,问题是:它会列出您的文件/文件结构,但无法访问文件的源代码。现在我知道您可能有理由想要隐藏您的文件结构,但那是另一回事。您的问题不一定是“我将 PHP 文件放在哪里”,而是“如何禁用目录列表”。 ***.com/questions/2530372/… 编辑:您也可以选择不仅列出具有 .php 扩展名的文件。
【参考方案1】:
非常安全。如果您安装了 PHP,您的网络服务器将始终尝试运行 PHP 文件而不是显示其代码,即使代码失败,您也会收到错误消息或一个空白页而不是代码。
除此之外,您还可以使用.htaccess
或其他类型的服务器配置来禁止查看这些文件。
但是.. 必须说,如果这些设置中的任何一个配置不正确,网络服务器确实可以将 PHP 文件作为纯文本文件提供服务!
所以我认为如果不应该直接访问它们,将所有 php 文件移出 www 文件夹是一个好主意。您经常会发现只有一个 index.php 处理所有请求并包含其他 php 文件。不在 www(文档根目录)中的 PHP 文件仍然可以包含在内,因此将这些文件放在单独的文件夹中是一种很好的安全措施。这样,当您犯了一点点配置错误时,就可以降低暴露这些文件的风险。
毕竟,即使它以前有效,也很容易破坏它。也许您想稍微调整一下配置,或者您在共享主机上,托管服务提供商可能会在您不知情的情况下进行更改,因此这是明智之举。
所以.. 将文件移出 www 文件夹是个好主意。这通常很容易做到(尽管这取决于您的应用程序结构),因此它只是一种额外的安全措施,通常不会花费您一毛钱。 如果很难(由于您当前的应用程序结构)将所有文件完全移出文档根目录,请确保至少带有密码的配置文件位于 www 文件夹之外,然后是可能暴露任何安全问题的数据库访问文件你可能在你的实现中。
【讨论】:
嗨,是的,这是我的问题。(+1) 我知道,我可以通过我的网络浏览器查看和下载任何文件,包括我的 PHP 文件作为文本文件。我也能够看到图像文件、.javascript 文件、.css 文件和 .php 文件。如果我想禁用这个问题,请问您知道去哪里找吗? 是的。有两种不同的配置。一是声明 PHP 文件类型:AddType application/x-httpd-php .php
。这将告诉 Apache .php
文件应该由 PHP 模块运行。一种是这样配置的,您将无法以文本形式查看文件(另请参阅Apache is downloading php files instead of displaying them)。
另一个设置是禁用directory indexes。您可以使用<Directory path>Options -Indexes</Directory>
执行此操作。但尽管有这些设置,我仍然会尽可能地将文件移出您的 www 文件夹。
(+1) 很好的描述,即使我在某些方面不同意。 @Bunkai.Satori 如果您可以将 php 文件视为文本文件,我建议您在将任何内容上传到该服务器之前配置您的 Web 服务器。
@bansi,您好,感谢您的建议。当然,我愿意为所欲为。我只需要知道要配置什么,或者至少从哪里开始。至少我现在有了一个起点。【参考方案2】:
别担心;文件PHP
由网络服务器解释,代码不能从网络浏览器直接访问。在 apache 的文件 httpd.conf
中,您可以检查扩展名 php
是否为“protected”。
AddType application/x-httpd-php .php
如果您有兴趣为您的应用程序提供一点的安全性,您可以更改 PHP 文件的扩展名,以及您的网络服务器配置(上面的行)。它被称为Security through obscurity
。
【讨论】:
您好,感谢您的回复,+1。我知道,在开发过程中,我能够通过我的网络浏览器列出存储在 WWW 文件夹中的所有文件。我可以看到它们,包括 PHP 文件。在开发过程中,我专注于开发,我只是记下了,我必须照顾这个。今天没能重现这个问题,但我怕,还是有办法通过浏览器列出WWW文件夹的所有文件夹和目录。 可以读取的 PHP 文件(应该避免的东西)是不同的列表。如果您想阻止目录列表,请执行以下操作:Options -Indexes
在 Web 服务器配置中。或者,如果您想阻止仅列出 PHP 文件(不推荐),请执行以下操作:IndexIgnore *.php
以上是关于将我的 PHP 文件放在哪里的主要内容,如果未能解决你的问题,请参考以下文章
我应该将我的网站配置值放在 LAMP 服务器设置中的啥位置?