質問
レジスタグローバルをTRUEに設定する危険性について
解決策
レジスタグローバルをTRUEに設定する危険性について
レジスタ グローバルをオンに設定することが非常に危険であることは多くの人が知っていると思いますが、初心者はおそらくそれがどれほど危険であるかを知りません。そこで、レジスタ グローバルをオンに設定することの危険性について簡単に説明します。
まず次のコードを見てください:
config.php ファイルには次のコードがあります:
$GLOBALS[‘ホスト’] = ‘ローカルホスト’;
$GLOBALS[‘ユーザー名’] = ‘ルート’;
$GLOBALS[‘パスワード’] = '';
$GLOBALS[‘データベース’] = ‘テスト’;
?>
コピーされたコードの db.php には次のコードが含まれます:
require_once 'config.php';
関数 db_connect() {
$db=mysql_connect($GLOBALS['ホスト'], $GLOBALS['ユーザー名'], $GLOBALS['パスワード']);
mysql_select_db($GLOBALS['データベース'], $db);
$db を返します;
}
?>
コードをコピーして、グローバルの登録がオンに設定されているときに上記のコードを追加すると、どのような効果があるかを確認してください:
ブラウザに http://********/index.php?GLOBALS=*** と入力すると、上記のコードは正しく実行されません。 $GLOBALS のデータが変更されているためです。グローバル登録がオンに設定されている場合、?GLOBALS=*** 形式は $GLOBALS = ***! 形式に変換されます。 !とても危険です。
この例では有害ではありませんが、$GLOBALS グローバル変数が必要な場所では、register globals が on に設定されているかどうかを確認する必要があります。次のコードを使用して確認できます (コードは wordpress からのものです): function wp_unregister_GLOBALS。 (){
if ( !ini_get('register_globals') )
戻ります;
if ( isset($_REQUEST['GLOBALS']) )
die('GLOBALS 上書き試行が検出されました');
// 設定を解除してはいけない変数
$noUnset = array('GLOBALS', '_GET', '_POST', '_COOKIE', '_REQUEST', '_SERVER', '_ENV', '_FILES');
$input = array_merge($_GET, $_POST, $_COOKIE, $_SERVER, $_ENV, $_FILES, isset($_SESSION) && is_array($_SESSION) ? $_SESSION : array());
foreach ( $input as $k => $v )
if ( !in_array($k, $noUnset) && isset($GLOBALS[$k]) ) {
$GLOBALS[$k] = NULL;
unset($GLOBALS[$k]);
}
}
コードのコピーはこれで完了です。
[ ]
参考回答
そうですね、こういう詳しい記事は大好きです!