4

私には、ホストしてほしいオンラインショップを持っているクライアントがいます。このサイトは別の開発者によって作成され、レジスタグローバルを使用しています。

サーバーにアップロードすると、register_globalsを有効にする必要があると表示され、.htaccessファイルを確認しました。私がホスティング会社に尋ねたとき、彼らはそれが劣化していてサーバー上で実行されないだろうと私に言いました。プログラミングをあまり詳しく調べていないので、コードのどの部分がそれに依存しているかわかりません。私はそれをホストするつもりでした。

簡単な修正はありますか、それともコードを分解して最新の代替手段で修正する必要がありますか?

4

2 に答える 2

14

本当に醜いが非常に迅速な修正は、次のようなものです。

foreach (array('_GET', '_POST', '_COOKIE', '_SERVER') as $_SG) {
    foreach ($$_SG as $_SGK => $_SGV) {
        $$_SGK = $_SGV;
    }
}

できれば、他のコードの前に、実行可能なphpスクリプトの先頭に配置してください。

これは私が本当にお勧めするものではないことに注意してください。クライアントにもっと良いものを手に入れるように説得してみてください。コードにregister_globalsが必要な場合、それは地獄のように安全ではない可能性があります...

于 2013-01-03T15:19:15.353 に答える
6

コードがレジスタグローバルを使用していて、それを使用しないように更新されていない場合は、おそらく非常に昔に作成されたものです。この意味は:

  1. 大規模なセキュリティホールがあることはほぼ確実です。
  2. 非推奨または削除された他のPHP機能を使用している可能性があります。
  3. それはおそらく非常に厄介なスパゲッティコードであり、
  4. すべての問題を修正するために書き直すのは雌犬になるでしょう。

私のアドバイスは、最新のショッピングカートソフトウェアパッケージを見つけて、既存の古いソフトウェアを実行し続けるのではなく、それを使用してショップをセットアップするのを手伝うことです。より多くの作業のように思えるかもしれませんが、関係するすべての人にとって、長期的にはそれほど面倒ではありません。

彼の既存のコードを修正する必要がある場合(つまり、彼があなたに頼み、仕事に多額の支払いを申し出た場合)、レジスターグローバルに対処する方法は次のとおりです。

Register globalsは、POSTまたはGET引数に入力されたすべての変数を受け取り、それらをグローバル名前空間に単純な変数として作成します。したがって、の代わりに$_GET['id']、を取得し$idます。

プログラムが適度によく書かれ、文書化されていれば、どの変数が期待されているかを確認するのはそれほど難しくないかもしれません。$_REQUESTその場合、関連する変数を代用するのは難しくありません。仕事は終わりました。

しかし、多くの(ええと、ほとんどの)古いPHPコードは、グローバル変数にあまり注意を払わずに、グローバル変数をスローします。たくさんのインクルード、function()サイトでの宣言のない数百行のコード、PHPとHTMLコードの織り交ぜ、おそらくいくつかの生成されたJavascriptがスローされ、元の作成者以外の誰にも完全に侵入できない混乱が生じることがよくあります(そして時にはそれらさえも)。

コードがこのようになっている場合、あなたはそれを修復しようとする非常に勇敢な人になります。あなたはそれが救い出せないことをただ受け入れて、立ち去るべきです。私は過去にこのような古いコードを修正する必要があった仕事をしてきましたが、私を信じてください。どこかに行き始める前に、数か月(または数年)の時間を費やすことができます。そのような時間スケールでは、まったく新しいシステムを最初から作成した方がよいでしょう。

于 2013-01-03T16:00:24.580 に答える