0

私の職場では、リモートサーバーに保存されているコードを使用してClickbank検索を実行しました。今、私の上司はすべてを私たちのサーバーに移すことを決定し、幸運なことに(ええと)私にそれをする仕事を与えてくれました。

今、私は常に$_GET変数をローカルスコープ内で宣言する必要があると考えていました。$var = $ _GET ['var']; しかし、このコードでは、元のプログラマーがその行を挿入したばかりのようです。彼はコードで$ varを宣言せずに使用しています...それはどのように可能ですか?

4

3 に答える 3

4

レジスタグローバルがオンになっているようです。グローバルを登録すると、すべてのリクエスト変数がローカルにスコープされるため、それが可能になります。これは非常に安全でない機能でもあり、バージョン 5.3 から PHP で廃止されました。

register_globals をオフにして、ローカル スコープの変数を手動で宣言することを強くお勧めします。これにより、受信データのサニタイズとフィルタリングを適切に処理できるようになります。

register_globals の詳細と、公式の PHP ドキュメントでそれが悪い考えである理由: http://php.net/manual/en/security.globals.php

于 2012-05-31T14:50:31.410 に答える
0

このリンク + register_globals に関する短くて甘い定義で答えを見つけることができます。

PHPのregister_globalsとは何ですか?

于 2012-05-31T14:56:16.973 に答える
0

おそらくphpの設定register_globalsがされているからでしょう。

これは、コードのように a$_GET['foo']が自動的に使用可能になることを意味$fooします。

詳細については、こちらを参照してください。

http://www.php.net/manual/en/ini.core.php#ini.register-globals

基本的に、これは非常に大きなセキュリティ ホールであり、回避する必要があります。

さらに、5.3 以降は推奨されておらず、5.4 で削除されます。

于 2012-05-31T14:51:33.050 に答える