<< 購読者が定めたスケジュール通りに RSS で配信する「feed magazine」 | メイン | HAVING句の力(SQL, HAVING, 関係除算) >>

2006年11月02日

今夜分かるSQLインジェクション対策

oim069-s.jpg
今夜分かるSQLインジェクション対策 - @IT

 Webアプリケーションに対する攻撃手法の1つであるSQLインジェクションの存在は、かなり広く知られるようになった。しかし、その対策はまだ本当に理解されていないように思える。フォームから渡された値の特殊文字をエスケープしたり、PHPのmagic_quotes_gpcといった自動エスケープ機能をオンにするだけで対策したつもりになっていないだろうか。

「SQLインジェクション(injection)」とは、例えば入力フォームなどで特殊な文字列を入力することで、データベースに記録される内容を取り出したり、パスワードを知らずとも不正なログインが可能なセキュリティホールのこと。

その基本的な対策方法について説明されています。基本的に文字コードはEUC、特殊な文字などはきちんとエスケープをしていれば原則、OKです。Perlの場合はbindを用いていれば比較的かんたんに回避できちゃいます。

次の通り。

#-- SQL準備 --#
$sql = qq|select * from table where a=? and b=?|;

#-- SQLをセット --#
$sth = $dbh->prepare($sql);

#-- SQL実行 --#
$sth->execute( $a, $b );

SQL文で「?」となっている部分がexecuteで渡している値へ自動的に置き換わります。文字列の場合はシングルコーテーション(‘’)で囲まれ、まずい値は自動的にエスケープされます。またbindを使っていると、データベースにもよりますが、SQLの解析部分が省略されたりするので、動作も軽くなります。何だか良いことずくめで逆に不安ですか?(;´∀`)

bindは動作を軽くするだけだからSQL文にそのまま変数埋め込んでもいいか、といったことにならないように、お互い気をつけましょう>読んでいる方


○関連
【緊急インタビュー】SQLインジェクション攻撃に気づかない企業は山のようにある
http://itpro.nikkeibp.co.jp/free/NPC/NEWS/20050706/164102/

SQLインジェクション再現デモムービー
http://phpspot.org/blog/archives/2006/07/sql_2.html

セキュアDBプログラミング:SQL組み立て時の引数チェック
http://www.ipa.go.jp/security/awareness/vendor/programming/a02_01_main.html




ハッカーズ その侵入の手口 奴らは常識の斜め上を行く
ケビン・ミトニック ウィリアム・サイモン 峯村 利哉
インプレスジャパン

カテゴリー:DB

この記事のURL | コメントを書く・読む (0) | トラックバック (0) | このエントリーを含むはてなブックマーク livedoorクリップ


トラックバック

このエントリーのトラックバックURL:

※言及リンク(このページへのリンク)のないトラックバックは自動的に削除されます。詳しい経緯はコチラ

コメント一覧

コメントしてみる




保存しますか?

(書式を変更するような一部のHTMLタグを使うことができます)


※英数字のみの投稿は自動的にはじかれます。
 
PAGE TOP