目次
2。攻撃面の増加とカプセル化不良
3。状態の変更を追跡および監査するのが難しい
4。動的コードまたは不十分な入力処理による悪用
リスクを減らすためのベストプラクティス
結論
ホームページ バックエンド開発 PHPチュートリアル $ Globalsを介した未確認のグローバル状態のセキュリティリスク

$ Globalsを介した未確認のグローバル状態のセキュリティリスク

Aug 03, 2025 pm 04:20 PM
PHP $GLOBALS

$ Globalsのチェックされていない使用により、意図しない可変上書きが可能になり、攻撃者が検証なしでユーザーIDやロールなどの重要なデータを操作できます。 2.カプセル化を破壊することにより攻撃面を増加させ、セキュリティチェックをバイパスするために悪用される可能性のある可変性グローバル状態に依存します。 3.状態の変更の追跡は非常に困難になり、監査を複雑にし、不正または偶発的な変更を隠します。 4. $ _getキーを$グローバルに注入するなど、入力処理が不十分であるため、特権のエスカレーションに直接つながる可能性があります。リスクを軽減するために:アプリケーションロジックの$グローバルを回避し、代わりに依存関係インジェクションと関数パラメーターを使用し、常に入力を検証し、サニタイズし、グローバル変数に機密データを保存しないでください。不変の構成オブジェクトを使用し、PHPSTANなどのツールで厳格なコーディング標準を強制し、生産のような危険な機能を無効にします。国家管理のために$ Globalsに依存すると、セキュリティと保守性が損なわれるため、PHPがグローバル可変操作を許可することを許可することを意味するため、その使用を最小限に抑えて扱う必要があります。

$ Globalsを介した未確認のグローバル状態のセキュリティリスク

PHPの$GLOBALS SuperGlobalを使用して、さまざまなスコープにわたって変数にアクセスまたは操作することは便利に思えるかもしれませんが、特にグローバル状態がチェックされていない場合、適切な制御なしで使用すると、重大なセキュリティリスクが導入されます。 $GLOBALS自体は本質的に危険ではありませんが、その誤用はアプリケーションの整合性を損なう可能性があり、予期しない動作につながり、脆弱性への扉を開きます。

$ Globalsを介した未確認のグローバル状態のセキュリティリスク

$GLOBALSを介して未チェックのグローバル状態がセキュリティ上の懸念であり、リスクを緩和する方法は次のとおりです。


1。意図しない可変上書き

$GLOBALS 、グローバル範囲内のすべての変数への読み取りワイトアクセスを提供します。これは、コードの一部(意図的または偶然に)がグローバル変数を変更できることを意味します。

$ Globalsを介した未確認のグローバル状態のセキュリティリスク

例えば:

 $ globals ['user_id'] = 123;

関数ProcessInput($ input){
    $ globals ['user_id'] = $ input; //検証なし!
}

processInput($ _ get ['id']); //攻撃者は入力を制御します

ユーザー入力が検証や消毒なしでuser_idようなグローバル変数に直接記述されている場合、攻撃者はid=1を設定することで特権をエスカレートする可能性があります(たとえば、管理者になりすまします)。

$ Globalsを介した未確認のグローバル状態のセキュリティリスク

リスク:グローバルに保存されている重要なデータは、安全でないコードパスや信頼できないコードパスを含むどこからでも可変になります。


2。攻撃面の増加とカプセル化不良

関数が$GLOBALSを介してグローバル変数に依存すると、それらはグローバル状態に密接に結合されます。これにより、カプセル化が壊れ、コードが監査、テスト、安全性が困難になります。

考慮する:

関数deleteaccount(){
    if($ globals ['user_role'] === 'admin'){
        // Logicを削除します
    }
}

$GLOBALS['user_role']を注入または変更する方法を見つけた攻撃者(たとえば、動的変数割り当てまたは安全なextract()コールを介して許可をバイパスする可能性があります。

問題:グローバル状態に基づくセキュリティ決定は、その状態を意図したフローの外側で変更できるため、脆弱です。


3。状態の変更を追跡および監査するのが難しい

$GLOBALSどこでもアクセス可能であるため、変数が変更された場所を追跡するには、コードベース全体をスキャンする必要があります。これにより、検出が難しくなります。

  • 不正な変更
  • 偶発的な上書き
  • 注入ポイント

セキュリティ監査中、この不明瞭さは重大な欠陥を隠すことができます。


4。動的コードまたは不十分な入力処理による悪用

一部の古いまたは不十分に書かれているPHPコードは$GLOBALSのエントリを含むグローバルスコープを汚染または操作できる、 extract($_GET)や動的変数名( $$key = $value )などのコンストラクトを使用します。

例:

 foreach($ _get as $ key => $ value){
    $ globals [$ key] = $ value; //グローバル状態への直接注入
}

攻撃者は、その変数が後で信頼されている場合、 ?user_role=admin and releate特権を送信できます。


リスクを減らすためのベストプラクティス

未チェックのグローバルな状態の落とし穴を避けるため:

  • アプリケーションロジックに$GLOBALSを使用しないでください。代わりに、依存関係注入、関数パラメーター、または構成オブジェクトを使用します。
  • 間接的に状態に影響を与える前に、入力を検証し、消毒します
  • グローバル変数に敏感なまたはセキュリティクリティカルなデータ(役割、トークン、セッションフラグなど)を保存しないでください。
  • 最新のPHPでreadonlyクラスまたは構成オブジェクトを使用して、不変性を実施します。
  • 厳格なコーディング標準と静的分析ツール(PHPSTANやPSALMなど)を有効にして、危険なグローバル使用を検出します。
  • 絶対に必要ではない場合、生産環境でextract()compact()などの危険な機能を無効にします

結論

$GLOBALSデバッグまたは非常に具体的なレガシーユースケースのための強力なツールですが、州の管理に依存することで、深刻なセキュリティとメンテナンスの問題が発生します。グローバル変数へのチェックされていないアクセスにより、ロジックの欠陥、特権のエスカレーション、およびトレースが困難なバグが可能になります。

重要なのは、グローバルな状態への依存を最小限に抑え、コードレビュー中に$GLOBALSの使用を赤旗として扱うことです。最新のPHPアプリケーションは、利便性駆動型のグローバルアクセスよりもカプセル化された予測可能なデータフローを支持する必要があります。

基本的に:どこからでも変数を変更できるからといって、すべきではありません。

以上が$ Globalsを介した未確認のグローバル状態のセキュリティリスクの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ホットトピック

依存関係注入:$グローバルの優れた代替品 依存関係注入:$グローバルの優れた代替品 Aug 03, 2025 pm 03:56 PM

DependencyInjection(di)$ globalShidesthem.2.diimprovestestabilityの依存性による依存性の依存性の$ globalshidesthem.2.dieasyManipulatingglobalState.3.ductupeStightcouplingbydecoupなどの依存性を維持することで、依存性$ globals becaudeItmakesdependenciesexplicitの発行中心

グローバル国家の危険:PHPの$グローバルを避けるべき理由 グローバル国家の危険:PHPの$グローバルを避けるべき理由 Aug 03, 2025 am 04:14 AM

$ globalscreateShidDedendenciesを使用して、functionshardertotetest、壊れやすい、andunReusableを使用します

$ Globalsを介した未確認のグローバル状態のセキュリティリスク $ Globalsを介した未確認のグローバル状態のセキュリティリスク Aug 03, 2025 pm 04:20 PM

$ globalSallowsunintendedvariablewritingのチェックされていない、aTmingStrationCriticalDatalidSoridSorolosErolosErowSOROUTS Validation;

$ Globals vs. `Global`キーワード:コアの違いを理解します $ Globals vs. `Global`キーワード:コアの違いを理解します Aug 04, 2025 pm 03:59 PM

$ GlobalsとGlobalはどちらも関数のグローバル変数にアクセスするために使用されますが、重要な違いがあります。1。$ Globalsは、$ Globals ['var']などのキー名を介して変数にアクセスするハイパーグローバルアレイです。 2. $ Globalsは事前宣言を必要とせず、直接使用することができます。グローバルは最初に宣言し、次に使用する必要があります。 3. $ Globalsは、$ Globals [$ varname]などの動的アクセスをサポートし、Globalは動的宣言をサポートしていません。 4.Unset($ Globals ['var'])はグローバル変数自体を削除しますが、Unset($ var)はグローバル$ vです

最新のPHPフレームワークが$ Globalsを廃止する理由 最新のPHPフレームワークが$ Globalsを廃止する理由 Aug 05, 2025 am 07:39 AM

ModernPhpframeworkslikelavalavelandsymfonyusedepentyinjectiontoEliminaterelianceon $ globalsbyinjectingdependenciesexplicty、改善可能性と測定のカップリング

$ Globalsの操作によって引き起こされるグローバルな状態のカオスのデバッグ $ Globalsの操作によって引き起こされるグローバルな状態のカオスのデバッグ Aug 03, 2025 pm 01:46 PM

$ globalsmanipulationcancusuasusunpredicablebugsinphp; todebugandresolveit、1。$ globalsprovidesglobalacesstoallvariables、makestatechangeshardtotrack;

$ Globalsで覆われたユニットテストコードの悪夢 $ Globalsで覆われたユニットテストコードの悪夢 Aug 05, 2025 am 09:06 AM

$ Globalsを使用すると、単体テストが破壊され、隠された依存関係が導入され、テスト間の状態共有、混乱のある設定、分離が不十分で、シミュレートが困難になります。 2。ソリューションは次のとおりです。最初に保存してから、汚染を避けるためにグローバルな状態を復元します。 3. $ Globals Accessをサービスクラスにカプセル化し、依存関係の注入を通過して、テストでの模擬オブジェクトの使用を容易にします。 4.軽量の依存関係注入でさえ、テスト能力を大幅に改善する可能性があり、グローバル変数を直接読み取ることは避ける必要があります。 5.将来の問題を防ぐために、$ Globalsを無効にし、代わりに構成オブジェクト、依存関係噴射コンテナ、または環境変数を使用し、静的分析ツールを使用してハイパーグローバル変数の使用を検出します。最終的な答えは、$グローバルへの依存性をカプセル化と依存噴射を通じて徐々に排除する必要があります

地雷原のナビゲーション:$グローバルの合法的な(およびまれな)ユースケース 地雷原のナビゲーション:$グローバルの合法的な(およびまれな)ユースケース Aug 04, 2025 pm 02:10 PM

$ globalsMayBeAcceptableGACYSYSTEMSLIKEWORDPRESSPRUGINSWHEREITENSURESCOMPATIBILITYを使用する$を使用してください

See all articles