如果我正在使用像 Google Gears 或 WebDB 实现这样的客户端数据库,那么转义数据以防止 SQL 注入的最佳方法是什么?将它包装在 encodeURI() 中?
此外,我还需要担心吗?这里有一个简介,http ://code.google.com/apis/gears/api_database.html#Database-execute让我觉得它是为我处理的,但我不确定。
如果我正在使用像 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
);