ホームページ >バックエンド開発 >PHPチュートリアル >PHP フォーム フィルタリング: SQL インジェクションの防止とフィルタリング

PHP フォーム フィルタリング: SQL インジェクションの防止とフィルタリング

WBOY
WBOYオリジナル
2023-08-07 15:49:442371ブラウズ

PHP フォーム フィルタリング: SQL インジェクションの防止とフィルタリング

PHP フォーム フィルタリング: SQL インジェクションの防止とフィルタリング

はじめに:

インターネットの急速な発展に伴い、Web アプリケーションの開発はますます一般的になってきています。 Web 開発では、フォームはユーザー対話の最も一般的な方法の 1 つです。ただし、フォーム送信データの処理にはセキュリティ上のリスクがあります。その中でも、最も一般的なリスクの 1 つは SQL インジェクション攻撃です。

SQL インジェクション攻撃は、Web アプリケーションを使用してユーザー入力データを不適切に処理し、攻撃者が不正なデータベース クエリを実行できるようにする攻撃方法です。攻撃者は、悪意のある SQL コードを入力ボックスに挿入することで、データベース内のデータを取得、変更、削除、さらには破壊することができます。

SQL インジェクション攻撃を防ぐには、ユーザー入力データを適切にフィルタリングして処理する必要があります。以下では、一般的に使用される PHP フォームのフィルタリング方法をいくつか紹介し、対応するコード例を示します。

  1. 文字列フィルタリング

文字列フィルタリングは、最も一般的なフォーム フィルタリング方法の 1 つです。 PHP の組み込み関数または正規表現を使用すると、一部の特殊文字やキーワードをフィルタリングして、ユーザーが悪意のあるコードを入力するのを防ぐことができます。

1.1 PHP の組み込み関数を使用した文字列フィルタリング

サンプル コード:

$name = $_POST['name'];
$filtered_name = filter_var($name, FILTER_SANITIZE_STRING);

上の例では、filter_var 関数とFILTER_SANITIZE_STRING オプション。このオプションは、元の文字列内の特殊文字をフィルターで除外します。

1.2 正規表現を使用した文字列フィルタリング

サンプル コード:

$email = $_POST['email'];
$filtered_email = preg_replace('/[^a-zA-Z0-9@.]/', '', $email);

上の例では、preg_replace 関数と正規表現を使用して大文字と小文字を削除します。 than 、数字、@ および . は空の文字列に置き換えられます。このようにして、一部の特殊文字をフィルタリングして、ユーザーが入力した電子メール アドレスが正当なものであることを確認できます。

  1. 数値フィルタリング

数値フィルタリングは、ユーザーが入力した数値データをフィルタリングして、その正当性を確保するために使用されます。

2.1 PHP の組み込み関数を使用した数値フィルタリング

サンプル コード:

$age = $_POST['age'];
$filtered_age = filter_var($age, FILTER_SANITIZE_NUMBER_INT);

上の例では、filter_var 関数とFILTER_SANITIZE_NUMBER_INT オプション。このオプションは、元の値から数値以外の文字を除外します。

2.2 数値フィルタリングに正規表現を使用する

サンプル コード:

$price = $_POST['price'];
$filtered_price = preg_replace('/[^0-9.]/', '', $price);

上の例では、preg_replace 関数と正規表現を使用して、数値と数値を除く数値をフィルタリングします。文字列の外側の文字は空の文字列になります。このようにして、一部の特殊文字を除外し、ユーザーが入力した価格が正当なものであることを確認できます。

  1. SQL インジェクションの防止

ユーザーが入力したデータをフィルタリングすることに加えて、SQL インジェクション攻撃を防ぐためにいくつかのセキュリティ対策を講じる必要もあります。

3.1 プリペアド ステートメントの使用

サンプル コード:

$stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username AND password = :password');
$stmt->bindParam(':username', $username);
$stmt->bindParam(':password', $password);
$stmt->execute();

上の例では、PDO のプリペアド ステートメントを使用してデータベース クエリを実行します。バインディング パラメーターを使用すると、ユーザーが入力したデータをクエリに直接結合することを回避できるため、SQL インジェクション攻撃を効果的に防止できます。

結論:

Web 開発において、フォームはユーザーとの対話の非常に重要な方法です。ただし、フォーム データの処理中は、SQL インジェクション攻撃に対して細心の注意を払う必要があります。合理的なデータ フィルタリングとプリペアド ステートメントの使用により、ユーザーが入力したデータが合法であることを保証し、SQL インジェクション攻撃を効果的に防止できます。この記事が、PHP フォームのフィルタリングと SQL インジェクションの防止を理解するのに役立つことを願っています。

参考:

  1. PHP: filter_var - マニュアル (未確認) https://www.php.net/manual/en/function.filter-var.php から取得
  2. PHP: preg_replace - マニュアル (未確認) https://www.php.net/manual/en/function.preg-replace.php
  3. SQL インジェクションから取得。(未確認) ). https://www.owasp.org/index.php/SQL_Injection
から取得

以上がPHP フォーム フィルタリング: SQL インジェクションの防止とフィルタリングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。