根据“如果它走得像鸭子一样,听起来像鸭子一样”的原则,肯定看起来像Amazon的SimpleDB支持的SQL风格的查询应该容易受到SQL注入(inject)类型的攻击。这是一个简单的示例,假定攻击者的输入正在变量$ 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行。亚马逊发布了quoting rules,我想我可以写一些东西来确保用户输入中的任何“或”都加倍...但是我一直都明白,转义基本上是一场军备竞赛,这使得参数化成为我使用时的首选武器,例如MySQL。
其他人用什么来捍卫SimpleDB查询?
最佳答案
SimpleDB Select操作是非破坏性的,因此唯一需要防止的是额外的查询数据发给攻击者。
使用SimpleDB清理用户查询输入的解决方案非常简单,因为不允许子选择和复合语句。因此,这并不是一场真正的军备竞赛。如果序列的长度为奇数,则必须对输入中一个或多个引号字符的序列进行转义。
关于sql-injection - 如何保护Amazon SimpleDB免受SQL注入(inject)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4446919/