Как мне избежать данных в Javascript для клиентской базы данных, такой как WebDB или Google Gears? - PullRequest
1 голос
/ 02 декабря 2010

Если я использую базу данных на стороне клиента, такую ​​как Google Gears или реализацию WebDB, каков наилучший способ избежать данных, чтобы предотвратить внедрение SQL?Оберните это в encodeURI ()?

Кроме того, мне даже нужно беспокоиться об этом?Здесь есть реклама, http://code.google.com/apis/gears/api_database.html#Database-execute, которая заставляет меня думать, что она справилась со мной, но я не был уверен.

1 Ответ

4 голосов
/ 02 декабря 2010

Вам не нужно беспокоиться о цитировании / экранировании, если вы используете заполнители. Итак, это:

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