2011-05-09 2 views
1

WHMでアカウントを作成するときに特定のプランが選択されている場合、プレインストールされたコンテンツやプレインストールされたコンテンツなどを含むWordPressインストールをセットアップするためのpostwwwacctスクリプトを設定しています。このpostacacスクリプトは安全か理想ですか?

この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()秒の安全性について不明な点だから、とも私は持っているので、両方のためにアカウントを作成するためにここに求めていますこれをテストするために、私はむしろ私のサーバー上に10億の偽のアカウントを持っていないかもしれない間違いを避けたいと思っています:)

ありがとう!

答えて

0

execのようなシェルコマンドを持つものは、あなたの質問に答えるだけでは安全ではありません。 WHMなどと通信するためのエレガントな方法はありませんが、SQLインジェクション攻撃を防ぐためにPOST変数をmysql_real_escape_stringに囲むことはできます。

$_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

+0

私は「安全ではない」と言ったが、危険であることは保証されていない。また、多くのWebホストがexec、system ETCなどのコマンドを無効にする理由があります。 – jini

+0

「シェルコマンドを持つものは...安全ではない」とは言わないでください。ユーザーが送信したデータを使用しないシェルコマンドは安全です。ユーザーが送信したデータを使用するシェルコマンドは、正しく構築されてエスケープされていれば安全です。 – ceejayoz

関連する問題