![見出し画像](https://assets.st-note.com/production/uploads/images/105248055/rectangle_large_type_2_fde8c1a6f438d162a5103288cd4bca52.png?width=1200)
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インジェクション、これは忘れるわけにはいかないですね!!