PHP SuperGlobalsのマスター:グローバルな範囲に深く飛び込みます
PHPのスーパーグロバルは、ユーザー入力、サーバー環境、セッションなどからのデータを宣言なしのすべてのスコープでアクセスできる事前定義された、常に利用可能な変数です。主なスーパーグロバルは次のとおりです。$ get - URLパラメーターからのデータ。 $ post - httpからのデータフォームのような投稿要求。 $リクエスト - PHPの構成によって制御される$ get、$ post、$ cookieのマージ。 $セッション - リクエスト間の永続的なセッションデータ。 $ cookie - クライアントセントクッキー。 $サーバー - サーバーおよび実行コンテキスト情報。 $ファイル - アップロードされたファイルの詳細。 $ env - 環境変数。および$ Globals - すべてのグローバル変数への参照。開発者がスーパーグローバルデータを信頼できるものとして扱うと、主要なセキュリティリスクが生じますが、$ get、$ post、$ cookieの値はユーザー制御され、操作される可能性があり、XSSやSQLインジェクションなどの攻撃に対して脆弱になります。たとえば、$ get ['name']を直接出力すると、消毒されていない場合はクロスサイトのスクリプトにつながる可能性があります。一般的な落とし穴には、$ requestに依存することが含まれます。これは、Variables_orderディレクティブに応じて入力ソースが重複するため、あいまいさを引き起こす可能性があります。入力の検証または消毒に失敗しました。データベースクエリで無化型のスーパーグローバル値を使用して、SQLインジェクションへのドアが開きます。ベストプラクティスには以下が含まれます。 filter_validate_emailを使用した電子メールの検証やhtmlspecialchars()を使用して出力を逃がすなど、filter_input()やfilter_var()などの関数を使用して入力を検証および消毒する; SQL注入を防ぐためにデータベースクエリを操作するときに、PDOまたはMySqliを使用して準備されたステートメントを使用します。 ISSET()および!empty()で使用する前に、キーの存在と非空白のステータスを確認します。元のリクエストを反映する必要があるため、$ get and $ postの変更を回避します。 http_user_agentやhttp_refererのような$サーバー値に注意することは、ユーザーがサプリしてスプーフィングできるため、セキュリティロジックには適していません。そして、$ Globalsは関数内のすべてのグローバル変数へのアクセスを可能にするが、コードのテスト可能性と予測可能性を維持するために、明示的なパラメーターが渡されることを支持して避けるべきであることを理解してください。最終的に、SuperGlobalsはPHP開発に不可欠ですが、安全で保守可能なアプリケーションを確保するために、注意、意図、および適切な入力処理をもって使用する必要があります。
PHPを使用する場合、アプリケーションを介してデータがどのように流れるかを理解することが不可欠です。これにはPHPのスーパーグロバルがあります。これらの組み込み変数は、範囲に関係なく常に利用可能であるため、リクエスト、セッション、Cookieなどを処理するための強力なツールになります。しかし、大きな力で大きな責任があります。スーパーグロバルを誤用すると、セキュリティの脆弱性と非難のコードにつながる可能性があります。スーパーグロバルが何であるか、どのように機能し、効果的に使用するためのベストプラクティスを詳しく見てみましょう。

スーパーグロバルとは何ですか?
SuperGlobalsは、PHPの事前定義された変数であり、グローバル、機能、またはクラスなどのすべてのスコープで自動的に利用可能ですglobal
これらは、ユーザー入力、サーバー情報、セッションデータなど、さまざまなソースからのデータを保持する関連配列です。
主なスーパーグロバルは次のとおりです。

-
$_GET
- URLパラメーターを介して送信されたデータ(クエリ文字列) -
$_POST
- HTTP POSTメソッドを介して送信されたデータ(たとえば、フォーム送信) -
$_REQUEST
-$_GET
、$_POST
、および$_COOKIE
(configurable)の組み合わせ -
$_SESSION
- リクエスト全体に保存されているセッション変数 -
$_COOKIE
- クライアントから送信されたCookie -
$_SERVER
- サーバーおよび実行環境情報 -
$_FILES
- フォームを介してアップロードされたファイル -
$_ENV
- 環境変数 -
$GLOBALS
- グローバルスコープで利用可能なすべての変数への参照
常にアクセスしやすいため、インポートせずに機能を使用することもできますが、自由に使用する必要があるという意味ではありません。
一般的な落とし穴とセキュリティリスク
開発者が犯す最大の間違いの1つは、スーパーグロバルを信頼できる入力として扱うことです。彼らはそうではありません。 $_GET
、 $_POST
、または$_COOKIE
からのデータは、クライアントから来て、操作できます。

例えば:
エコー「こんにちは」。 $ _get ['name'];
誰かが<script>alert('hacked')</script>
name
パラメーターとして渡すと、この単純なラインはXSS(クロスサイトスクリプト)に対して脆弱です。
その他の一般的な問題は次のとおりです。
-
$_REQUEST
に依存します- 複数の入力ソースをマージするため、あいまいさにつながる可能性があります。たとえば、GETパラメーターとポストフィールドの両方が同じ名前で存在する場合、どちらが優先されますか? (PHP.iniのvariables_order
ディレクティブに依存します。) - 入力を検証または消毒しない-
$_POST
を介してデータが来るからといって、安全になりません。 - SuperGlobalsをクエリで直接使用する-
mysqli_query($conn, "SELECT * FROM users WHERE id = $_GET[id]")
のようなものをSQLインジェクションの扉を開きます。
スーパーグローバルデータを常に信頼されていないものとして扱い、使用前に消毒/検証してください。
スーパーグロバルを使用するためのベストプラクティス
SuperGlobalsを安全かつ効果的に使用するには、次のガイドラインに従ってください。
$_GET
および$_POST
よりも$_REQUEST
を好みます
データがどこから来ているのかを明示してください。フォームデータが予想される場合は、$_POST
を使用してください。 URLパラメーターを解析する場合は、$_GET
を使用します。これにより、コードがより予測可能で安全になります。すべての入力を検証して消毒します
PHPのフィルター関数を使用します。$ email = filter_input(input_post、 'email'、filter_validate_email); $ age = filter_input(input_post、 'age'、filter_validate_int);
または、スーパーグローバル値で
filter_var()
を使用します。$ clean_name = htmlspecialchars($ _ post ['name']、ent_quotes、 'utf-8');
$_POST
または$_GET
データを使用して準備されたステートメントを使用します
スーパーグローバル値を直接SQLに補間しないでください。 PDOまたはmysqliの作成されたステートメントを使用してください。$ stmt = $ pdo-> prepare( "select * fromユーザーがemail =?"); $ stmt-> execute([$ _ post ['email']]);
使用する前に初期化して確認してください
キーが存在し、空でないことを常に確認してください:if(isset($ _ post ['submit'])&&!empty($ _ post ['email'])){ //プロセスフォーム }
スーパーグロバルの変更は避けてください
$_SESSION
または$_COOKIE
に書き込むことはできますが、$_GET
または$_POST
変更を避けてください。これらは元のリクエストを反映する必要があります。$_SERVER
に注意してください$_SERVER
安全であるように見えますが、HTTP_USER_AGENT
やHTTP_REFERER
などの一部の値はユーザーサプライで、スプーフィングできます。セキュリティの決定に使用しないでください。
範囲と$GLOBALS
理解
他のスーパーグロバルとは異なり、 $GLOBALS
グローバル範囲内のすべての変数への参照を提供します。例えば:
$ name = "Alice"; function greet(){ echo $ globals ['name']; //出力:アリス }
これは、関数内のグローバル変数にアクセスするのに役立ちますが、一般的に依存関係を明示的に渡す方が良いです。 $GLOBALS
に依存すると、コードはテストとメンテナンスが難しくなります。
次のようなパターンを避けてください:
関数計算(){ $ globals ['total'] = $ globals ['a'] $ globals ['b']; }
代わりに、好みます:
関数計算($ a、$ b){ $ a $ bを返します。 }
これにより、機能が純粋で予測可能になります。
スーパーグロバルはPHPの基本的な部分であり、それらをマスターすることは、彼らの利便性とリスクの両方を理解することを意味します。それらを意図的に使用し、すべての入力を検証し、クライアントデータが安全であると仮定しないでください。慎重に処理することで、スーパーグロバルは、ダイナミックでステートフルなWebアプリケーションを構築する上で強力な同盟国になる可能性があります。
基本的に、それは彼らを避けることではなく、賢明に使用することです。
以上がPHP SuperGlobalsのマスター:グローバルな範囲に深く飛び込みますの詳細内容です。詳細については、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)

ファイルアップロードのコアは、エラーを確認し、ファイルの種類を確認し、ファイルを変更して安全に移動することです。 1.最初に$ _files ['error']がupload_err_okであるかどうかを確認します。 2. FINFOを使用して、クライアントデータを信頼する代わりに実際のMIMEタイプを検出します。 3.ファイル拡張子を確認し、許可されたタイプを制限します。 4.パストラバーサルを防ぐために、bin2hex(random_bytes(16))などのランダム名を持つファイルを変更します。 5. MOVE_UPLOADED_FILE(); 6.ストレージの場所は、可能な限りWebルートディレクトリの外側に配置する必要があり、開示する必要がある場合は、スクリプトの実行が無効になります。 7。GDまたは

$ _GETRETRIEVESDATAFROMURLPARAMETERS、ISVISIBLEANDBOOKMARKABLE、適切なフォルノン感受性、iDempotentoperationsieSearchorfiltering.2

AlwityValidateandSanitizeSuperglobalinputsusingfunctionslikefilter_input()orfilter_var()onfilter_var()toensureateTsexcreatiaandsisfreeofmaliciouscontent.2.useprepStatementementementementementementementementementementementementementementementementementementized databaseoperation -operation -operation -operation -operteration -opreventsepreventreventreventrevented ev

$ _Sessionと$ _Cookieは、PHPでWebアプリケーションの状態管理を実装するためのコアメカニズムです。 1。$ _Sessionはサーバーを介してユーザーデータを保存し、ユーザーのステータスを維持するために一意のセッションID(通常はPhpsessIDという名前のCookieに保存されている)に依存しています。初期化するには、session_start()を呼び出す必要があります。これには、データセキュリティが高くなります。 2。$ _Cookieクライアント側に少量のデータを保存します。これは、ログインステータス、ユーザー設定、またはセッションの再接続に使用できます。 3.セキュリティプラクティスには、セッション固定攻撃を防ぐためにログインした後のセッション_REGENERETE_ID(true)の呼び出し、安全なCookieパラメーター(Secure、Hなど)の設定が含まれます。

$ _get、$ _post、$ _serverなどのPHPハイパーグローバル変数は、HTTP要求の各部分を直接マッピングします。 2。$ _POSTプロセスは、ユーザー名やパスワードなど、POST要求本体にデータを形成します。データはURLに含まれておらず、大量の送信できますが、セキュリティを確保するためにHTTPSが必要です。 3。$ _Serverには、request_methodがHTTPメソッド、http_hなどのリクエストメタデータが含まれています。

globalkeywordisslyfasterthan $ globalsduetodirectsymboltablebinding、buttheperformancedifferenceisnegligible in mostapplications.2。$ globalsprovidesdirectacestotheglobalbalsyblaltabletable andallowsunsettinggloblariabliablersunctionsは

thedeprecation of of register_globalsandtheadoption fulterfunctions markedapivotalsphp’ssecurityevolution; 1.register_globalswaswasremoveddueToitsvulnerabilityは、攻撃を許可します

superglobalsinpherppareprededined、常に利用可能、variabresthatholddatafromuserinput、serverenvironment、sessions、andmore、accessible in withoutdeclaration.themainsuperglobalsare:$
