2011-05-09 69 views
1

我正在设置一个postwwwacct脚本来设置一个WordPress预安装的预安装的内容,如果在WHM中创建一个帐户时选择了某个计划。这个postwwwacct脚本安全/理想吗?

这个WordPress安装基本上是从默认的一个克隆的,我可以根据默认需求的变化更改/更新。

我可能是一个中级PHP开发人员,但我是新来的这种根级hashbang PHP的东西,所以我想知道的是,我写的脚本是否安全,是否有是任何明显的事情,应该做得更好/不同。

下面是我得到了什么:

#!/usr/bin/php -q 
<?php 
/** 
* This script will automatically set up a mirror of default.example.com in a newly created account 
**/ 


// Set up our variables to be usable by PHP 
$opts = array(); 
$argv0 = array_shift($argv); 

while(count($argv)) { 
    $key = array_shift($argv); 
    $value = array_shift($argv); 
    $opts[$key] = $value; 
} 

// Only do it if the plan is "WP Unlimited" 
if($opts['plan'] !== "WP Unlimited") exit(); 

// Set up a few variables 
$db_user = 'root'; 
$db_pass = 'ROOTPASSWORD'; 
$db_create = $opts['user'] . '_wp'; 

// Copy files recursively from /home/default/public_html/ 
exec("cp -R /home/default/public_html/* /home/{$opts['user']}/public_html; chown -R {$opts['user']}:{$opts['user']} /home/{$opts['user']}/public_html/*"); 

// Set up database 
$conn = mysql_connect('localhost', $db_user, $db_pass); 
mysql_query("CREATE DATABASE $db_create", $conn); 

// Dump data from default.example.com into new DB 
exec("mysqldump -h localhost -u $db_user -p$db_pass default_wp | mysql -h localhost -u $db_user -p$db_pass $db_create"); 

// Use WordPress' built-in configuration file maker to write config file 
$_POST['dbname'] = $db_create; 
$_POST['uname'] = $opts['user']; 
$_POST['pwd'] = $opts['pass']; 
$_POST['dbhost'] = 'localhost'; 

shell_exec("/home/{$opts['user']}/public_html/wp-admin/setup-config.php?step=2"); 

?> 

我问这里一方面是因为我不能确定有关shell_exec() S在脚本中的安全性,还因为我要为了创建帐户以测试这一点,我宁愿避免任何我可能犯的愚蠢错误,并且在我的服务器上没有十亿假帐户:)

谢谢!

回答

0

任何有像exec这样的shell命令的东西都不安全,只是为了回答你的问题。据说,没有一种与WHM等进行通信的优雅方式。然而,您可以将您的POST变量放在mysql_real_escape_string中以防止SQL注入攻击。

$_POST['dbname'] = mysql_real_escape_string($db_create); 
$_POST['uname'] = mysql_real_escape_string($opts['user']); 
$_POST['pwd'] = mysql_real_escape_string($opts['pass']); 
$_POST['dbhost'] = 'localhost'; 
+0

完全可能有一个安全的'shell_exec'调用。没有必要担心伤害。当然,一定要小心,但不能保证是危险的。 – ceejayoz 2011-05-12 01:39:54

+0

我说“不安全”,并不是说它有保证是危险的。也有很多网络主机禁用诸如exec,system ETC之类的命令的原因。 – jini 2011-05-12 15:04:20

+0

不要说“任何有shell命令的东西......不安全”,那么。不使用用户提交的数据的Shell命令是安全的,并且使用用户提交的数据的shell命令在安全构建和转义的情况下是安全的。 – ceejayoz 2011-05-12 15:10:01