ホームページ データベース mysql チュートリアル 準備されたステートメントとパラメーター化されたクエリは、PHPアプリケーションでのSQL注入をどのように防ぐことができますか?

準備されたステートメントとパラメーター化されたクエリは、PHPアプリケーションでのSQL注入をどのように防ぐことができますか?

Jan 25, 2025 pm 10:22 PM

How Can Prepared Statements and Parameterized Queries Prevent SQL Injection in PHP Applications?

はじめに

SQLインジェクションは、SQLクエリ内のユーザー入力を処理するアプリケーションにとって重要な脅威のままです。 攻撃者は脆弱性を活用して悪意のあるコマンドを注入し、データベース全体を侵害する可能性があります。この記事では、PHPでのSQL注入を防ぐための堅牢な方法について詳しく説明しています。

SQL注入脅威を理解する

未検証のユーザー入力がSQLクエリに直接影響する場合、SQLインジェクションエクスプロイトが発生します。 たとえば、

のような悪意のあるコードが含まれている場合、データベースはこの破壊的なコマンドを実行します。

$userInput = $_POST['user_input'];
mysql_query("INSERT INTO users (username) VALUES ('$userInput')");
ログイン後にコピー
効果的な予防戦略

$userInput '; DROP TABLE users; --

1。 準備されたステートメントとパラメーター化されたクエリ:防衛の礎

コア原則は、SQLクエリ構造からデータを分離することです。準備されたステートメント(またはパラメーター化されたクエリ)は、次のことでこれを達成します

クエリ/データ分離:データベースサーバーは、データ値とは独立してSQLクエリを解析します。 文字列としてのデータ:

データ:すべてのデータは、悪意のあるSQLコードを中和する文字通り文字列として扱われます。

PDO(PHPデータオブジェクト)を使用する

    :推奨されるアプローチ
  • PDOは、異なるデータベースシステム全体で一貫したインターフェイスを提供します。 準備されたステートメントでPDOを使用する方法は次のとおりです
  • mysqli(mysqlの改善):mysql
  • の代替
mysqliは、パラメーター化されたクエリを実行する2つの方法を提供します:

(php 8.2以降):

$stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name');
$stmt->execute(['name' => $name]);

foreach ($stmt as $row) {
    // Process each row
}
ログイン後にコピー

および

execute_query()2。 データベース接続のベストプラクティス

$result = $db->execute_query('SELECT * FROM employees WHERE name = ?', [$name]);
while ($row = $result->fetch_assoc()) {
    // Process each row
}
ログイン後にコピー

pdo:prepare() execute()最適なセキュリティのためにエミュレートされた準備されたステートメントを無効にします:

$stmt = $db->prepare('SELECT * FROM employees WHERE name = ?');
$stmt->bind_param('s', $name); // 's' denotes a string parameter
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
    // Process each row
}
ログイン後にコピー

mysqli:

堅牢なエラー報告を有効にして、文字セットを指定します:

3。 追加のセキュリティ上の考慮事項

$dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
ログイン後にコピー

ダイナミッククエリ:準備されたステートメントがデータパラメーターを処理する間、クエリ構造自体をパラメーター化することはできません。動的クエリの場合、許可された値を制限するためにホワイトリストを使用してください

結論

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$dbConnection = new mysqli('localhost', 'username', 'password', 'database');
$dbConnection->set_charset('utf8mb4');
ログイン後にコピー
準備されたステートメントを実装し、データベース接続のフォローするベストプラクティスは、SQLインジェクションからPHPアプリケーションを保護するために重要です。 SQLクエリ内のデータ分離の優先順位付けにより、データベースの整合性とアプリケーションセキュリティが保証されます。

以上が準備されたステートメントとパラメーター化されたクエリは、PHPアプリケーションでのSQL注入をどのように防ぐことができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

DockerでのMySQLメモリの使用を減らします DockerでのMySQLメモリの使用を減らします Mar 04, 2025 pm 03:52 PM

DockerでのMySQLメモリの使用を減らします

Alter Tableステートメントを使用してMySQLのテーブルをどのように変更しますか? Alter Tableステートメントを使用してMySQLのテーブルをどのように変更しますか? Mar 19, 2025 pm 03:51 PM

Alter Tableステートメントを使用してMySQLのテーブルをどのように変更しますか?

mysqlの問題を解決する方法共有ライブラリを開くことができません mysqlの問題を解決する方法共有ライブラリを開くことができません Mar 04, 2025 pm 04:01 PM

mysqlの問題を解決する方法共有ライブラリを開くことができません

Linuxでmysqlを実行します(phpmyAdminを使用してポッドマンコンテナを使用して/なし) Linuxでmysqlを実行します(phpmyAdminを使用してポッドマンコンテナを使用して/なし) Mar 04, 2025 pm 03:54 PM

Linuxでmysqlを実行します(phpmyAdminを使用してポッドマンコンテナを使用して/なし)

sqliteとは何ですか?包括的な概要 sqliteとは何ですか?包括的な概要 Mar 04, 2025 pm 03:55 PM

sqliteとは何ですか?包括的な概要

MACOSで複数のMySQLバージョンを実行する:ステップバイステップガイド MACOSで複数のMySQLバージョンを実行する:ステップバイステップガイド Mar 04, 2025 pm 03:49 PM

MACOSで複数のMySQLバージョンを実行する:ステップバイステップガイド

人気のあるMySQL GUIツール(MySQL Workbench、PhpMyAdminなど)は何ですか? 人気のあるMySQL GUIツール(MySQL Workbench、PhpMyAdminなど)は何ですか? Mar 21, 2025 pm 06:28 PM

人気のあるMySQL GUIツール(MySQL Workbench、PhpMyAdminなど)は何ですか?

MySQL接続用のSSL/TLS暗号化を構成するにはどうすればよいですか? MySQL接続用のSSL/TLS暗号化を構成するにはどうすればよいですか? Mar 18, 2025 pm 12:01 PM

MySQL接続用のSSL/TLS暗号化を構成するにはどうすればよいですか?

See all articles