PHPフォームの検証
PHP フォームを扱うときはセキュリティを考慮する必要があります。
この章では、ハッカーやスパムを防ぐために、フォームのデータセキュリティ検証を実行する必要がある、PHP フォームデータの安全な処理について説明します。
この章で紹介する HTML フォームには、次の入力フィールドが含まれています: オプションのテキスト フィールド、ラジオ ボタン、および送信ボタンとともに使用する必要があります:
例
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>PHP.cn</title> </head> <body> <h2>PHP 表单验证实例</h2> <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 名字: <input type="text" name="name" value=""> <br> E-mail: <input type="text" name="email" value=""> <br> 网址: <input type="text" name="website" value=""> <br> 备注: <textarea name="comment" rows="5" cols="40"></textarea> <br> 性别: <input type="radio" name="gender" value="female">女 <input type="radio" name="gender" value="male">男 <br> <input type="submit" name="submit" value="提交"> </form> </body> </html>
プログラムの実行結果:
上記のフォーム検証ルールは次のとおりです:
は必須です。 + 文字とスペースのみを含めることができますが必要です。 + 有効な電子メール アドレスである必要があります (「@」と「.」を含む) URL オプション。存在する場合、有効な URL が含まれている必要があります 備考 オプション。 複数行の入力フィールド (テキストフィールド) 性別 は必須です。 どれかを選択する必要がありますコードを個別に見てみましょう:
テキストフィールド
「名前」、「電子メール」、「ウェブサイト」フィールドはテキスト入力要素です。 「フィールド」はテキストエリア textarea です。
HTML コードは次のとおりです:
名前: <input type="text" name="name" value="">
電子メール: <input type=" text" name="email" value="">
ウェブサイト: <input type="text" name="website" value="">
備考: <textarea name="comment" rows="5 「cols = "40"&gt;&lt;/textarea&gt;表示:
性別: <input type="radio" name="gender" value="女性">女性
<input type="radio" name="gender" value="male" >男性フォーム要素
HTMLフォームのコードは次のとおりです:
このフォームは、method="post" メソッドを使用してデータを送信します。<form method="post" action="<?php echo htmlspecialchars($_SERVER ["PHP_SELF"])";?>
$_SERVER["PHP_SELF"] 変数とは何ですか?
$_SERVER["PHP_SELF"] は、現在実行中のスクリプトのファイル名を返すスーパーグローバル変数です。
つまり、$_SERVER["PHP_SELF"] は、別のページにジャンプするのではなく、フォームデータをそのページ自体に送信します。このようにして、ユーザーはフォーム ページでエラー メッセージ情報を取得できます。
htmlspecialchars()関数とは何ですか?
htmlspecialchars() 関数は、特殊文字を HTML エンティティに変換します。これは、 < や > などの HTML 文字が置き換えられることを意味します。これにより、攻撃者が HTML または JavaScript コードをフォームに挿入してコードを悪用する (クロスサイト スクリプティング攻撃) ことを防ぎます。
PHP フォームのセキュリティに関する重要なヒント
$_SERVER["PHP_SELF"] 変数はハッカーによって悪用される可能性があります。
ページで PHP_SELF を使用している場合、ユーザーはアンダースコアを入力して、css とも呼ばれるクロスサイト スクリプティング (XSS) を実行できます。ヒント: クロスサイト スクリプティング (XSS) は、Web アプリケーションで一般的なコンピューター セキュリティの脆弱性の一種です。 XSS を使用すると、攻撃者は他のユーザーが閲覧している Web ページにクライアント側のスクリプトを入力できます。
「test_form.php」という名前のページに次のフォームがあるとします。 ;?>">
ここで、URL を使用して送信アドレス「test_form.php」を指定し、上記のコードを次のように変更します:
<form メソッド="post" action="test_form.php">
これで大丈夫です。
ただし、ユーザーがブラウザのアドレス バーに次のアドレスを入力することを考慮してください:
上記の URL は次のコードに解析されて実行されます://m.sbmmt.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked') % 3C/script%3E
<form method="post" action="test_form.php/"><script> alert('hacked')</script>
script タグがコードに追加され、alert コマンドが追加されます。 この Javascript コードは、ページの読み込み時に実行されます (ユーザーにはポップアップ ボックスが表示されます)。 これは、PHP_SELF 変数がハッカーによってどのように悪用されるかを示す簡単な例にすぎません。注意してください JavaScript コードは <script> タグに追加できます。ハッカーはこれを使用してページを別のサーバーのページにリダイレクトすることができ、ページ コード ファイルは悪意のあるコードを保護することができ、コードはグローバル変数を変更したり、ユーザーのフォーム データを取得したりすることができます。
$_SERVER["PHP_SELF"] の悪用を回避するには?
$_SERVER["PHP_SELF"] は、htmlspecialchars() 関数を使用することで回避できます。
フォームのコードは次のとおりです:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
htmlspecialchars() は、いくつかの事前定義された文字を HTML エンティティに変換します。ここで、ユーザーが PHP_SELF 変数を悪用したい場合、結果は次のように出力されます:
<form method="post" action="test_form.php/"><script>alert('hacked ')< /script>">
この脆弱性を試すことができませんでした。
PHP を介したフォームデータの検証
最初に行う必要があるのは、PHP の htmlspecialchars() 関数を介してすべての変数を渡すことです。
htmlspecialchars() 関数を使用した後、ユーザーがテキスト フィールドに次の内容を送信しようとすると:
<script>location.href('http://www.hacked.com')< /script> ;
- コードは次のようにエスケープされたコードとして保存されるため、実行されません:
<script>location.href('http://www.hacked.com') < /script>
このコードはページまたはメールに安全に表示できるようになりました。
ユーザーがフォームを送信するとき、さらに 2 つのことを行う必要があります:
1. (PHP の Trim() 関数を使用して) ユーザー入力データ内の不要な文字 (余分なスペース、タブ、改行) を削除します
2.ユーザー入力データのバックスラッシュを削除します (PHP のtripslashes() 関数経由)
次に、チェック関数を作成します (これは、コードを何度も記述するより効率的です)。
関数に test_input() という名前を付けました。
これで、test_input() 関数を通じて各 $_POST 変数をチェックできます。スクリプトは次のようになります:
例
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>PHP中文网(php.cn)</title> </head> <body> <?php // 定义变量并默认设置为空值 $name = $email = $gender = $comment = $website = ""; if ($_SERVER["REQUEST_METHOD"] == "POST") { $name = test_input($_POST["name"]); $email = test_input($_POST["email"]); $website = test_input($_POST["website"]); $comment = test_input($_POST["comment"]); $gender = test_input($_POST["gender"]); } function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } ?> <h2>PHP 表单验证实例</h2> <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 名字: <input type="text" name="name"> <br><br> E-mail: <input type="text" name="email"> <br><br> 网址: <input type="text" name="website"> <br><br> 备注: <textarea name="comment" rows="5" cols="40"></textarea> <br><br> 性别: <input type="radio" name="gender" value="female">女 <input type="radio" name="gender" value="male">男 <br><br> <input type="submit" name="submit" value="提交"> </form> <?php echo "<h2>您输入的内容是:</h2>"; echo $name; echo "<br>"; echo $email; echo "<br>"; echo $website; echo "<br>"; echo $comment; echo "<br>"; echo $gender; ?> </body>プログラムを実行して確認してください
注: 上記のスクリプトを実行するとき、$_SERVER["REQUEST_METHOD"] を使用してフォームが送信されたかどうかを検出します。 REQUEST_METHOD が POST の場合、フォームが送信され、データが検証されます。フォームが送信されない場合、検証はスキップされ、空白で表示されます。
上記例における入力項目の使用は任意であり、ユーザーが何も入力しなくても正常に表示されます。
次の章では、ユーザーが入力したデータを検証する方法を紹介します。
学び続ける
||123456789101112131415161718192021222324252627<!DOCTYPE HTML><html><head><meta charset="utf-8"><title>PHP.cn</title></head><body><h2>PHP 表单验证实例</h2><form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">名字: <input type="text" name="name" value=""><br>E-mail: <input type="text" name="email" value=""><br>网址: <input type="text" name="website" value=""><br>备注: <textarea name="comment" rows="5" cols="40"></textarea><br>性别:<input type="radio" name="gender" value="female">女<input type="radio" name="gender" value="male">男<br><input type="submit" name="submit" value="提交"></form></body></html>
- おすすめコース
- コースウェアのダウンロード
![]()
初級Imperial CMS エンタープライズ模倣 Web サイトのチュートリアル
3048 人が視聴しています![]()
初級WordPress の基礎がまったくない初心者が個人のブログや企業 Web サイトを構築する
6743 人が視聴しています![]()
初級究極のCMSゼロベースWebサイト構築解説ビデオ
2724 人が視聴しています![]()
初級フロントエンドプロジェクト-Shangyou [HTML/CSS/JS技術総合演習]
3117 人が視聴しています![]()
中級Vue3.0 を 0 から構築してユニバーサル バックエンド管理システム プロジェクトの実践を構築
5351 人が視聴しています![]()
初級ゼロベースフロントエンド講座【Vueの高度な学習と実践】
2821 人が視聴しています![]()
初級WEBフロントエンドチュートリアル【HTML5+CSS3+JS】
3506 人が視聴しています![]()
初級apipost の簡単な紹介
2161 人が視聴しています![]()
中級Vue3+TypeScript 実践チュートリアル - エンタープライズレベルのプロジェクト演習
3208 人が視聴しています![]()
初級PHP でビジネスを始めることについて簡単に説明しましょう
17423 人が視聴しています![]()
中級VUE eコマースプロジェクト(フロントエンド&バックエンドのデュアルプロジェクト実戦)
3828 人が視聴しています![]()
初級Apipost 実用化 [API、インターフェース、自動テスト、モック]
2265 人が視聴しています現時点ではコースウェアはダウンロードできません。現在スタッフが整理中です。今後もこのコースにもっと注目してください〜このコースを視聴した生徒はこちらも学んでいます
フォームの検証ルール 名前 | 電子メール |