Как мне экранировать данные в Javascript для клиентской базы данных, такой как WebDB или Google Gears?

StackOverflow https://stackoverflow.com/questions/4332524

Вопрос

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

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

Это было полезно?

Решение

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

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
);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top