最新のWeb開発のチュートリアル
×

PHP チュートリアル

PHP HOME PHP イントロ PHP インストール PHP 構文 PHP 変数 PHP エコー/印刷 PHP データの種類 PHP ストリング PHP 定数 PHP 演算子 PHP If...Else...Elseif PHP Switch PHP whileループ PHP Forループ PHP 機能 PHP 配列 PHP 配列のソート PHP スーパーグローバル

PHP 取り扱い

PHP フォーム 取り扱い PHP フォーム 検証 PHP フォーム 必須 PHP フォーム URL/E-mail PHP フォーム コンプリート

PHP 高度な

PHP 多次元配列 PHP 日時 PHP 含めます PHP ファイル 取り扱い PHP ファイル オープン/読みます PHP ファイル 作成/書きます PHP ファイル アップロード PHP Cookies PHP Sessions PHP フィルター PHP Filters 高度な PHP エラー 取り扱い PHP 例外

MySQL Database

MySQL データベース MySQL 接続 MySQL Create DB MySQL Create 表 MySQL Insert Data MySQL 最後のIDを取得します MySQL 複数の挿入 MySQL Prepared MySQL Select Data MySQL Delete Data MySQL Update Data MySQL Limit Data

PHP - XML

PHP XML パーサー PHP SimpleXML Parser PHP SimpleXML - Get PHP XML Expat PHP XML DOM

PHP - AJAX

AJAX イントロ AJAX PHP AJAX データベース AJAX XML AJAX ライブ検索 AJAX RSSリーダー AJAX 世論調査

PHP Examples

PHP 例 PHP クイズ PHP 証明書

PHP 参照

PHP アレイ PHP カレンダー PHP 日付 PHP ディレクトリ PHP エラー PHP ファイルシステム PHP フィルタ PHP FTP PHP HTTP PHP Libxml PHP 郵便物 PHP 数学 PHP その他 PHP MySQLiを PHP SimpleXML PHP 文字列 PHP XML PHP Zip PHP 時間帯

 

PHP 5フォームバリデーション


これと次の章では、フォームデータを検証するためにPHPを使用する方法を示しています。


PHPフォームのバリデーション

PHPのフォームを処理する際に、セキュリティを考えてみて!

これらのページは、セキュリティを考慮してPHPのフォームを処理する方法を示します。 フォームデータの適切な検証はハッカーやスパマーからフォームを保護することが重要です!

必須およびオプションのテキストフィールド、ラジオボタン、および送信ボタン:私たちはこれらの章でで働くことになりますHTMLフォームは、さまざまな入力フィールドが含まれています。

次のようにフォームの検証規則は上記のとおりです。

フィールド 検証ルール
必須。 +のみ文字と空白文字が含まれている必要があり
Eメール 必須。 +有効なメールアドレスが含まれている必要があります(with @ and .)
ウェブサイト 任意。 存在する場合、それは有効なURLが含まれている必要があります
コメント 任意。 複数行の入力フィールド(textarea)
性別 必須。 いずれかを選択しなければなりません

まず、フォームのプレーンなHTMLコードを見ていきます。


テキストフィールド

名前、電子メール、およびWebサイトのフィールドは、テキスト入力要素であり、コメント欄には、テキストエリアです。 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

フォーム要素

フォームのHTMLコードは次のようになります。

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

フォームが送信されると、フォームデータは、メソッド=「ポスト」で送信されます。

$ _SERVER [ "PHP_SELF"]変数とは何ですか?

$ _SERVER [「PHP_SELF」]は、現在実行中のスクリプトのファイル名を返すスーパーグローバル変数です。

だから、$の_SERVER [「PHP_SELF」]は代わりに別のページにジャンプする、ページ自体に送信されたフォームデータを送信します。 この方法では、ユーザーがフォームと同じページにエラーメッセージが表示されます。

何でhtmlspecialchars()関数は?

htmlspecialchars()関数は、HTMLエンティティに特殊文字を変換します。 これは、<と>と&LTのようなHTMLの文字を置換することを意味します。 そして&GT ;. これは、HTMLやJavascriptのコード注入することにより、コードを悪用する攻撃者を防ぐ(Cross-site Scripting attacks)形で。


PHPフォームのセキュリティ上のビッグ注意

の$ _SERVER [「PHP_SELF」]変数ハッカーによって使用することができます!

PHP_SELFがあなたのページで使用されている場合、ユーザーはスラッシュ入力することができます(/)その後、いくつかのクロスサイトスクリプティング(XSS)実行するコマンドを。

クロスサイトスクリプティング(XSS)通常のWebアプリケーションで見つかったコンピュータセキュリティの脆弱性の種類です。 XSSは、他のユーザーが閲覧するWebページにクライアント側のスクリプトを注入する攻撃を可能にします。

私たちは、名前のページに次の形式があるとし"test_form.php"

<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">

ユーザーのようなアドレスバーに通常のURL入力した場合さて、 "http://www.example.com/test_form.php" 、上記のコードはに変換されます。

<form method="post" action="test_form.php">

ここまでは順調ですね。

ただし、ユーザーがアドレスバーに次のURLを入力することを検討してください。

http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E

この場合、上記のコードは、に変換されます。

<form method="post" action="test_form.php/"><script>alert('hacked')</script>

このコードは、スクリプトタグと警告コマンドが追加されます。 そして、ページのロード時には、JavaScriptのコードが実行されます(the user will see an alert box) 。 これは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/&quot;&gt;&lt;script&gt;alert('hacked')&lt;/script&gt;">

ザ・は試みが失敗したエクスプロイト、および害は行われません!


PHPでフォームデータを検証

私たちが行いますまず最初に、PHPのを介してすべての変数を渡すことですhtmlspecialchars()関数。

我々は、使用している場合htmlspecialchars()関数。 その後、ユーザーがテキストフィールドに以下の提出しようとした場合:

<スクリプト>場所。 href('http://www.hacked.com') </スクリプト>

- HTMLはこのように、コードをエスケープとして、それが保存されるため、これは、実行されないでしょう。

&LT;スクリプト&GT;位置。 href('http://www.hacked.com') &LT; /スクリプト&GT。

コードはページまたは電子メール内に表示されても安全です。

ユーザーがフォームを送信するとき我々はまた、2つのことが起きます。

  1. ストリップ不要な文字(extra space, tab, newline)ユーザ入力データから(with the PHP trim()機能)
  2. バックスラッシュ削除(\)ユーザ入力データから(with the PHP stripslashes()関数)

次のステップは、私たちのために、すべてのチェックを行います関数で作成することである(which is much more convenient than writing the same code over and over again)

私たちは、関数名になるtest_input()

今、私たちがして、各$ _POST変数を確認することができますtest_input()関数で、スクリプトは次のようになります。

<?php
// define variables and set to empty values
$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の場合は、フォームが送信されました - そしてそれは検証する必要があります。 それが提出されていない場合は、検証をスキップし、空白のフォームを表示します。

しかしながら、上記の例では、すべての入力フィールドはオプションです。 このスクリプトは、ユーザーが任意のデータを入力しない場合でも正常に動作します。

次のステップは、必要な入力フィールドを作成し、必要な場合は、エラーメッセージを作成することです。