SECURITY LEVEL: HIGH
プログラムの中で、SQL文(命令書)は以下のように組み立てられました。
SELECT * FROM users WHERE username = 'admin' AND password = '' OR '1'='1'
コンピュータはこの命令を左から順に読みますが、最後の部分を見てください。 OR '1'='1'
OR '1'='1'
これは日本語に訳すと「または、1と1が同じならOK」という意味です。 1と1は常に同じ(True)ですよね?
つまり、パスワードが合っていようがいまいが、「または1=1(正解)なら全部OK!」というルールが追加されたことで、ガードマン(DB)は「あ、条件満たしてるんで通っていいっすよ」と通してしまったのです。
これがSQLインジェクションの正体です。