如果我使用的是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