$GLOBALS
空の配列に設定するだけで問題はありますか? register_globals
オンになっていてファイルにアクセスできない場所の効果を逆にしたいのですが、通常行われている.ini
ように、関連する各スーパーグローバルを反復して必要に応じて設定を解除し、などの要素をスキップし$GLOBALS['_POST']
ます$GLOBALS['_GET']
、全部外していいのかしら。
これから発生する可能性のある問題はありますか?$GLOBALS
スコープに依存しない変数は、関連するスーパー グローバル ( 、 など) に設定されるか、関連するレジストリ クラスのプロパティとして格納されるため、配列$_GET
を$_POST
参照する予定はありません。
詳細については、http: //www.php.net/manual/en/faq.misc.php#faq.misc.registerglobals の FAQ には、エミュレートする次のものがありますregister_globals = 0
。
<?php
// Emulate register_globals off
function unregister_GLOBALS()
{
if (!ini_get('register_globals')) {
return;
}
// Might want to change this perhaps to a nicer error
if (isset($_REQUEST['GLOBALS']) || isset($_FILES['GLOBALS'])) {
die('GLOBALS overwrite attempt detected');
}
// Variables that shouldn't be unset
$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])) {
unset($GLOBALS[$k]);
}
}
}
unregister_GLOBALS();
?>
おそらく、実行unset($GLOBALS[$k]);
は実行と同じ$GLOBALS = array();
ですが、後者はすべてを削除し、1行のコードのみを含みます。
$GLOBALS['_GET']
問題は次のとおりです。 、などを設定解除するのは悪いこと$GLOBALS['_PUT']
ですか?
アップデート:
私はこれに以下で答えました。以前に試していないのはばかげています。