9

次のコードを使用します。

<?php
if (isset($_POST['action']) && !empty($_POST['action'])) {
    $action = $_POST['action'];
}

if ($action) {
    echo $action;
}
else { 
    echo 'No variable';
}
?>

そして、?action=test でファイルにアクセスします $action が GET によって自動的に宣言されるのを防ぐ方法はありますか? もちろん追加する以外に

&& !isset($_GET['action'])

変数を宣言する必要があるのはなぜですか?

4

6 に答える 6

27

php.ini のregister_globals設定を確認してください。おそらくオンになっていますが、オフにしたいでしょう。

変数を宣言する必要があるのはなぜですか?

あなたはそうしない。それは恐ろしいセキュリティリスクです。環境、GET、POST、Cookie、およびサーバー変数をグローバルにします(PHP マニュアル)。これらは、PHPで予約されている変数の一部です。

于 2008-09-19T13:38:08.460 に答える
4

register_globalsあなたの php.ini が原因のようです。これをオフにする必要があります。また、それをオンにすることは大きなセキュリティ上のリスクです。

共有ホスティングを使用していて、php.ini を変更できない場合は、ini_set()を使用して register_globals をオフにすることができます。

于 2008-09-19T13:41:13.553 に答える
2

php.iniにアクセスできない場合、php スクリプトの aは機能しini_set('register_globals', false)ません (変数は既に宣言されています)

php_flag register_globals Off

時々助けることができます。

于 2008-09-19T18:34:36.360 に答える
2

私があなたの質問を理解している場合は、register_globals を off に設定してください。http://us2.php.net/manual/en/language.variables.predefined.phpを参照してください。

于 2008-09-19T13:41:43.380 に答える
1

PHP.INI の PHP ログレベルを

error_reporting  =  E_ALL 

コード スニペットは通知を生成するはずです。

于 2008-09-19T13:42:29.447 に答える
1

php の歴史のある時点で、彼らは物議を醸す決定を下し、デフォルトで register_globals をオフにしました。コードに変数を挿入し、考えられない結果を生み出す可能性を誰にでも与えます! この「機能」はphp6では削除されています

オンになっていることに気付いた場合は、管理者に連絡してオフにしてください。

于 2008-09-19T18:25:21.950 に答える