PHP フォームの検証
この章では、PHP を使用してクライアントから送信されたフォーム データを検証する方法を紹介します。
ユーザー入力は可能な限り (クライアント スクリプト経由で) 検証される必要があります。ブラウザーの検証が高速になり、サーバーの負荷が軽減されます。
ユーザー入力をデータベースに挿入する必要がある場合は、サーバー検証の使用を検討する必要があります。サーバー上のフォームを検証する良い方法は、別のページにジャンプするのではなく、フォームをそれ自体に渡すことです。これにより、ユーザーは同じフォーム ページでエラー メッセージを取得できます。ユーザーがエラーを見つけやすくなります。
PHP フォームを扱うときはセキュリティを考慮する必要があります。
この章では、ハッカーやスパムを防ぐために、フォームのデータセキュリティ検証を実行する必要がある、PHP フォームデータの安全な処理について説明します。
PHP フォーム検証の例
上記のフォームでは次の検証ルールが使用されています:
まず、純粋な HTML コードを見てみましょうこの形式:
テキスト
名前、メールアドレス、ウェブサイトのフィールドはテキスト入力要素であり、コメントフィールドはテキストボックスです。 HTML コードは次のようになります:
Name: <input type="text" name="name"> E-mail: <input type="text" name="email"> Website: <input type="text" name="website"> Comment: <textarea name="comment" rows="5" cols="40"></textarea>
ラジオ ボタン
性別フィールドはラジオ ボタンです。HTML コードは次のようになります:
Gender: <input type="radio" name="gender" value="female">Female <input type="radio" name="gender" value="male">Male
フォーム要素
フォームコード 次のようになります:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
このフォームが送信されると、フォームデータは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」という名前のページに次のフォームがあるとします。 ">
ここで、ユーザーがアドレス バーに通常の URL「http://www.php.cn/test_form.php」を入力すると、上記のコードは次のように変換されます:
< フォーム メソッド="post" action="test_form.php">
これまでのところ、すべてが正常に動作しています。
ただし、ユーザーがアドレス バーに次の URL を入力した場合:
http://www.php.cn/test_form.php/%22%3E%3Cscript%3Ealert('php')%3C/script% 3E
この場合、上記のコードは次のように変換されます:
<form method="post" action="test_form.php"/><script>alert('php')</script> ;
このコードは、スクリプトとプロンプト コマンドを追加します。ページが読み込まれると、JavaScript コードが実行されます (ユーザーにはツールヒントが表示されます)。これは、PHP_SELF 変数が悪用される方法を示す、単純で無害な例にすぎません。
<script> タグ内に任意の JavaScript コードを追加できることに注意してください。ハッカーはユーザーを別のサーバー上のファイルにリダイレクトし、そのファイル内の悪意のあるコードがグローバル変数を変更したり、フォームを他のアドレスに送信してユーザー データを保存したりする可能性があります。
htmlspecialchars()
関数を使用すると、$_SERVER["PHP_SELF"] の悪用を防ぐことができます。 フォームのコードは次のとおりです:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
htmlspecialchars()関数 特殊文字を HTML エンティティに変換します。ここで、ユーザーが PHP_SELF 変数を悪用しようとすると、次の出力が生成されます:
<form method="post" action="test_form.php/"><script>alert('php') </script>" >
悪用は不可能、害はありません!
PHP 経由でフォーム データを検証する
最初に行う必要があるのは、PHP の htmlspecialchars() 関数を介してすべての変数を渡すことです。ユーザーがテキストフィールドに次の内容を送信しようとすると、htmlspecialchars() 関数を使用します:
<script>location.href('http://www.php.cn')</script>
- コードは次のようにエスケープ コードとして保存されるため、実行されません:<script>location.href('http://www.php.cn')</script>
これで、このコードはページまたは電子メールに安全に表示できます。
ユーザーがフォームを送信したら、さらに 2 つのことを行う必要があります:
1. (PHP の Trim() 関数を使用して) ユーザー入力データ内の不要な文字 (余分なスペース、タブ、改行) を削除します
2. (PHPのstripslashes()関数経由) ユーザー入力データのバックスラッシュを削除します()
次に、チェック関数を作成します(これはコードを何度も書くより効率的です)。
関数に test_input() という名前を付けました。