1

如果我正在使用像 Google Gears 或 WebDB 实现这样的客户端数据库,那么转义数据以防止 SQL 注入的最佳方法是什么?将它包装在 encodeURI() 中?

此外,我还需要担心吗?这里有一个简介,http ://code.google.com/apis/gears/api_database.html#Database-execute让我觉得它是为我处理的,但我不确定。

4

1 回答 1

4

如果您使用占位符,则不必担心引用/转义。所以这:

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
);
于 2010-12-02T08:09:12.310 回答