按照“它走起来像鸭子,叫声也像鸭子”的原则,“亚马逊简单数据库”支持的类SQL查询似乎应该容易受到SQL注入攻击。这里有一个简单的例子,假设攻击者的输入进入了变量$category,并且他可以猜测列名:
$category = "Clothes' OR Category LIKE '%";
$results = $sdb->select("SELECT * FROM `{$domain}` WHERE Category = '$category'");
如果你在玩这个自娱自乐的游戏,下面这些代码可以直接替换掉Amazon PHP SDK(1.2)中示例代码中文件html-sdb_create_domain_data.php
中的第119行。
Amazon发布了引用规则,我想我可以编写一些代码来确保用户输入中的任何 " 或 ' 被重复输入...但我一直认为转义基本上是一场军备竞赛,这就是为什么在使用例如MySQL时,参数化成为我的选择武器。
其他人都在使用什么来保护SimpleDB查询呢?