Latest web development tutorials
×

PHP コース

PHP コース PHP 簡単な紹介 PHP インストール PHP 文法 PHP 変数 PHP echo/print PHP データの種類 PHP 定数 PHP 文字列 PHP 演算子 PHP If...Else PHP Switch PHP 配列 PHP 配列のソート PHP スーパーグローバル PHP While 循環 PHP For 循環 PHP 関数 PHP マジック変数 PHP 名前空間 PHP オブジェクト指向の

PHP フォーム

PHP フォーム PHP フォーム認証 PHP フォーム - 必要なフィールド PHP フォーム - 確認メールおよびURL PHP 完全なフォームインスタンス PHP $_GET 変数 PHP $_POST 変数

PHP 応用チュートリアル

PHP 多次元配列 PHP 日付 PHP 含みます PHP ファイル PHP ファイルのアップロード PHP Cookie PHP Session PHP E-mail PHP セキュリティ E-mail PHP Error PHP Exception PHP フィルタ PHP 高度なフィルタ PHP JSON

PHP 7 新機能

PHP 7 新機能

PHP データベース

PHP MySQL 簡単な紹介 PHP MySQL 接続 PHP MySQL データベースの作成 PHP MySQL データテーブルを作成します。 PHP MySQL データを挿入 PHP MySQL 複数のデータの挿入 PHP MySQL プリペアドステートメント PHP MySQL データを読みます PHP MySQL WHERE PHP MySQL ORDER BY PHP MySQL UPDATE PHP MySQL DELETE PHP ODBC

PHP XML

XML Expat Parser XML DOM XML SimpleXML

PHP & AJAX

AJAX 簡単な紹介 AJAX PHP AJAX データベース AJAX XML AJAX 実時間探索 AJAX RSS Reader AJAX 投票

PHP リファレンスマニュアル

PHP Array PHP Calendar PHP cURL PHP Date PHP Directory PHP Error PHP Filesystem PHP Filter PHP FTP PHP HTTP PHP Libxml PHP Mail PHP Math PHP Misc PHP MySQLi PHP PDO PHP SimpleXML PHP String PHP XML PHP Zip PHP Timezones PHP 画像処理 PHP RESTful

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()関数。

事前に定義された文字は次のとおりです。

  • &(アンパサンド)になる&#038;
  • "(二重引用符)になります&QUOT;
  • '(シングルクオート)になる&#039;
  • なる&LT <(未満)。
  • >(より大きい)になる&GT;


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/&quot;&gt;&lt;script&gt;alert('hacked')&lt;/script&gt;">

脆弱性の試みは失敗しました!


PHPを使用したフォームデータの検証

まず、ユーザ()関数にデータを提出しているすべてのPHPのはhtmlspecialchars介して処理されます。

私たちははhtmlspecialchars()関数を使用すると、ユーザーは以下のテキストフィールドを提出しようとします:

<script>location.href('http://www.w3big.com')</script>

次のようにHTMLエスケープコードとして保存されますので、コードは、実行されません。

&lt;script&gt;location.href('http://www.w3big.com')&lt;/script&gt;

上記のコードは安全であると表示されたか、ページにメッセージを挿入することができます。

ユーザーがフォームを送信すると、私たちは、次の2つのことを行います:

  1. PHPを使用し、ユーザーの入力データ(:スペース、タブ、改行など)不要な文字を削除するには、()関数をトリミングします。
  2. (\)、ユーザー入力データのバックスラッシュを削除するには、PHPのにstripslashes()関数を使用します

私たち自身の定義の関数で記述されたこれらのフィルタリング機能は、これは非常にコードの再利用性を向上させることができましょう。

test_inputという名前の関数()。

今、私たちは$ _POST、スクリプトコード内の変数のすべてを検出するために()関数をtest_inputすることができ、次のとおりです。

<?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;
}
?>

実行中のインスタンス»

我々はフォームが送信されるか否かを検出するために$ _SERVER [ "REQUEST_METHOD"]により、上記のスクリプトを実行するとことに注意してください。 REQUEST_METHODがPOSTの場合、フォームが提出されます - データが検証されます。 フォームが送信されていない場合は、検証をスキップして、空白が表示されます。

上記の例では、入力項目を使用して、ユーザが任意のデータを正しく表示することができます入力していない場合でも、オプションです。

次のセクションでは、ユーザが入力したデータを検証する方法を説明します。