$ _getスーパーグローバルを使用するときの一般的な落とし穴とアンチパターン
XSSを防ぐためにhtmlspecialchars()を使用して、filter_input()またはfilter_var()を使用して$ _get入力を常に検証して消毒します。 2。警告を避けるために、ISSET()またはnull合体演算子(??)を使用してパラメーターが存在するかどうかを確認します。 3.クエリ文字列を介して敏感または大規模なデータを渡さないでください。代わりに$ _POSTまたはセッションを使用します。 4.国家管理のために$ _GETを過剰に使用しないでください。セッションまたはデータベースを使用して、複雑な状態を保存します。 5.リンクを生成するときに、urlencode()を使用したurl-encode動的パラメーター。 6.内部ロジックまたはIDの公開を避けます。 UUIDまたは難読化を使用して、アクセス制御を実施します。 7.ホワイトリストは、注射と乱用を防ぐために、ソートとフィルタリングの値を許可しました。すべての$ _GETデータを信頼されていないものとして扱い、一貫した検証を適用することで、セキュリティ、保守性、およびより良いユーザーエクスペリエンスが保証されます。
PHPで$_GET
SuperGlobalを使用することは、URLクエリ文字列からデータを取得する最も一般的な方法の1つです。使いやすいものの、不適切な取り扱いは、セキュリティの脆弱性、バグ、ユーザーエクスペリエンスの低下につながる可能性があります。以下は一般的な落とし穴であり、パターン防止開発者は$_GET
使用するときに避けるべきです。

1.入力を検証または消毒しない
最も頻繁な間違いの1つは、検証や消毒なしで$_GET
値を直接使用することです。
// apattion anti-Pattern エコー「こんにちは」。 $ _get ['name']; //✅より良いアプローチ $ name = filter_input(input_get、 'name'、filter_sanitize_string); if($ name){ エコー「こんにちは」。 htmlspecialchars($ name); }
なぜそれが危険なのか:
非劣化した入力は、クロスサイトスクリプト(XSS)攻撃につながる可能性があります。常に$_GET
データが信頼されていないと仮定します。

ベストプラクティス:
- 検証には、
filter_input()
またはfilter_var()
を使用します。 - htmlで表示するときに
htmlspecialchars()
を使用して出力をエスケープします。 - 予想されるデータ型(整数、電子メールなど)を定義し、それに応じて検証します。
2。パラメーターが常に存在すると仮定します
設定されているかどうかを確認せずに$_GET
キーにアクセスすると、PHP警告が発生する可能性があります。

// apattion anti-Pattern $ page = $ _get ['page']; //✅正しいアプローチ $ page = $ _get ['page'] ?? 1; //デフォルト1に1 // または $ page = isset($ _ get ['page'])? (int)$ _ get ['page']:1;
ヒント:クリーナーフォールバックには、null coulescingオペレーター( ??
)を使用します。オプションのパラメーターのデフォルトを常に提供します。
3。 $_GET
を使用して、機密データまたは大規模なデータに使用します
クエリ文字列を介して機密データ(パスワード、トークン、個人情報など)を渡すことは深刻な間違いです。
//❌これは決してしません // https://example.com/delete?user_id=5&token=abc123 // post代わりに投稿リクエストとセッションを使用します
なぜそれが悪いのか:
- クエリ文字列は、サーバーログ、ブラウザの履歴、リファラーヘッダーに表示されます。
- URLは誤って共有できます。
- 制限された長さ(URLの長さの制限は、ブラウザ/サーバーによって異なります)。
ガイドライン:機密または大規模なペイロードには、 $_POST
またはセッションを使用します。
4。国家管理のための$_GET
使いすぎ
アプリケーション状態を管理するために長いまたは複雑なクエリ文字列に依存すると、URLは扱いにくく脆弱になります。
// //?step = 3&mode = edit&form = profile&tab = notifications&user = 123&lang = en&theme = dark
問題:
- 維持してデバッグするのは難しい。
- パラメーターが欠落または奇形がある場合、簡単に破損します。
- 貧しいUXとSEO。
より良い選択肢:
- セッションを使用して、マルチステップ状態を保存します。
- データベースまたはユーザー設定に構成を保存します。
- クエリ文字列を最小限に抑え、セマンティック(例:
?page=2
、?search=php
)。
5. URLエンコード動的パラメーターではありません
動的な$_GET
値でURLを生成する場合、それらをエンコードしないと、リンクを壊したり、セキュリティの問題を導入したりできます。
//❌危険 echo "<a href = 'search.php?q = $ query'> search </a>"; //✅安全 echo '<a href = "search.php?q ='。urlencode($ query)。 '"> search </a>';
ユーザーデータをURLに挿入するときは、常にurlencode()
を使用してください。
6.内部ロジックまたはIDの公開
URLで生データベースIDまたは内部識別子を使用すると、システム構造が公開される可能性があります。
//❌予測可能で漏れやすい //?id = 12345
より良いアプローチ:
- UUIDまたは難読化されたIDを使用します。
- アクセスコントロールを実装する - IDがURLにあるからといって、ユーザーがそれを見る必要があるわけではありません。
- すべてのリクエストでユーザー許可を検証します。
7.無制限のフィルタリングまたはソートを許可します
$_GET
パラメーターをホワイトリスト化なしにSQLクエリを直接制御させるとリスクがあります。
// dection注射または乱用に対して脆弱です $ sort = $ _get ['sort']; $ query = "select * fromユーザー注文by $ sort"; // biteListを使用します $ Aldoct_sorts = ['name'、 'email'、 'created_at']; $ sort = in_array($ _ get ['sort']、$ approad_sorts)? $ _get ['sort']: 'name';
許容可能な値の既知のリストに対して常に動的クエリパーツを検証してください。
ベストプラクティスの概要
- cell常に
$_GET
入力を検証し、消毒します。 -
filter_input()
およびhtmlspecialchars()
を使用します。 -
isset()
または??
を使用してキーが存在するかどうかを確認します。 - queryクエリ文字列の機密データを避けてください。
- urlsを清潔で意味のあるものに保ちます。
- Rinksに挿入されたURLエンコード値。
- 「「目に見えない」データに対してもアクセス制御を実装します。
- ✅ホワイトリストは、並べ替え、フィルタリングなどに値を許可しました。
$_GET
安全に使用することは難しいことではありません。すべてのユーザー入力を信頼されていない一貫した検証として扱う必要があります。これらの習慣はあなたのアプリを保護し、保守性を向上させます。
以上が$ _getスーパーグローバルを使用するときの一般的な落とし穴とアンチパターンの詳細内容です。詳細については、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)

PHPの欠落または奇形の$ _GETパラメーターを効果的に処理するには、最初に入力を検証およびクリーニングし、デフォルト値を使用し、タイプセーフメソッドを使用してデータにアクセスし、ユーザーフレンドリーな方法で優雅に失敗する必要があります。 1. ISSET()とFilter_Input()を使用してIDが正の整数であることを確認するなど、パラメーターが存在するかどうかを常に確認し、そのタイプと形式を検証します。 2.ページングやソートフィールドなど、オプションのパラメーターの安全なデフォルト値を設定して、欠落によるクラッシュを避けます。 3. $ _getへの直接アクセスを避けてください。nullマージ演算子と組み合わせたget_param()やget_int()などの機能をカプセル化することにより、安全な読み取りを実行する必要があります。 4.パラメーターが無効な場合、APIは400ステータスコードとJSONエラーを返す必要があります

$ _GETPARAMETERSCANFRAGMENTCACHERENTRIES、REDUCECACHEHITRATES、ANDCAUSECDNCACHINGINFICIESIESEECHUNIQUINIQUAMETERCOMBINATESADISTICTURL;

nullcoalescingオペレーター(??)を使用して、$ _getパラメーターへの安全なアクセスを簡素化します。 1。使用?? $ page =(int)($ _ get ['page'] ?? 1)など、set()チェックの代わりに; 2。(int)、trim()、in_array()など、タイプ変換、文字列のクリーニング、および値の確認が必要です。 3。$ query = $ _ get ['search'] ?? $ _ get ['q'] ?? $ _ get ['s'] ?? ''など、複数のデフォルト値をチェーンで設定できますが、乱用は避ける必要があります。 4.この関数は評価するのが怠けなく、変数または閉鎖によって遅延を実行する必要があることに注意してください。 5。タイプの安全性と入力検証を組み合わせます

$ \ _ getTocaptureFiltureAndNavigationStateState -fromtheurlqueryStringを使用して、BookMarkableLinkSandPreservingContextAcrosRefreshandNavigation.2.BuildurlsdyurlsDynamically UsingIngingAhelperfunctionThatisthatisthatisthating $

常に$ \ _ getDataaSunTrusted; 2.CeckifTheparameterexistsusingIsset()ornullcoalescing; 3.SanitizeBasedOneXPectedType— UseFil ter \ _validate \ _intforintegers、htmlspecialchars()forstrings、andfilter \ _validate \ _booleanforbooleans; 4.validateagainstbusinessl

AlwaysValidateAndesAnitize $ _GEINPUTUSING FILTER_INPUT()またはFILTER_VAR()AndesScapeOutputWithHtMlSpecialChars()TopVrachtxss.2。 USS

TheShiftFromRaw $ _GETTOSTOSTRUCTURERRUCTUREDRECRUCTUREDRUCTUREDOBJECTSIMPROSESTABILITY BYALLOWINGMOCKREYONGONGLOBALSTATE.2.ITENHANCESCONSISTENCINGANDSAFETYTHROUGHBUILTINTINTEDINTEDINTENSINTINTINSTIESTSTROUGHTINTINTINTINTINTINTINTINTINGTHTYTHTYTHROUGHTINGS、SANITIZATION、SANITIZING、およびVALIDATION.

phpautomatelysarray-clikeStringsintinint $ _getArrays、enablingcomplexdatahandling.1.use?colors [] = red&colors [] = bluetogetindexededarrays.2.use?use?user [name] = alice&user [age] = 25forasociativith?
