2010-12-15 70 views
10

根據「如果它像鴨子一樣走路,它聽起來像鴨子一樣」的原則,它似乎像亞馬遜的SimpleDB支持的SQL風格的查詢應該容易受到SQL注入式攻擊。下面是假定攻擊者的輸入是進入變量$類別,而且他能猜對列名一個簡單的例子:如果你玩的主場比賽如何保護Amazon SimpleDB免受SQL注入?

$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的查詢其他人呢?

回答

8

SimpleDB的選擇操作是非破壞性的,所以要防止的唯一事情是額外的查詢數據走出去攻擊者

消毒用戶inp的解決方案由於子選擇和複合語句是不允許的,所以使用SimpleDB對查詢非常簡單。所以這不是真正的軍備競賽。如果序列的長度是奇數,則輸入中的一個或多個引號字符序列必須轉義。