ホームページ >バックエンド開発 >PHP7 >PHP 7のユーザー入力をサニタイズする方法は?

PHP 7のユーザー入力をサニタイズする方法は?

Karen Carpenter
Karen Carpenterオリジナル
2025-03-10 16:50:16507ブラウズ
<p>PHP 7でユーザー入力を消毒する方法</p> <h2> </h2>PHP 7のユーザー入力の消毒は、SQLインジェクション、クロスサイトスクリプティング(XSS)、クロスサイトリクエスト偽造(CSRF)などのセキュリティの脆弱性を防ぐために重要です。 中核的な原則は、ユーザーが提供するデータを決して信用しないことです。 代わりに、アプリケーションで使用する前に、常に検証してフィルタリングする必要があります。 PHPはサニタイゼーションのためのいくつかの組み込みの機能と手法を提供しますが、最良のアプローチには、特定のコンテキストに合わせた方法の組み合わせを含む最良のアプローチを提供します。<p></p>単純なケースでは、<p>のような機能で十分です。この関数は、<code>htmlspecialchars()</code>、<code><</code>、<code>></code>、<code>&</code>などの特殊文字をHTMLエンティティに変換し、Webページにデータを表示するときにXSS攻撃を防ぎます。 たとえば、<code>"</code> </p> <pre class="brush:php;toolbar:false"><code class="php">$userInput = $_GET['name']; $safeUserInput = htmlspecialchars($userInput, ENT_QUOTES, 'UTF-8'); echo "<p>Hello, " . $safeUserInput . "!</p>";</code></pre>より複雑なシナリオ、特にデータベースの相互作用を扱う場合、パラメーター化されたクエリ(作成されたステートメント)が最も効果的な方法です。準備されたステートメントは、SQLクエリをデータから分離し、攻撃者が悪意のあるコードを注入することを防ぎます。 ほとんどのデータベースライブラリ(PDOなど)は、準備されたステートメントのサポートを提供します。<p> </p> <pre class="brush:php;toolbar:false"><code class="php">// Using PDO prepared statements $stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?"); $stmt->execute([$username]); // $username is already sanitized beforehand, ideally through validation rules $users = $stmt->fetchAll();</code></pre>これらのコアテクニックを超えて、入力フィルター(カスタム関数または専用ライブラリ)を使用して、データ型、長さ、フォーマットを検証することが不可欠です。 これにより、データの整合性が確保され、予期しない動作を防ぐのに役立ちます。<p></p>SQL注入を防ぐためにPHP 7のユーザー入力を消毒するためのベストプラクティスは何ですか? 入力の消毒のみに依存することは不十分です。最も堅牢な方法は、上記のように、パラメーター化されたクエリまたは準備されたステートメントを一貫して使用することです。 これは、準備されたステートメントがユーザー入力を実行可能なコードとしてではなく、データとして扱うためです。 データベースドライバーは、データの脱出と引用を処理し、悪意のあるSQLコードが実行されないようにします。<ul> <li> <strong>入力検証:</strong>ユーザー入力を使用する前に、その種類、形式、および長さを検証します。 これにより、準備されたステートメントが使用されていても、予期しないデータがクエリに渡されるのを防ぎます。 たとえば、整数IDを期待する場合は、クエリで使用する前に、入力が実際に整数であることを確認してください。 SQLインジェクションの試みが成功したとしても、ユーザーが過度の特権を持っていない場合、損害は制限されます。</li> <li> <strong>出力エンコーディング:</strong>準備されたステートメントを使用しても、<sss>のような機能を使用して常にWebページに展示するために運命づけられるようにするために常にエンコードしてください。慎重に):<surce>正規表現は入力形式の検証に役立ちますが、脆弱性を回避するために慎重に徹底的なテストで使用する必要があります。誤って作成された正規表現は、サービス拒否(DOS)攻撃につながる可能性があります。<li> <strong></strong>ダイナミックSQLを避けます。 パラメータ化されたクエリを常に使用してください。<ul> <li> <strong>文字列:</strong>表示には<code>htmlspecialchars()</code>を使用し、<code>trim()</code>を使用してホワイトスパースをトリムします。より複雑な検証については、正規表現(慎重に使用)または専用の検証ライブラリを検討してください。 データベースインタラクションの場合、パラメーター化されたクエリを常に使用してください。</li> <li> <strong>数値:</strong>や<code>intval()</code>などの関数を使用して、適切な数値タイプ(int、float)に入力をキャストします。キャストが成功したかどうかを確認し(キャスト前に<code>floatval()</code>を使用するなど)、エラーを適切に処理します。 SQLクエリで数値の文字列表現を直接使用しないでください。代わりに、is_numeric() </li> <li>日付:<strong></strong>を使用して、日付文字列をUNIXタイムスタンプに変換します。結果のタイムスタンプを検証して、有効な日付であることを確認します。 データベースストレージには、適切なデータベース固有の日付/時刻データタイプと形式を使用します。<ul> <li> <strong>sqlインジェクション:</strong>攻撃者は、悪意のあるSQLコードをクエリに挿入し、データベースの完全な制御を読み取り、変更、または削除できるようにし、</li> <li><strong>クロスサイトスクリプティング(XSS):</strong></li> <li>コマンドインジェクション:<sheer>ユーザー入力がシェルコマンドを構築するために使用される場合、攻撃者は悪意のあるコマンドを挿入し、サーバーに任意のコードを実行できます。正当なユーザー。<strong></strong></sheer> </li> <li>データ侵害:<strong>脆弱なアプリケーションは、敏感なユーザーデータの漏れにつながり、重大な評判と経済的損害をもたらす可能性があります。これは、Webアプリケーションの基本的なセキュリティ要件です。 この重要な側面を無視することの結果は、深刻で広範囲に及ぶ可能性があります。</strong> </li> </ul> </li> </ul> </li></surce></sss> </li> </ul>

以上がPHP 7のユーザー入力をサニタイズする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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