PHPフォームの検証
この章では、クライアント検証が提出した当社のPHPのフォームデータを使用する方法について説明します。
PHPフォームの検証
PHPのフォームに対処する上で、私たちは、セキュリティを考慮する必要があります。 この章では、我々は、フォームデータの検証を確保する必要がハッカーやスパムを防止するために、あなたのPHPフォーム処理データのセキュリティが表示されます。 |
このセクションで説明するHTMLフォームには、次の入力フィールドが含まれています。オプションのテキストフィールド、ラジオボタンで使用され、ボタンを提出する必要があります。
次のようにフォームの上に検証ルールは以下のとおりです。
フィールド | 検証ルール |
---|---|
名前 | 必要があります。 +文字だけ、スペースを含めます |
Eメール | 必要があります。 +有効なメールアドレスでなければなりません( '@'を含むと '。') |
サイト | 必要があります。 存在する場合、それは有効なURLを含める必要があります |
発言 | 必要があります。 複数行入力フィールド(テキストフィールド) |
ジェンダー | 必要があります。 あなたが選択する必要があります |
まず、私たちは単純なHTMLフォームのコードを見てみましょう:
テキスト領域
「名前」、「Eメール」、および「URL」フィールドはテキスト入力要素である、「ノート」フィールドはテキストエリアです。 HTMLコードを次のように
“名字”: <input type="text" name="name"> E-mail: <input type="text" name="email"> 网址: <input type="text" name="website"> 备注: <textarea name="comment" rows="5" cols="40"></textarea>
ラジオボタン
「性別」フィールドはラジオボタンで、HTMLコードは次のようになります。
性别: <input type="radio" name="gender" value="female">女 <input type="radio" name="gender" value="male">男
フォーム要素
HTMLフォームのコードを次のように
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
データを送信するために、このフォームメソッド= "ポスト"メソッドを使用します。
$ _SERVER [ "PHP_SELF"]変数とは何ですか? $ _SERVERは、[ "PHP_SELF"]は、スーパーグローバル変数であるドキュメントルートに関連付けられている現在実行中のスクリプトのファイル名を返します。 |
だから、$ _SERVER [ "PHP_SELF"]は代わりに別のページにジャンプするの、現在のページにフォームデータを送信します。
htmlspecialchars()メソッドとは何ですか? HTMLエンティティにいくつかの事前定義された文字はhtmlspecialchars()関数。 事前に定義された文字は次のとおりです。
|
PHPフォームはどこに注意を引き起こすのに必要な?
$ _SERVER [ "PHP_SELF"]変数がハッカーによって使用することができました!
ハッカー攻撃にクロスサイトスクリプティングのHTTPリンクを使用して、$ _ SERVER [ "PHP_SELF"]は、変数は、サーバースクリプトに移植されたとき。 その理由は、クロスサイトスクリプティングの実行可能ファイルが背後のパスに接続されているので、$ _SERVER [ "PHP_SELF"]文字列はJavaScriptコードの背後にあるHTTPのリンクが含まれているということです。
XSSはまた、CSS(クロスサイトスクリプト)、クロスサイトスクリプティング攻撃として知られています。 ユーザーがページを閲覧した場合、悪意のある攻撃者は、htmlコードに悪意のあるWebページを挿入するために、htmlコード内に埋め込まれたWebは、悪意のあるユーザーの特定の目的を達成するために実行されます。 |
「test_form.php "という名前の次の形式ファイルを指定します。
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
次のように変更されている上記のコードに示すように、今、私たちは、指定されたアドレス「test_form.php」を提出するURLを使用します。
<form method="post" action="test_form.php">
とても良い行います。
ただし、アカウントにユーザーを取ることは、ブラウザのアドレスバーに次のアドレスを入力します:
http://www.w3big.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E
上記のURLは、次のコードとして解釈して実行されます。
<form method="post" action="test_form.php/"><script>alert('hacked')</script>
スクリプトタグのコードを追加し、アラートコマンドを追加します。 ページがロードされるJavaScriptコードを実行する場合(ユーザーがポップアップ表示されます)。 これはPHP_SELF変数がハッカーによって使用される例示するだけの簡単な例です。
任意のJavaScriptコードは、<スクリプト>タグに追加することができることに注意してください! ハッカーは、コードがユーザのグローバル変数やフォームデータを取得するように変更することができ、悪意のあるコードを保護するために、別のページ上のサーバーにリダイレクトするページ・コード・ファイルをこのページを使用することができます。
どのように$ _SERVER [ "PHP_SELF"]悪用さを避けるために?
悪用されるのを避けるためにはhtmlspecialchars()関数での$ _SERVER [ "PHP_SELF"]。
次のようにコードを形成します:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
HTMLエンティティにいくつかの事前定義された文字はhtmlspecialchars()。 ユーザーがPHP_SELF変数を使用したい場合は、次のように今、結果が出力されます。
<form method="post" action="test_form.php/"><script>alert('hacked')</script>">
脆弱性の試みは失敗しました!
PHPを使用したフォームデータの検証
まず、ユーザ()関数にデータを提出しているすべてのPHPのはhtmlspecialchars介して処理されます。
私たちははhtmlspecialchars()関数を使用すると、ユーザーは以下のテキストフィールドを提出しようとします:
<script>location.href('http://www.w3big.com')</script>
次のようにHTMLエスケープコードとして保存されますので、コードは、実行されません。
<script>location.href('http://www.w3big.com')</script>
上記のコードは安全であると表示されたか、ページにメッセージを挿入することができます。
ユーザーがフォームを送信すると、私たちは、次の2つのことを行います:
- PHPを使用し、ユーザーの入力データ(:スペース、タブ、改行など)不要な文字を削除するには、()関数をトリミングします。
- (\)、ユーザー入力データのバックスラッシュを削除するには、PHPのにstripslashes()関数を使用します
私たち自身の定義の関数で記述されたこれらのフィルタリング機能は、これは非常にコードの再利用性を向上させることができましょう。
test_inputという名前の関数()。
今、私たちは$ _POST、スクリプトコード内の変数のすべてを検出するために()関数をtest_inputすることができ、次のとおりです。
例
// 定义变量并默认设置为空值
$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;
}
?>
実行中のインスタンス»
我々はフォームが送信されるか否かを検出するために$ _SERVER [ "REQUEST_METHOD"]により、上記のスクリプトを実行するとことに注意してください。 REQUEST_METHODがPOSTの場合、フォームが提出されます - データが検証されます。 フォームが送信されていない場合は、検証をスキップして、空白が表示されます。
上記の例では、入力項目を使用して、ユーザが任意のデータを正しく表示することができます入力していない場合でも、オプションです。
次のセクションでは、ユーザが入力したデータを検証する方法を説明します。