保护php文件,这样我才能执行它们

时间:2011-06-25 17:28:42

标签: php security

目前我有点'不同'的设置。我的主要文件在server1上;这个服务器只是通过php和mysql传递内容。但那只是前端。在服务器2(homeserver)的后面,有很多不同的脚本执行无法在server1上完成的各种事情,因为它是共享主机,因此资源有限。

此设置效果很好。如果server2失去电源或某些东西,该网站将不会更新,但仍有可用的东西,并且它可以在一旦重新上线后赶上。但这是问题; homeserver上的所有脚本都是开放的,每个人都可以执行。例如,我的数据库同步脚本;

Server1检测到它的数据库尚未与server2上的数据库同步,因此它启动了同步脚本。

<?php
//This initiates the script on server2, which then dumps it's database into a .sql file
file_get_contents('http://server2.x.com/backup/backup_mysql.php');
//This reads out and saves said database file locally for processing
$myresult2 = file_get_contents('http://server2.x.com/backup/backups/db-backup.sql');
file_put_contents_atomic("backups/db-backup.sql", $myresult2);
//This will delete the backup file from server2
$deleteurl = 'http://server2.x.com/backup/backup_mysql.php?delete=true';
$myresult3 = file_get_contents($deleteurl);
//This initiates bigdump for processing the sql file
include_once('bigdump.php');
?>

正如您所看到的,这会带来一些明显的安全漏洞。 * backup_mysql.php *可以被知道server2的地址的任何人使用,甚至一旦修复了,监视/ backup文件夹的人可以在我的脚本再次删除它之前检索sql备份。

如何防止这一切发生?

4 个答案:

答案 0 :(得分:3)

您可以使用Apache2 Web服务器指令拒绝从您自己的IP以外的所有IP访问某些位置。

答案 1 :(得分:2)

您应该考虑使用HTTP身份验证来阻止访问服务器2发布的所有内容。这样您就能够以最小的麻烦锁定服务器2中的其他所有人。

使用HTTP身份验证后,您的file_get_contents来电需要更改为包含凭据,例如

file_get_contents(http://user:pass@server2.example.com/data.php);

如果您担心有人可能会从网络中嗅到凭据,那么您也可以转到HTTPS。由于服务器上唯一的用户都是您自己的应用程序,因此您可以自己创建证书并使脚本接受它们是有效的。

答案 2 :(得分:1)

您可以通过.htaccess保护您的文件或文件夹:

Password protecting your pages with htaccess

答案 3 :(得分:0)

除了.htaccess之外,这是另一个解决方案:

server1/index.php
server1/config.php
server2/index.php

假设您不希望人们访问配置,请使用define功能。在设置变量/方法之前,定义一个唯一的名称并检查它是否在config.php文件中定义。