目次
2。パラメーターが常に存在すると仮定します
3。 $_GETを使用して、機密データまたは大規模なデータに使用します
4。国家管理のための$_GET使いすぎ
5. URLエンコード動的パラメーターではありません
6.内部ロジックまたはIDの公開
7.無制限のフィルタリングまたはソートを許可します
ベストプラクティスの概要
ホームページ バックエンド開発 PHPチュートリアル $ _getスーパーグローバルを使用するときの一般的な落とし穴とアンチパターン

$ _getスーパーグローバルを使用するときの一般的な落とし穴とアンチパターン

Aug 08, 2025 pm 06:26 PM
PHP Superglobal - $_GET

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

$ _getスーパーグローバルを使用するときの一般的な落とし穴とアンチパターン

PHPで$_GET SuperGlobalを使用することは、URLクエリ文字列からデータを取得する最も一般的な方法の1つです。使いやすいものの、不適切な取り扱いは、セキュリティの脆弱性、バグ、ユーザーエクスペリエンスの低下につながる可能性があります。以下は一般的な落とし穴であり、パターン防止開発者は$_GET使用するときに避けるべきです。

$ _getスーパーグローバルを使用するときの一般的な落とし穴とアンチパターン

1.入力を検証または消毒しない

最も頻繁な間違いの1つは、検証や消毒なしで$_GET値を直接使用することです。

 // apattion anti-Pattern
エコー「こんにちは」。 $ _get ['name'];

//✅より良いアプローチ
$ name = filter_input(input_get、 'name'、filter_sanitize_string);
if($ name){
    エコー「こんにちは」。 htmlspecialchars($ name);
}

なぜそれが危険なのか:
非劣化した入力は、クロスサイトスクリプト(XSS)攻撃につながる可能性があります。常に$_GETデータが信頼されていないと仮定します。

$ _getスーパーグローバルを使用するときの一般的な落とし穴とアンチパターン

ベストプラクティス:

  • 検証には、 filter_input()またはfilter_var()を使用します。
  • htmlで表示するときにhtmlspecialchars()を使用して出力をエスケープします。
  • 予想されるデータ型(整数、電子メールなど)を定義し、それに応じて検証します。

2。パラメーターが常に存在すると仮定します

設定されているかどうかを確認せずに$_GETキーにアクセスすると、PHP警告が発生する可能性があります。

$ _getスーパーグローバルを使用するときの一般的な落とし穴とアンチパターン
 // 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 = &#39;search.php?q = $ query&#39;> search </a>";

//✅安全
echo &#39;<a href = "search.php?q =&#39;。urlencode($ query)。 &#39;"> search </a>&#39;;

ユーザーデータをURLに挿入するときは、常にurlencode()を使用してください。


6.内部ロジックまたはIDの公開

URLで生データベースIDまたは内部識別子を使用すると、システム構造が公開される可能性があります。

 //❌予測可能で漏れやすい
//?id = 12345

より良いアプローチ:

  • UUIDまたは難読化されたIDを使用します。
  • アクセスコントロールを実装する - IDがURLにあるからといって、ユーザーがそれを見る必要があるわけではありません。
  • すべてのリクエストでユーザー許可を検証します。

7.無制限のフィルタリングまたはソートを許可します

$_GETパラメーターをホワイトリスト化なしにSQLクエリを直接制御させるとリスクがあります。

 // dection注射または乱用に対して脆弱です
$ sort = $ _get [&#39;sort&#39;];
$ query = "select * fromユーザー注文by $ sort";

// biteListを使用します
$ Aldoct_sorts = [&#39;name&#39;、 &#39;email&#39;、 &#39;created_at&#39;];
$ sort = in_array($ _ get [&#39;sort&#39;]、$ approad_sorts)? $ _get [&#39;sort&#39;]: &#39;name&#39;;

許容可能な値の既知のリストに対して常に動的クエリパーツを検証してください。


ベストプラクティスの概要

  • cell常に$_GET入力を検証し、消毒します。
  • filter_input()およびhtmlspecialchars()を使用します。
  • isset()または??を使用してキーが存在するかどうかを確認します。
  • queryクエリ文字列の機密データを避けてください。
  • urlsを清潔で意味のあるものに保ちます。
  • Rinksに挿入されたURLエンコード値。
  • 「「目に見えない」データに対してもアクセス制御を実装します。
  • ✅ホワイトリストは、並べ替え、フィルタリングなどに値を許可しました。

$_GET安全に使用することは難しいことではありません。すべてのユーザー入力を信頼されていない一貫した検証として扱う必要があります。これらの習慣はあなたのアプリを保護し、保守性を向上させます。

以上が$ _getスーパーグローバルを使用するときの一般的な落とし穴とアンチパターンの詳細内容です。詳細については、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)

ホットトピック

優雅な劣化:PHPでの欠落と奇形の$ _GETパラメーターの取り扱い 優雅な劣化:PHPでの欠落と奇形の$ _GETパラメーターの取り扱い Aug 08, 2025 pm 06:38 PM

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

キャッシュ戦略とSEOのベストプラクティスに対する$ _GETの影響 キャッシュ戦略とSEOのベストプラクティスに対する$ _GETの影響 Aug 05, 2025 am 07:46 AM

$ _GETPARAMETERSCANFRAGMENTCACHERENTRIES、REDUCECACHEHITRATES、ANDCAUSECDNCACHINGINFICIESIESEECHUNIQUINIQUAMETERCOMBINATESADISTICTURL;

ヌルの合体の芸術:$ _getデータ取得の近代化 ヌルの合体の芸術:$ _getデータ取得の近代化 Aug 07, 2025 pm 07:40 PM

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

タミングURLの複雑さ:$ _getを使用した状態管理手法 タミングURLの複雑さ:$ _getを使用した状態管理手法 Aug 08, 2025 pm 06:30 PM

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

生の入力から安全なデータへ:PHPの$ _Get SuperGlobalの決定的なワークフロー 生の入力から安全なデータへ:PHPの$ _Get SuperGlobalの決定的なワークフロー Aug 03, 2025 am 11:12 AM

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

$ _getスーパーグローバルを使用するときの一般的な落とし穴とアンチパターン $ _getスーパーグローバルを使用するときの一般的な落とし穴とアンチパターン Aug 08, 2025 pm 06:26 PM

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

$ _getからオブジェクトを要求する:最新のフレームワーク抽象URLパラメーター $ _getからオブジェクトを要求する:最新のフレームワーク抽象URLパラメーター Aug 05, 2025 am 07:15 AM

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

アレイベースの$ _GETパラメーターで複雑なデータ構造のロックを解除します アレイベースの$ _GETパラメーターで複雑なデータ構造のロックを解除します Aug 04, 2025 pm 02:22 PM

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

See all articles