ホームページ  >  記事  >  バックエンド開発  >  PHP は安全なプログラミングを実装します: SQL インジェクションと防御

PHP は安全なプログラミングを実装します: SQL インジェクションと防御

王林
王林オリジナル
2023-06-18 10:37:281144ブラウズ

PHP を使用した安全なプログラミング: SQL インジェクションと防御

現在、インターネットは活況を呈しており、Web サイトやアプリケーションの人気はますます高まっています。これに伴い、セキュリティ上の脅威も増大しています。最も一般的な攻撃手法の 1 つは SQL インジェクションです。 SQL インジェクション攻撃は、入力データを使用して SQL コマンドを変更または改ざんし、バックエンド データベースの内容にアクセス、変更、削除します。この記事では、SQL インジェクション攻撃の原理と防御策、および PHP で安全なプログラミングを実装する方法を紹介します。

SQL インジェクション攻撃の原理:

SQL インジェクション攻撃の原理は非常に単純です。攻撃者は元のデータを悪意のある悪意のあるデータで上書きし、それによってデータ処理プロセスを妨害し、破壊します。 SQL クエリは通常、ユーザーが入力したデータに基づいてプログラムによって構築されるため、攻撃者は入力に特殊文字を追加して、攻撃者が望む結果にクエリを変更する可能性があります。

以下は簡単なサンプル コードです:

$user = $_POST['user'];
$password = $_POST['password'];

//查询用户是否存在
$sql = "SELECT * FROM users WHERE username='$user' AND password='$password'";
$result = mysqli_query($conn, $sql);

攻撃者が次のコードを入力した場合:

' OR '1'='1

、構築される SQL クエリ ステートメントは次のようになります:

SELECT * FROM users WHERE username='' OR '1'='1' AND password=''

これにより、クエリ ステートメントは常に true 値を返すようになり、攻撃者が認証をバイパスしてデータベースの内容にアクセス、変更、または削除できるようになります。

防御手段:

SQL インジェクション攻撃を防御するにはさまざまな方法があります。一般的に使用される手段の一部を次に示します:

  1. プリペアド ステートメントを使用する:

準備されたステートメントは、SQL インジェクション攻撃を防ぐ効果的な方法です。プリペアド ステートメントは、プレースホルダーを使用してクエリ ステートメント内の変数を置き換えます。これらのプレースホルダーはプログラムによって自動的にエスケープされ、データがチェックされます。

次は、プリペアド ステートメントを使用したサンプル コードです:

$user = $_POST['user'];
$password = $_POST['password'];

//使用预处理语句查询用户是否存在
$stmt = $conn->prepare("SELECT * FROM users WHERE username=? AND password=?");
$stmt->bind_param("ss", $user, $password);
$stmt->execute();
$result = $stmt->get_result();
  1. ユーザー入力のフィルタリング:

ユーザー入力データを読み取って操作する前に、次のことを行う必要があります。フィルタリングされ、検証されました。 htmlspecialchars() や mysqli_real_escape_string() などの PHP の組み込み関数を使用して、ユーザー入力をフィルタリングできます。

以下は、mysqli_real_escape_string() 関数を使用してユーザー入力をフィルターするサンプル コードです。

$user = mysqli_real_escape_string($conn, $_POST['user']);
$password = mysqli_real_escape_string($conn, $_POST['password']);

//查询用户是否存在
$sql = "SELECT * FROM users WHERE username='$user' AND password='$password'";
$result = mysqli_query($conn, $sql);
  1. ユーザー入力を最小限に抑える:

ユーザーがデータを入力する必要があるため、SQL インジェクション攻撃のリスクを軽減できます。フォームのデフォルト値、ドロップダウン メニュー、ラジオ ボタンなどを使用してユーザー入力を減らし、ユーザーの入力長を制限することもできます。

実際のアプリケーションでは、ユーザー入力データのフィルタリングや検証にデータベース関連の関数を使用しないことをお勧めします。これらの機能はデータベースのロックやその他の問題により失敗し、セキュリティの脆弱性につながる可能性があるためです。

結論:

SQL インジェクション攻撃は、短期間に重大な結果を引き起こす可能性がある一般的なネットワーク攻撃手法です。ただし、SQL インジェクション攻撃は、プリペアド ステートメントを使用し、ユーザー入力をフィルタリングし、ユーザー入力を最小限に抑えることで効果的に防御できます。常に警戒し、常に知識を更新することで、オンラインの安全を保ちます。

以上がPHP は安全なプログラミングを実装します: SQL インジェクションと防御の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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