SQLの実行結果がそのまま表示されないページでも
SQLインジェクションが可能な場合がある。
例えば会員登録フォームで、
「このIDはすでに使われています。」と出る時に
katoというIDのユーザがすでに居るとする。
kato'AND SUBSTR((SELECT pass FROM user WHERE id = 'admin'),1,1) = 'a'
とすると、kato'までは常に真なので、
管理者ユーザのパスワードの1文字目がaのときだけ「このIDは~」と表示される。
副問合せの結果がadminのパスワードで、それを1文字目から1文字切り出した結果が aと等しいなら、というSQL。
ひとつめの1を、2や3などに増やしていくことで、パスワードの2文字目、3文字目と調べていく。
プレースホルダを使用していれば問題ないし、そもそもパスワードをハッシュ化していれば
試行に時間がかかる上にハッシュから元のパスワードを推測する工程が加わるので
攻撃の難易度は増す。