質問: '1'`このようにSQLへ指定された場合必ずTRUEとなってしまうとあるのですが、仮に静的プレースホルダーを利用したとしても、どのみち値をバインドする為、同じなのではないかと思ってしまいます。 何故、値をプレースホルダーへバインドすることがSQLインジェクションの対策になるのでしょうか? 詳しい方が、いらっしゃいましたら教えて頂けましたら幸いです。
回答: > > 仮に静的プレースホルダーを利用したとしても、どのみち値をバインドする為、同じ > > > いいえ、攻撃側からのパラメータ渡しで > > SELECT user_id,password FROM users WHERE user_id='1' or '1' = '1' > > > というSQLを作成することが困難なので、セキュリティはぐっと高まります たとえば ``` $a="1' or '1' = '1"; $sql="SELECT user_id,password FROM users WHERE user_id='$a'"; print $sql; //SELECT user_id,password FROM users WHERE user_id='1' or '1' = '1' ``` これが ``` $a="1' or '1' = '1"; $sql="SELECT user_id,password FROM users WHERE user_id=?"; ``` としても実行されるのは(イメージとして) SELECT user_id,password FROM users WHERE user_id="1' or '1' = '1" なので、攻撃が無効化されています