⊗ppSpPDQu 58 of 83 menu

PDOにおけるPHPクエリの問題点

ご存知の通り、SQLクエリは SQLインジェクションの危険にさらされています。PDO拡張モジュールは インジェクション対策を目的としていますが、 デフォルトでは自動的には行いません。

例を用いてこの問題を見てみましょう。 変数が挿入される次のようなクエリがあるとします。

<?php $sql = "SELECT * FROM users WHERE id=$id"; $res = $pdo->query($sql); ?>

この変数が外部から、例えばGETパラメータから 来ると仮定します。 しかし、簡単にするために、 手動でその値を設定しましょう。 例えば次のような数値が 期待されます。

<?php $id = 1; ?>

しかし、悪意のあるハッカーは (フィールドroleがあると仮定して) 次のような値を渡す可能性があります。

<?php $id = '-1 OR role="admin"'; ?>

つまり、私たちが意図したクエリは以下の通りです。

<?php $sql = "SELECT * FROM users WHERE id=1"; $res = $pdo->query($sql); ?>

しかし、実際に得られたクエリは サイトの管理者を取得する以下のものになってしまいます。

<?php $sql = "SELECT * FROM users WHERE id=-1 OR role="admin""; $res = $pdo->query($sql); ?>

このような状況を避けるため、PDOには プリペアドステートメントと呼ばれる 特別なメカニズムが用意されています。 それについては次のレッスンで詳しく見ていきます。

意図的にあなたのデータベースに対して SQLインジェクションを実行してみてください。

日本語
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItalianoქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
当サイトでは、サイトの動作、分析、パーソナライゼーションのためにクッキーを使用しています。 データ処理はプライバシーポリシーに従って行われます。
すべて受け入れる 設定 拒否