PHPのsprintfによるSQL組み立てで脆弱性が生じる例
PHPでの
sprintf("SELECT * FROM table WHERE id = %d", $value);
sprintf("SELECT * FROM table WHERE id = %s", escape($value));
sprintf("SELECT * FROM table WHERE id = '%s'", escape($value));
の3つのコードについて、2行目のコードでSQLインジェクション脆弱性が生じ、1行目と3行目は問題がないのはどのような理由でしょうか
ここでescape()
は値をSQLの文字列リテラル(のシングルクオーテーションの内側)としてエスケープするmysqli_real_escape_string
のような関数とします。