質問
私は何年も前に構築されたアプリケーションに取り組んでいますが、最近正しく動作を停止しています。古いプログラマーは、彼がアクセスしているかもしれないと言った $_GET
また $_POST
それらを読むことなく変数 $_GET[] array
, 、しかし、 register_globals
尋ねたい:アクセスする方法は何ですか $_GET
使用せずに変数 $_GET[]
配列(例:直接的な方法?)、そして既知の場合、このアプリケーションがそれらのいずれかを使用しているかどうかを確認するにはどうすればよいですか?
前もって感謝します
編集: :私が覚えていた他の方法は register_globals
, 、 いいえ magic_quotes
. 。また、私はしたくありません これを使って, 、むしろそれが使用されていて最新のサーバーの更新で非推奨かどうかを検出します(何が たぶん......だろう アプリが正しく動作しなくなった理由を説明する)
編集: :今日の私の英語は恐ろしいです。答えの1つで説明したように: 元のプログラマーがQuery StringからPHPに変数を取得するいくつかの不明瞭および/または非推奨方法を使用したかどうかを確認する必要があります。
重要な編集: import_request_variables
テーブルから外れています、それは使用されていません。全て $_
最新のアップデートがそれらを壊さないため、アレイもテーブルから外れています(=>まだ機能します)。どの変数が初期化されているかをどのように検出できますか register_globals
?
さらに別の編集: : 私はこれを見つけました:
foreach ($_POST as $k => $v) {
eval("\$".$k." = '".$v."';");
}
foreach ($_GET as $k => $v) {
eval("\$".$k." = '".$v."';");
}
の1つによって破られた可能性があります 最新 更新(最大1週間前)?
解決
あなたはスルーを意味します グローバルを登録します そしてそうではありません 魔法の引用...ところで、グローバルは純粋な悪です 一度もない それらを使用します(そして、それらはPHP 5.3.0の時点で非推奨)!
編集: アプリケーションが登録グローバルを使用しているかどうかを確認する場合は、検索してみてください $_GET
変数としての値。たとえば index.php?id=123
探してみてください $id
PHPコードで。あなたがそれを見つけた場合、これはスクリプトが登録グローバルを使用するという意味ではありませんが $id
どこからでも来て、初期化/設定されていないことは、アプリが登録グローバルを使用しているという良い(悪い!)サインです...
他のヒント
$_SERVER["QUERY_STRING"]
RAW GET STRINGを提供します。
とはいえ、これは、別の変数を使用するのではなく、そのルートに固定する必要がある問題のように聞こえます。
魔法の引用が問題である場合、それらが有効になっているかどうかを確認し、それに応じて着信データに対処します。
魔法の引用を無効にします PHPマニュアルのページは、機能がアクティブ化されているかどうかに応じて、着信データを「修正」する方法を示しています。膨大な量のデータに対してはあまり効率的ではありませんが、日常のタスクで行う必要があります。
あなたも持っています $ _request, Magic_Quotes (非推奨)は、変数をキャプチャする手段ではなく、変数の内容のみに影響を与えます。
また、参照してください import_request_variables, 、元のコーダーはそれを使用してGET変数の内容をつかみ、それを別の変数に挿入し、その後参照される可能性があります。
Globalsの登録は、古いPHPプログラムがしばしば依存している恐ろしい機能です。
レジスタグローバルがオンになっていると、PHPはGETおよびPOST変数を見て、通常の変数名に「宣伝」します。 $_GET['myvar']
コードとしてアクセスできます $myvar
.
他の問題の中でも、これにより、プログラマーが使用した他の変数名を推測するだけで、ハッカーが非常に簡単に破損できます。したがって、Globals機能はデフォルトで長期間オフになっており、現在公式に非推奨されており、将来のバージョンで完全に削除されます。
この方法で使用される変数は、通常の変数と区別できない方法で参照されるため、Globalsの登録を使用する古いコードを更新しようとすると非常に困難な場合があります。それは、コードがどれだけよく書かれているかに大きく依存します。
問題はおそらくでしょう PHPの register_globals
. 。このオプションが作成されます $_GET['some_var']
または同等のもの $_POST
として利用可能なバージョン $some_var
自動的。これは非推奨であり、間違いなく使用するべきではありませんが、他のプログラマーはそのアプリケーションでそれらを使用した可能性があります。