2

他の誰かによって以前に開発された既存のサイトを変更することに出くわしました。

PHP ファイルを変更しているときに、宣言されていない変数 (インクルード ファイルでさえ) が正常に使用されていることに気付きました。

これがどのように行われるのか理解できません。PHP のマジック メソッド (_get および _set) を使用していますか?

シナリオの例はこれです。

<?php
    if($name != ""){
        //do process
    }
?>

<form method="POST">
    <input type="hidden" name="name" value="" />
</form>

上記の通常のシナリオでは、未定義の変数に対してエラーがスローされます。上記のような変数はすべて、主に非表示の入力または $_GET 変数用であることもわかります。

しかし、上記のコードは、$_POST['name'] または $_REQUEST に $name 変数が割り当てられていなくても、私が開発しているサイトで完全に正常に動作します...

誰かがPHPでそのようなことを行う方法を提案してもらえますか、それともここで何かが欠けていますか.

4

2 に答える 2

1

古いバージョンの PHP では、 on を設定することで、配列register_globalsのすべての要素 (およびそれぞれの など) をこのような変数に暗黙的に変換していました。$_REQUEST$_POST$_GET

ただし、バージョン 5.4 の時点で、この機能は削除されました。適切に初期化しないと、ユーザーがスクリプトに変数を挿入する可能性があるため、混乱やセキュリティ リスクが発生する可能性があるためです。

したがって、たとえば、$_POST配列が次のように見える場合

$_POST = array ( 'myVar' => 1, 'myOtherVar' => 2 );

register_globalson PHP では、次のような 2 つの追加変数が生成されました。

$myVar == 1
$myOtherVar == 2

参考文献:

于 2013-06-04T13:07:03.097 に答える
1

php.iniオンになっているかどうかを確認したいと思いますregister_global。これにより、変数を宣言せずに格納できるようになり、すべての($_POST, $_GET ..)変数が自動的に変数に変換されます。

これは悪い習慣であり、セキュリティ上の大きな問題を引き起こす可能性があります。この便利な投稿をチェックしてほしい

REGISTER_GLOBALS がなぜそんなに悪いのですか?

于 2013-06-04T13:07:23.907 に答える