「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > PDO は SQL インジェクションから MySQL アプリケーションをどのように保護できますか?

PDO は SQL インジェクションから MySQL アプリケーションをどのように保護できますか?

2024 年 11 月 20 日に公開
ブラウズ:351

How Can PDO Safeguard Your MySQL Applications from SQL Injection?

MySQL プリペアド ステートメント: PDO によるデータ セキュリティの確保

MySQL アプリケーションのエスケープ関数と SQL インジェクションの脆弱性について懸念していますか? MySQL のプリペアド ステートメント機能は利用できない場合がありますが、セキュリティを犠牲にする必要があるというわけではありません。

PDO: 安全な代替手段

PHP データ オブジェクト ( PDO) は、データベースと対話するための一貫したインターフェイスを提供する強力なライブラリです。 PDO を使用すると、MySQL データベースに接続し、すべてのデータベース入力をテキスト文字列として扱うことができるため、手動でエスケープする必要がなくなります。

PDO を使用した MySQL への接続

To PDO の使用を開始し、次のようなデータベース オブジェクトを作成します:

$db = new PDO("mysql:host=[hostname];dbname=[database]", '[username]', '[password]');

文字エンコーディングを UTF-8 に設定します:

$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES utf8");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->exec('SET NAMES utf8');

プリペアド ステートメントの実行

データベース オブジェクトが確立されたので、プリペアド ステートメントを実行できるようになります:

  • クエリを選択:
$id = 1;
$q = $db->prepare('SELECT * FROM Table WHERE id = ?');
$q->execute(array($id));
  • 更新クエリ:
$q = $db->prepare('UPDATE Table SET Column_1 = ?, Column_2 = ? WHERE id = ?');
$q->execute(array('Value for Column_1', 'Value for Column_2', $id));
  • ワイルドカード検索:
$search = 'John';
$q = $db->prepare('SELECT * FROM Table WHERE Column_1 LIKE ?');
$q->execute(array('%'.$search.'%'));

結論

PDO と準備されたステートメントを使用することで、 SQL インジェクションのリスクを軽減することで、MySQL アプリケーションのセキュリティを強化します。シンプルなインターフェイスと堅牢なセキュリティ機能を備えた PDO は、データベースを悪意のある攻撃から保護するために不可欠なツールです。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3