【FuelPHP】 DB::query()だけ注意!SQLインジェクション対策にプレースホルダを使おう
データ参照したいけど、手軽に作ってしまいたい時はあります。しかしながらSQLインジェクション対策は必要。
Query Builderを使った場合はエスケープしてくれますが、DB::query()だけは注意する必要があります。
■SQL インジェクションとは
SQL インジェクションとは、Webアプリケーションのリクエストパラメーターに、「不正な SQL 文」を含めてリクエストを送信し、本来の処理とは異なる命令をデータベースに実行させることができる脆弱性のことです。
SQL インジェクションは、Webアプリケーションの脆弱性の中でも深刻なもので、発見されたら早急に対応が必要です。具体的な被害には以下のようなものがあります。
個人情報などの重要情報の漏洩
不正なログイン
データベースの改ざん
OSコマンドの実行
サーバーの乗っ取り
(引用:https://www.websec-room.com/2013/03/03/365)
恐ろしい、対策しなくてはいけません。。
その対策方法は、プレースホルダです。
■プレースホルダ利用前(NG例)
\DB::query('select * from hoge_table where id=' . $id)->execute();
こういう書き方だとアウト。乗っ取りの可能性あります。
■プレースホルダ利用後(OK例)
$w_id = $id; // 割り当てたい変数をセット
$sql = "SELECT id, name FROM hoge_table WHERE id= :id"; // 実行したいクエリ
$result = DB::query($sql)->bind('id', $w_id)->execute();
このように変数を外だしして、バインドさせることで安全になります。
Warning: Undefined variable $postID in /home/foodheart/flashbuilder-job.com/public_html/wp-content/themes/stingerplus/single.php on line 87