2010-12-02 1 views
1

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

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

答えて

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 
); 
関連する問題