1

Google Gears や WebDB 実装などのクライアント側データベースを使用している場合、SQL インジェクションを防ぐためにデータをエスケープする最善の方法は何ですか? encodeURI() でラップしますか?

さらに、それについて心配する必要さえありますか?ここにhttp://code.google.com/apis/gears/api_database.html#Database-executeという宣伝文句がありますが、それは私のために処理されていると思いますが、よくわかりませんでした。

4

1 に答える 1

4

プレースホルダーを使用している場合、引用/エスケープについて心配する必要はありません。したがって、この:

resultSet = db.execute (
  'INSERT INTO MYTABLE VALUES (?, ?, ?) WHERE id=?',
  [some, variables, that_you_got_from, somewhere]
)

そのままでいいです。一連の文字列を貼り付けて SQL を構築しようとしている場合は、問題が発生するため、そうしないでください。ただし、SQL を取得するために文字列を一緒に貼り付ける必要がある場合もありますが、それを回避する安全な方法があります。このようなものは、プレースホルダーと文字列連結の両方を使用できる一般的なケースになる傾向があります。

var list = some_array_of_unknown_size_and_origin;
var qs   = [ ];

for(var i = 0; i < list.size; ++i) 
    qs.push('?');

var rs = db.execute(
    'UPDATE some_table SET col = 'blahblah' WHERE id IN (' + qs.join(',') + ')',
    list
);
于 2010-12-02T08:09:12.310 に答える