如何保护Amazon SimpleDB免受SQL注入?

时间:2010-12-15 05:14:26

标签: sql-injection amazon-simpledb

根据“如果它像鸭子走路,它听起来像鸭子”的原则,亚马逊的SimpleDB支持的SQL风格的查询似乎应该容易受到SQL注入式攻击。这是一个简单的例子,假设攻击者的输入进入变量$ category,并且他可以猜出一个列名:

$category = "Clothes' OR Category LIKE '%";
$results = $sdb->select("SELECT * FROM `{$domain}` WHERE Category = '$category'");

如果您正在玩主游戏,这些行可以是亚马逊PHP SDK(1.2)示例代码中文件html-sdb_create_domain_data.php中第119行的就地替换。

亚马逊发布quoting rules,我想我可以写一些东西,确保用户输入中的任何“或”加倍......但我一直都知道逃避基本上是军备竞赛,这使得参数化是我在使用MySQL时的首选武器。

其他人使用什么来保护SimpleDB查询?

1 个答案:

答案 0 :(得分:8)

SimpleDB Select操作是非破坏性的,因此唯一要防范的是发送给攻击者的额外查询数据。

使用SimpleDB非常容易清理用户对查询的输入的解决方案,因为不允许使用子选择和复合语句。所以这不是一场军备竞赛;如果序列的长度为奇数,则必须转义输入中一个或多个引号字符的序列。