Как мне экранировать данные в Javascript для клиентской базы данных, такой как WebDB или Google Gears?
-
30-09-2019 - |
Вопрос
Если я использую клиентскую базу данных, такую как 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
);