質問
次のコードを取り上げます。
<?php
if (isset($_POST['action']) && !empty($_POST['action'])) {
$action = $_POST['action'];
}
if ($action) {
echo $action;
}
else {
echo 'No variable';
}
?>
次に、?action = testでファイルにアクセスします。$アクションがGetによって自動的に宣言されるのを防ぐ方法はありますか?もちろん追加する以外にも
&& !isset($_GET['action'])
変数を宣言してもらいたいのはなぜですか?
解決
php.ini を確認してください。 register_globals
設定。おそらくオンになっているので、オフにしたいと思います。
変数を宣言してもらいたいのはなぜですか?
あなたはしない。 それは恐ろしいセキュリティリスクです。環境変数、GET変数、POST変数、Cookie変数、およびサーバー変数をグローバルにします。 (PHPマニュアル). 。これらはほんの一握りです 予約変数 PHPで。
他のヒント
みたいです register_globals
php.ini が原因です。これをオフにする必要があります。これをオンにすると、セキュリティ上の大きなリスクもあります。
共有ホスティングを使用していて php.ini を変更できない場合は、次を使用できます。 ini_set() register_globals をオフにします。
あなたの質問が理解できれば、 register_globals を off に設定してください。見る http://us2.php.net/manual/en/ language.variables.predefine.php
にアクセスできない場合は、 php.ini, 、 ini_set('register_globals', false)
PHPスクリプトでは機能しません(変数はすでに宣言されています) .htacces付き:
php_flag register_globals Off
時には役立つこともあります。
PHP.INI の PHP ログレベルを次のように変更することで、すべての変数が正しく宣言されているかどうかをテストできます。
error_reporting = E_ALL
コード スニペットによって通知が生成されるはずです。
php の歴史のある時点で、セキュリティ上大きな危険があるため、デフォルトで register_globals をオフにするという物議を醸す決定を下しました。これにより、誰でもコードに変数を挿入して、考えられない結果を引き起こす可能性が与えられます。この「機能」はphp6でも削除されています
オンになっている場合は、管理者に連絡してオフにしてもらいます。