SQLインジェクション
SQLインジェクションというクラッキング手法について。参照:SQLインジェクション - Wikipedia
例えば、
select * from database where id = '(ユーザ入力)';
というSQL文があり、ユーザは自分のidを入力してdatabaseの情報を読むという作業ができるとする。
当然普通は入力に
5
などとして、id=5の情報をselectしてくる。
しかし、ここで、
5'; drop table database; select * from database2 where id = '5
や
' OR 't' = 't
といった文を入力とすると、データベース上では
select * from database where id = '5'; drop table database; select * from database2 where id = '5'; select * from database where id = '' OR 't' = 't';
というSQLが実行されることとなり、
前者では、データベースが消去され、
後者では、t=tが常に成り立つので、databaseテーブルがすべて表示されてしまい、他人の情報が盗みとれてしまう。
これはもちろん、データベース管理者の意図せぬ動作であり、こういう入力に対して対策をしておかないと、
大変なことになるってことです。
肝心の対策ですが、
もともとのSQL文を
select * from database where id = '' (ユーザ入力)'';
とシングルクオーテーションをエスケープすることで、確実に外側のシングルクオーテーション内が一つの文字列とみなされるようになる。
その他、最近のデータベースのAPIでは、API内ですでにエスケープが施されていることも多いのだとか。
実際、今日postgreSQLで実験してみたが、pg_query関数ではSQLインジェクションできないようになっていた。
セキュリティて大事ですね。
ところで、こういう情報をウェブ上に載せるのは、ネット倫理的に大丈夫なんやろか。
自分のメモとはいえ、心配。