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

$GLOBALS
を介して未チェックのグローバル状態がセキュリティ上の懸念であり、リスクを緩和する方法は次のとおりです。
1。意図しない可変上書き
$GLOBALS
、グローバル範囲内のすべての変数への読み取りワイトアクセスを提供します。これは、コードの一部(意図的または偶然に)がグローバル変数を変更できることを意味します。

例えば:
$ globals ['user_id'] = 123; 関数ProcessInput($ input){ $ globals ['user_id'] = $ input; //検証なし! } processInput($ _ get ['id']); //攻撃者は入力を制御します
ユーザー入力が検証や消毒なしでuser_id
ようなグローバル変数に直接記述されている場合、攻撃者はid=1
を設定することで特権をエスカレートする可能性があります(たとえば、管理者になりすまします)。

リスク:グローバルに保存されている重要なデータは、安全でないコードパスや信頼できないコードパスを含むどこからでも可変になります。
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 サイトの他の関連記事を参照してください。

ホットAIツール

Undress AI Tool
脱衣画像を無料で

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

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

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

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

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

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

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

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

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

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

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