ホームページ  >  記事  >  バックエンド開発  >  PHP セキュリティ レジスタ グローバルを TRUE_PHP に設定する危険性 チュートリアル

PHP セキュリティ レジスタ グローバルを TRUE_PHP に設定する危険性 チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:50:50953ブラウズ



質問
レジスタグローバルを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]);

}

}


コードのコピーはこれで完了です。

[ ]


参考回答
そうですね、こういう詳しい記事は大好きです!

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/632604.html技術記事レジスタ グローバルを TRUE に設定することの危険性についての質問 レジスタ グローバルを ON に設定することは非常に危険であることは多くの人が知っているはずです...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。