2010-12-02 29 views
1

Si j'utilise une base de données côté client comme Google Gears ou une implémentation WebDB, quelle est la meilleure façon d'échapper les données pour empêcher l'injection SQL? Enveloppez-vous dans encodeURI()?Comment échapper des données dans Javascript pour une base de données côté client comme WebDB ou Google Gears?

En outre, ai-je même besoin de m'inquiéter à ce sujet? Il y a un texte de présentation ici, http://code.google.com/apis/gears/api_database.html#Database-execute qui me fait penser que c'est géré pour moi, mais je n'étais pas sûr.

Répondre

4

Vous n'avez pas à vous soucier de l'échappement/échappement si vous utilisez des espaces réservés. Donc ceci:

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

est bien tel quel. Si vous essayez de créer du SQL en collant un tas de chaînes, alors vous allez avoir des problèmes, alors ne le faites pas. Cependant, il y a des cas où vous devrez coller des chaînes ensemble pour obtenir votre SQL mais il y a des manières sûres autour de cela; quelque chose comme ceci tend à être un cas courant où vous pouvez utiliser à la fois des espaces réservés et une concaténation de chaînes:

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 
);