見出し画像

SQLインジェクションの恐怖

「ハンドルネーム設定/解除の添削」に書いてあった脆弱性の中にあった
「SQLインジェクション」も名前は良く聞きますけど、
追加で説明して欲しいです、師匠~。

SQLインジェクションとは

対応は簡単!だけど、対応漏れあるとマジヤバイ!
どれくらいヤバイかというと、
 ・アカウントの乗っ取りが超簡単!
 ・データ削除だってできちゃう!
 ・他のテーブルのデータも改ざん可能!
などが出来てしまう脆弱性なんです・・・。

実際にどんなSQLが攻撃されるか

SELECT id,pass FROM login_user
WHERE id='hisaki' AND pass='内緒のパスワード';

この id と pass に、直接、フォーム入力値を使ってしまうと、
SQLインジェクションの脆弱性になってしまいます。

例えば
ID:hisaki' or 1 = 1;--
という値をテキストボックスに入れて送信すると、

SELECT id,pass FROM login_user
WHERE id='hisaki' or 1 = 1;--' AND pass='内緒のパスワード';

こういうSQLになり、パスワードに何を入れてもログイン処理がされてしまいます!アカウント乗っ取りし放題です。
文法を変えると、ユーザーデータを削除したりすることもできちゃいます。

えええ、SQLインジェクション、おそろしい・・・

脆弱性の対応方法

ただ、対応方法は簡単なんです。XSSのときと似ています。

SQLite3::escapeString(string $string)

PHPで、SQLite3を使っている場合は、この関数で囲むだけで出来ます。
SQLの脆弱性は、DBごとに対応方法が変わりますが、どのDBにもエスケープ用の関数があると思いますので、それを利用するだけで対応となります。

他にも、プレースホルダー対応など、ほかの対応方法もあります。

感想

データベースって、データ入れておけば安心なんだと想像してたんですけど、こんな簡単にアカウントのっとりができるなんて、ちょっとプログラムするのが怖くなってきました。
ですが、知らないほうがヤバイと思ったので、このタイミングで知れてよかったと思います。XSSとSQLインジェクション、これは忘れるわけにはいかないですね!!

この記事が気に入ったらサポートをしてみませんか?