FuelPHP

【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

-FuelPHP