谢谢, Alex
对于最敏感的信息,我建议将其放在网站根目录之外,并通过"require"或"include"包含它。这样,即使服务器上的某些配置出现问题,访问者也只会看到"include('secret_stuff.php');"这一行,而不是实际的脚本。
和David Dorward所说的一样,但我建议您查看以下补丁,该补丁将修改apache,以便在存在配置错误时不发送源代码问候语。
http://mirror.facebook.net/facebook/patches/ap_source_defense.patch
补丁如下:
cd apache-1.3.x
patch -p1 -i ap_source_defense.patch
Facebook开发团队发布了更多的补丁:http://mirror.facebook.net/facebook/patches/
保护您所需的源代码的最佳方法是将它们放在公共根目录之外,因为如果Apache正在运行,它将无法直接从public_html
文件夹中提供文件。
例如:
C:/server/apache/
C:/server/apache/htdocs/
C:/server/apache/htdocs/includes/
/files
来查看文件。http://hostname.tld/includes/
但是拥有以下目录结构:
C:/server/apache/
C:/server/apache/includes/
C:/server/apache/htdocs/
然后在其中
C:/server/apache/htdocs/index.php
you have
<?php
require_once('../includes/config.php');
?>
这应该保护除了视图文件(index.php
)之外的所有主要文件。
text/plain
或application/octet-stream
提供)。AddType application/x-httpd-php .php
Apache 应该处理数据,而不是显示它们...
此外,您需要启动 PHP 服务。
你描述的“默认配置”是没有安装php(或禁用了php)的Web服务器。在这些情况下,可以轻松地下载php脚本。
确保安装了php(它将在约100%的生产php服务器上安装),并/或者使用像这样的.htaccess
文件阻止对配置文件的访问:
<FilesMatch "^config.php$">
Order allow,deny
Deny from all
</Files>
如果你想要更加巧妙(并且在一些忽略.htaccess
文件的服务器上也能工作),可以在配置文件前面加上.ht
,例如.ht.config.php
。大多数Apache(和其他一些Web服务器)配置都会拒绝提供以.ht
开头的文件。然而,一般来说,确保没有任何Web服务器提供你的文件的唯一方法是将其移动到服务器文档目录之外的目录中。但是,在大多数主机上,你或者你的PHP脚本可能无法访问这些目录。
你的第二个问题是配置错误。尽管可能会有选项构建重写规则以防止意外访问,但你不能做太多。
最好的预防措施是将所有脚本放在DOCUMENT_ROOT
之外。只需在那里留下一个单独的index.php,并从那里包含所有依赖项。这也是避免配置数据泄漏的最佳策略(敏感数据也不要使用ini文件,而是使用.php脚本)。
另一个担忧是共享托管服务器。服务器上的所有并发用户都可以读取您的脚本(如果不通过PHP,则可以通过Perl / bash CGIs进行)。除非更改为支持通过suexec
运行一切并允许个别权限的专业托管商,否则无法对此做任何事情。
嗯,“默认配置”是一个含糊的术语,但只要Web服务器通过PHP配置解析 .php
文件,则从那个角度来看您应该没问题。如果您自己的脚本恰好解析其他PHP文件(例如模板系统),则需要确保其中没有任何漏洞,因为PHP脚本可以完全访问服务器上的文件。
假设这些都得到了解决,您不需要将“敏感”数据放在任何特殊位置,只需将它们放在您的 .php
文件中,但请确保所有脚本以 .php
结尾(例如 config.inc.php
),以便始终通过PHP解析而不作为纯文本发送。