ホームページ >バックエンド開発 >PHPチュートリアル >PHP を使用して SQL インジェクション攻撃を防ぐ方法

PHP を使用して SQL インジェクション攻撃を防ぐ方法

WBOY
WBOYオリジナル
2023-06-24 10:31:401506ブラウズ

ネットワーク セキュリティの分野では、SQL インジェクション攻撃が一般的な攻撃方法です。悪意のあるユーザーが送信した悪意のあるコードを悪用して、アプリケーションの動作を変更し、安全でない操作を実行します。一般的な SQL インジェクション攻撃には、クエリ操作、挿入操作、削除操作が含まれます。その中で、クエリ操作が最もよく攻撃されており、SQL インジェクション攻撃を防ぐ一般的な方法は PHP を使用することです。

PHP は、Web アプリケーションで広く使用されているサーバー側スクリプト言語です。 PHP は MySQL などのリレーショナル データベースと対話できますが、SQL インジェクション攻撃に対して脆弱でもあります。 SQL インジェクション攻撃を防ぐには、まず SQL インジェクション攻撃の原理を理解する必要があります。

SQL インジェクション攻撃の原理は、SQL クエリ ステートメントの内容の一部または全体を変更することで、予期しない悪意のある動作をさせることです。 SQLインジェクション攻撃は主に「エラーインジェクション」と「ブラインドインジェクション」の2種類に分けられます。 「エラー挿入」では、攻撃者は悪意のあるデータを送信することでサーバーにエラーを返させます。 「ブラインド インジェクション」では、攻撃者は悪意のあるデータを送信して、サーバーの応答が期待どおりかどうかを判断し、それによって必要なデータを徐々に取得します。

次に、PHP を使用して SQL インジェクション攻撃を防ぐ方法を紹介します。

ステップ 1: ユーザー入力のフィルタリング

ユーザー入力のフィルタリングは、SQL インジェクション攻撃を防ぐための最も簡単かつ基本的な方法です。入力をフィルタリングすることで、入力がどの程度信頼できるかが決まります。ユーザー入力のフィルタリングは、PHP の関数を使用して実現できます。

htmlspecialchars() 関数は、Web フォーム入力をフィルタリングするために使用される PHP の関数です。この関数は、ユーザーが入力した HTML 特殊文字 (a8093152e673feb7aba1828c43532094& など) を HTML エンティティ (a8093152e673feb7aba1828c43532094& など) に変換できます。

filter_var() 関数は、次の目的で使用される PHP の関数です。ユーザー入力をフィルターします。この関数は、ユーザー入力が整数であるかどうか、電子メールであるかどうかなどを検証できます。さらに、PHP は、filter_has_var() や filter_input() などの他のフィルター関数も提供します。

ステップ 2: MySQL の代わりに PDO を使用する

PDO は、PHP のデータ アクセス層です。これはさまざまな種類のデータベースにアクセスするために使用され、SQL インジェクション攻撃を防ぐためのいくつかのメカニズムを提供します。 MySQLi とは異なり、PDO はオブジェクト指向のアプローチに基づいて実装されます。 PDO インターフェイスは、パラメーター化されたクエリを明示的に使用して、SQL インジェクション攻撃を防ぐことができます。 PDO を使用する利点の 1 つは、プレースホルダーを指定することで SQL ステートメントをパラメーター化できることです。

次のコード例では、SQL インジェクション攻撃を防ぐために PDO を実装しています。

//连接数据库
$dsn= 'mysql:host=hostname;dbname=databasename;charset=utf8';
$options = array(
   PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,//设置错误模式
   PDO::ATTR_EMULATE_PREPARES => false,//把预处理默认为真
);
try {
   $pdo = new PDO($dsn, $username, $password, $options);
} catch (PDOException $e) {
   print "Error!: " . $e->getMessage() . "<br/>";
   die();
}
//使用PDO进行参数化查询
$stmt = $pdo->prepare('SELECT * FROM user WHERE username = ?');
$stmt->execute(array($_GET['username']));

ステップ 3: mysql_real_escape_string() を使用する

mysql_real_escape_string() 関数は、提供されている PHP 関数の 1 つです。 MySQL による。特殊文字をエスケープすることで SQL インジェクション攻撃を防ぎます。 mysql_real_escape_string() 関数は文字列をトラバースし、'、"、、、
などの特殊文字を安全な同等の形式にエスケープします。 mysql_real_escape_string() 関数を使用する場合は、サーバーとの接続を確立し、ログを記録する必要があります。

最後に、SQL インジェクション攻撃はネットワーク攻撃の非常に一般的な方法であることに注意してください。SQL インジェクション攻撃を防ぐには、常に警戒し、ユーザー入力のフィルタリングなどの効果的な対策を講じる必要があります。 MySQL の代わりに PDO を使用し、mysql_real_escape_string() 関数を使用します。

以上がPHP を使用して SQL インジェクション攻撃を防ぐ方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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