PHPフォームの検証
この章と次の章では、PHPを使用してフォーム データを検証する方法を示します。
PHP フォームの検証
PHPフォームを処理するときはセキュリティを考えてください!
これらのページでは、セキュリティを考慮して PHP フォームを処理する方法を示します。ハッカーやスパマーからフォームを保護するには、フォーム データを適切に検証することが重要です。
これらの章で扱う HTML フォームには、必須およびオプションのテキスト フィールド、ラジオ ボタン、送信ボタンなど、さまざまな入力フィールドが含まれています。
上記のフォームの検証規則は次のとおりです。
分野 |
検証規則 |
---|---|
名前 | 必須です。 文字と空白のみを含める必要があります。 |
Eメール | 必須です。 有効なメール アドレス (@ と .) が含まれている必要があります。 |
Webサイト | オプション。存在する場合は、有効な URL が含まれている必要があります。 |
コメント | オプション。複数行の入力フィールド (テキストエリア)。 |
性別 | 必須です。いずれかを選択する必要があります。 |
最初に、フォームのプレーン HTMLコードを見ていきます。
テキストフィールド
名前、電子メール、およびWebサイトのフィールドはテキスト入力要素であり、コメントフィールドはテキストエリアです。 HTMLコードは次のようになります。
ラジオボタン
性別フィールドはラジオ ボタンで、HTMLコードは次のようになります。
フォーム要素
フォームのHTMLコードは次のようになります。
フォームが送信されると、フォーム データは method="post"で送信されます。
$_SERVER["PHP_SELF"] 変数とは何ですか?$_SERVER["PHP_SELF"] は、現在実行中のスクリプトのファイル名を返すスーパーグローバル変数です。
したがって、$_SERVER["PHP_SELF"] は、別のページにジャンプする代わりに、送信されたフォームデータをページ自体に送信します。このようにして、ユーザーはフォームと同じページでエラーメッセージを受け取ります。
htmlspecialchars() 関数とは何ですか?htmlspecialchars() 関数は、特殊文字をHTMLエンティティに変換します。これは、< や > などのHTML文字を<に置き換えることを意味します。と >.これにより、攻撃者がフォームにHTMLまたはJavascript コードを挿入してコードを悪用する (クロスサイト スクリプティング攻撃)のを防ぎます。
PHPフォームセキュリティに関する注意事項
$_SERVER["PHP_SELF"]変数はハッカーによって使用される可能性があります!
ページで PHP_SELFが使用されている場合、ユーザーはスラッシュ (/) を入力してから、いくつかのクロス サイトスクリプティング(XSS)コマンドを実行できます。
クロスサイトスクリプティング(XSS)は、Webアプリケーションで通常見られるコンピュータセキュリティの脆弱性の一種です。XSSを使用すると、攻撃者は、他のユーザーが表示するWeb ページにクライアント側のスクリプトを挿入できます。
「test_form.php」という名前のページに次のフォームがあるとします。
ここで、ユーザーが「http://www.example.com/test_form.php」のような通常のURLをアドレスバーに入力すると、上記のコードは次のように変換されます。
ここまでは順調ですね。
ただし、ユーザーがアドレス バーに次のURLを入力したとします。
この場合、上記のコードは次のように変換されます。
このコードは、scriptタグとアラートコマンドを追加します。ページが読み込まれると、JavaScriptコードが実行されます (ユーザーには警告ボックスが表示されます)。これは、PHP_SELF変数が悪用される可能性がある単純で無害な例です。
そのことに注意してください<script>タグ内に任意のJavaScriptコードを追加できます。ハッカーはユーザーを別のサーバー上のファイルにリダイレクトできます。そのファイルには、グローバル変数を変更したり、フォームを別のアドレスに送信してユーザー データを保存したりする悪意のあるコードが含まれている可能性があります。
$_SERVER["PHP_SELF"]の悪用を回避するには?
$_SERVER["PHP_SELF"]の悪用は、htmlspecialchars()関数を使用して回避できます。
フォーム コードは次のようになります。
htmlspecialchars()関数は、特殊文字をHTMLエンティティに変換します。ユーザーがPHP_SELF変数を悪用しようとすると、次の出力が生成されます。
悪用は失敗し、害はありません!
PHPでフォームデータを検証する
最初に行うことは、PHPのhtmlspecialchars()関数を介してすべての変数を渡すことです。
htmlspecialchars()関数を使用する場合。次に、ユーザーがテキストフィールドに次の内容を送信しようとした場合。:
<script>location.href('http://www.hacked.com')</script>
- これは、次のようにHTMLエスケープコードとして保存されるため、実行されません。
<スクリプト>location.href('http://www.hacked.com')</スクリプト>
このコードは、ページまたは電子メール内に安全に表示できるようになりました。
また、ユーザーがフォームを送信するときに、さらに2つのことを行います。
- ユーザー入力データから不要な文字 (余分なスペース、タブ、改行) を取り除きます(PHPのtrim()関数を使用)。
- ユーザー入力データからバックスラッシュ (\) を削除します (PHP stripslashes() 関数を使用)。
次のステップは、すべてのチェックを行う関数を作成することです (これは、同じコードを何度も書くよりもはるかに便利です)。
関数にtest_input()という名前を付けます。
これで、各$_POST変数をtest_input()関数でチェックできます。スクリプトは次のようになります。
例
スクリプトの開始時に、$_SERVER["REQUEST_METHOD"]を使用してフォームが送信されたかどうかを確認していることに注意してください。 REQUEST_METHODがPOSTの場合、フォームは送信されており、検証する必要があります。送信されていない場合は、検証をスキップして空白のフォームを表示します。
ただし、上記の例では、すべての入力フィールドがオプションです。ユーザーがデータを入力しなくても、スクリプトは正常に機能します。
次のステップでは、入力フィールドを必須にし、必要に応じてエラー メッセージを作成します。
プログラミング学習を加速させる
プログラミングをプロの講師に教えてもらいませんか。