1

レジスターグローバルを使用すべきではないことは知っていますが、その理由を完全に理解することはできませんか?

example.com?authorized=1例:これは、スクリプトに次のようなものを渡すときにレジスタグローバルを使用することのセキュリティリスクを示すために私が頻繁に見つけるコードです。

if (authenticated_user()) 
{ 
$authorized = true; 
} 

if ($authorized) 
{ 
include '/highly/sensitive/data.php'; 
} 

私の質問は、ユーザーがauthorized=1URLを渡す必要がある場合、スクリプトで使用する変数名を知っている必要があるということです。そんなことがあるものか?

parse_str()また、グローバルを登録するのと同じように動作する関数は、セキュリティリスクでもありませんか?

4

4 に答える 4

5
  1. 攻撃者は、別のセキュリティホールまたはプライバシー侵害を介してソースコードにアクセスする可能性があります。
  2. 攻撃者は推測できます。もっともらしい変数名をすべて列挙するボットを作成し、それらを何千ものphpサイトに対して試すのは非常に簡単です。(?authorized=1、、、?login=1など?access=1

編集

に応じてparse_str、それは正確にユースケースが何であるかによって異なりますが、一般的にはおそらくそうです。ユーザーが提供したコンテンツが渡された場合parse_str、はい、絶対に安全ではありません。

提供された入力がユーザー提供されていない場合、いくつかの正当なユースケースがあるかもしれませんが、一般的に私はそれを避けます。

私も同じことを言うでしょう:http extract//ca1.php.net/manual/en/function.extract.php

于 2013-01-02T05:37:52.303 に答える
2

なぜauthorized変数に名前を付けたのか考えてみてください。作ることは説明的ですよね?ハッカーはURLで辞書の単語を使用し、そのような記述変数がオンになっている場合register_globalsは設定されます

于 2013-01-02T05:39:01.967 に答える
1

ハッカーが変数名を知る必要があるのは事実ですが、多くの場合、これらは簡単に推測でき、ブルートフォースを試みるのは簡単な作業です。

これは、オープンソースソフトウェア、プラグイン、または人気のあるコードスニペットのコピー/貼り付けを使用している場合にさらに当てはまります。

于 2013-01-02T05:39:55.917 に答える
1

まず第一にregister_globals、セキュリティリスクです。

  • PHPレベルでオンになっているため、1つのスクリプトだけを引用してオンにするのが安全であるとは言えません。
  • プログラマー(あなただけでなく、どのプログラマーでもかまいません)は、どのよう$authorizedに設定されているかを認識せず、コード内にセキュリティループの穴を誤って残す可能性があります。
  • に登録された変数は、PHPスクリプト内の任意のスコープで使用できることを意味しますregister_globalssuperglobals

次に、を見てみましょうparse_strこの関数は、変数をコードの現在のスコープ参照)にのみ解析します。プログラマーは誰でも現在のスコープを見て、それを保護するかどうか、そしてどのように保護するかを決定できます。それでもあまり安全ではありませんが、ほど安全ではありませんregister_globals

于 2013-01-02T05:47:19.790 に答える