8

オンにする必要があるコードで満たされた Web サーバーを継承しregister_globalsました。そのほとんどは、何年にもわたって行き来するランダムな人々によって書かれたカスタム コードです。私が知っているスクリプトでその大部分を修正しましたが、私の問題は、私が知らないスクリプトを見つけることです。

を必要とする PHP スクリプトを識別するために、Web サーバー上のすべてのディレクトリをスキャンするアプリケーションを作成することを検討していますregister_globals。これを行うための良い戦略はありますか?

私が検討した方法の 1 つは、何らかの形で PHP にすべてのエラーを報告させ、スクリプトを実行し、未定義の変数通知をチェックすることです。STDERRこのためにストリームを読み取るアプリケーションを構築できます。

あなたが考えることができるより良い方法はありますか?

4

5 に答える 5

7

ほとんどの IDE は、未定義の変数を表示します。たとえば、PHPStormはそうします。すべてのソースファイルをスキャンさせることができ、すべてのコードで未定義の変数について通知され、実際に実行されることはありません。

これはおそらく最も簡単で痛みのない変種です。別の方法として、 Tokenizerを使用して独自のスクリプトを作成し、コンストラクトT_VARIABLEを使用して以前に初期化されていないすべての を識別することもできます。T_VARIABLE '=' exprしかし、これはエラーが発生しやすくなります。IDE を使用すると、少ない労力でより良い結果が得られるでしょう。

于 2011-02-03T18:44:55.077 に答える
3

単一のファイルが常に register_globals を on または off で使用していると仮定すると、スクリプトに送信されるすべてのフォーム要素名のリストを作成し、このスクリプトが$fieldname含まれていない$_REQUEST['fieldname'](または$_POST$_GET配列) を使用していないかどうかを確認できます。

これらのチェック中に非常に高いコード カバレッジを保証できる場合、「通知のチェック」メソッドは問題ありません (何も見逃さないようにするため、カバーされていない部分を手動でチェックする必要があります)。

于 2011-02-03T18:40:20.333 に答える
2

グローバル変数を想定して記述されたスクリプトの症状についてログを調べることは役に立ちますが、実際にこれを行う唯一の方法はコードを読むことです。これを自動化したい場合は、PHP インタープリターを構築するか依存する必要があります。そうしないと、条件内にネストされたもの、潜在的な評価などを見逃す運命にあります。

于 2011-02-03T18:42:44.653 に答える