re:キケンなSQLインジェクション

ネタ元:キケンなSQLインジェクション

SQLインジェクション対策へのアプローチとしては正しいのだけど、1点だけ気になる点が。。。

もし、悪いやつが「";DELETE FROM geekDB;」なんて入力したら、なんとデータが消えてしまうΣ(゚Д゚)

実はこれではDBのデータを消すことはできない。

$sql="select * from geekDB where id = " . $id;
$result = mysql_query($sql); 

mysql_query関数は複合クエリに対応していない為、SQL文中にセミコロンが入っている時点でエラーになります。

ですので、元のコードに少なくとも複合クエリに関するSQLインジェクションは含まれていないです。

ただ、これがpg_queryだったりsqlite_query、mysqli_queryだった場合は深刻な脆弱性になるので、クエリを実行する前にチェックだったりサニタイズだったりが必要になります。

mysql_queryの場合はチェックが要らないって言ってるわけではないですよ。念のため。


ちなみに私だと以下のように書くかな。

$sql="select * from geekDB where id = '" . mysql_real_escape_string($id)."'";
$result = mysql_query($sql); 

ただし、

if(!is_numeric($id))exit;
$sql="select * from geekDB where id = " . $id;
$result = mysql_query($sql); 

のほうが速そうだけど。(マクロなレベルで)

関連エントリー

PHPサイバーテロの技法―攻撃と防御の実際
絶対に公開してはいけないPHPプログラミング
ふつうのリロード対策
WEBデザイナーの為のXSS(クロスサイトスクリプティング)入門

スポンサードリンク

«CSSのレイアウトテクニック - Faux Absolute Positioning | メイン | [Re:Creator's Party Kansai]クリックの操作 - jQueryによるJavaScript入門»