根据“如果它像鸭子走路,它听起来像鸭子”的原则,亚马逊的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查询?
答案 0 :(得分:8)
SimpleDB Select操作是非破坏性的,因此唯一要防范的是发送给攻击者的额外查询数据。
使用SimpleDB非常容易清理用户对查询的输入的解决方案,因为不允许使用子选择和复合语句。所以这不是一场军备竞赛;如果序列的长度为奇数,则必须转义输入中一个或多个引号字符的序列。