コンピューター, ソフトウェア
関数内でPHPのグローバル変数。 PHPのグローバル変数を作成します
あなたは多くのことを知っている必要があり、幅広い機能を持つ完全なサイトを作成するには。 しかし、彼は本当にユニークな何かを作ることができます - それはPHPです。 プログラミング言語のグローバル変数が非常に頻繁に使用されていないが、時にはそれがどのように動作するかを知っている、時にはそれが必要です。 それはそれであり、それがどのように動作するか、我々はこの記事でやろうとしているものの研究です。
スコープ
デフォルトでは、それらはローカル関数スコープに限定されています。 そして、どのように多くのとどれを使用することができ、その境界に変数見たファイルを作るには? この目的のために、そしてPHPのグローバル変数で提供されています。
キーワード「グローバル」
そのような指示の実装後、データは、任意のファイルを操作することができるであろう。 どこかで、この変数への参照がある場合、プログラムは常にグローバルバージョンに注意を払うだろう。
なぜ、このような奇妙な言語? 同時に、ローカルバージョンがあるかもしれないという事実。 しかし、彼らは発表され、それらのファイルに対して独占的に利用できるようになります。 そして、すべての残りのためのグローバル変数をPHPのクラスとして機能します。 したがって、あなたは注意する必要があります。 グローバルA:そして疑いがあったことを、ここで彼らがどのように見えるかの例です。
一つのファイルは、変数の数にアクセスする必要があります場合はあるので、それは彼らが競合するようになります。 しかし、我々は確かに言うことはできない - ローカルまたはグローバル変数を読み取るか、完全に失敗しています。 それが機能して登録することであれば、それは問題になりません。 しかし、その境界のための変数の使用が問題になります。 そのため、密接に監視し、どこにも存在した紛争にも、前提条件ではないことを確認するために必要なコードの起草の構造が生じました。
記録の別の実施形態
事前定義された/スーパーグローバル
すべてのプログラミング言語ではその機能のいくつかのためにチャーターされているいくつかの名前があります。 そのため、動作しません同じ名前のPHPのグローバル変数で作成することができます。
このプログラミング言語は、独自の特徴を持っています。 だから、ここで事前に定義された変数は、「スーパー」をインストールしていないつまり、彼らはすべての場所では利用できないことが重要です。 どのように私はそれを修正することができますか? 事前に定義された変数にいくつかの地域で利用可能であった以下のように、それが宣言されなければならない:.グローバル«変数」 右、前に言ったのと同じであるように思わ? これはかなり本当、しかしではありません。 私たちはすでに例を「戦って」を見てみましょう:
- グローバル$ HTTP_POST_VARS。
- $ HTTP_POST_VARS [ 'name' を]エコー。
あなたはそれらの間の違いを感じますか? PHPのグローバル変数に必ずしも関数内で使用する必要がないことに注意してください。 それも、それに含まれているファイルに配置することができます。
リンクと安全性
あなたが見ることができるように、PHPのグローバル変数は問題ではありません作成します。 しかし、いずれの特定の相対リンクはありますか? グローバルを使用した場合はい、予期しない動作があるかもしれません。 しかし、その前に、ちょっと裏話。
バージョン4.2.0では、デフォルトでregister_globalsによってディレクティブは、オン状態からオフに変化しました。 ほとんどのユーザーにとって、これは非常に重要な、しかし無駄ではありません。 結局のところ、それが直接開発し、製品の安全性に影響を与えます。 あなたがする必要がある場合は、このパラメータの変数のグローバル、PHPディレクティブは直接影響を受けません。 しかし、誤った使用は、すでに先例のセキュリティを作成することができます。
そう書かれたコードの実行は、HTMLフォームを送信するために、たとえば、必要な異なる変数を初期化する前にregister_globalsは、オンになっている場合。 したがって、それはそれをオフにすることを決めました。
なぜPHPのグローバル変数にこのディレクティブの状態が多くを負っていますか? 事実は、それがどこから来たのか、開発者の状態を常に確実に自身がの質問に答えることができないときということです。 一方で、コードを書くことが容易です。 しかし、他に - それはセキュリティ上のリスクがあります。 そのため、混合のエラーだけでなく、データを避けるためにと指示が無効になっています。
今度は、/安全でないコードを見てみましょう、だけでなく、グローバルPHP変数の発表は、データの改ざんの試みを伴っているケースを検出する方法。 これは美しいだけでなく、着実に利用可能な最初の人をクラックしないWebサイトを動作していないだけを作成するために必要です。
悪意のあるコード
のは、変数が許可されている人のために真であることを設定してみましょう:
IF(authenticate_user()){
$ =真許可します。
}
{($認可)の場合
「/highly/sensitive/data.php」を含みます。
}
この状態では、変数を自動的に設定することができます。 データを簡単に交換することができ、その起源のソースが設定されていないことを考慮すると、その後、誰もがそのような試験に合格し、他の誰かのふりをすることができます。 必要であれば、攻撃者(あるいは単に好奇心が、未経験者)は、当社のロジックを損なわれる可能性があります。
私たちは、ディレクティブの値を変更した場合、我々は必要に応じて、このコードは、正常に動作します。 しかし、変数の初期化は、プログラミングでは良い音だけではありませんが、また、私たちのスクリプトの安定性の一定の保証を提供します。
コードの信頼性の高いバージョン
あなたはオフにしたり、作業指示、またはこの目標を達成するために、より複雑なコードを処方することができます。 たとえば、次のように:
もし(ISSET($ _ SESSION [ 'ユーザー名'])){
エコー "こんにちは、 {$ _ SESSION [ 'ユーザ名']} B>"。
}エルス{
エコー "こんにちは、ゲスト B>
" など。
「ようこそユーザー!」エコー;
}
この場合には、置換を行い、困難があるでしょう。 しかし、まだ - 可能。 これを行うには、迅速な対応ツールが提供された世話をする必要があります。 あなたがPHPのグローバル変数を含めたい場合は、以下のツールを使用することができます。私たちはレンジが得られた値が何であるかを知っていれば、試合でこれを確認するためのスクリプトを登録することが可能です。 もちろん、それはまた、置換値に対する完全な保護を保証するものではありません。 しかし、それはあまりにも多くの選択肢が大幅に複雑です。
マスカレードしようとする試みを検索
あなたが以前に書かれて理解してどのように見てみましょう。 PHPで説明を行う機能でのグローバル変数は、あなた自身を宣言する必要があります。 私たちは、このレッスンのトピックの同化の宿題のようなものであると言うことができます。 ここでは、コードは次のようになります。
<?PHPの
IF(ISSET($ _ COOKIE [ 'C_COOKIE'])){
} ELSEIF(ISSET($ _ GET [ 'C_COOKIE'])|| ISSET($ _ POST [ 'C_COOKIE'])){
メール(「administrarot@example.com」、「注意、スクリプトは強盗の試みやデータの改ざんが記録された」、$ _SERVER [「REMOTE_ADDR」]);
「壊れた安全性がありましたかそう管理者に通知することを試みている。」エコー;
終了;
}エルス{
}
?>
今、説明がそこに。 一部C_COOKIEは、信頼できるソースから私たちに来ます。 完全に満足することが期待される結果によると、私たちはその値をチェックし、問題が発生した場合に管理者に通知します。 それは来ていない場合は、何もアクションを行う必要はありませんでしたと。 あなたは、単にディレクティブregister_globalsを無効にすると、コードが安全であることはないことを理解する必要があります。 したがって、ユーザからスクリプトを受け取る任意の変数は、期待値をチェックしなければなりません。
結論
ここでは、一般的には、あなたが正常にかつ安全に自分の仕事にそれらを使用するには、グローバル変数について知っておく必要があるすべて。 攻撃者は常に彼らの方法やスキルを向上している - もちろん、誰もがそれらをすることはできません使用しないことを完全な保証があると言うこと。 コード内のグローバル変数の最大使用を制限することが望ましいです。 幸いなことに、このプログラミング言語の構造とデザインの特徴は、この目標を達成することができます。 幸運!
Similar articles
Trending Now