Как защитить Amazon SimpleDB от SQL Injection?

В соответствии с принципом "если он ходит как утка, и это звучит как утка", наверняка кажется, что SQL-приправленные запросы, поддерживаемые Amazon SimpleDB, должны быть восприимчивы к атакам типа SQL-инъекций. Вот простой пример, предполагающий, что вход злоумышленника переходит в переменную $category и что он может угадать имя столбца:

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

Если вы играете в домашнюю игру, эти строки могут быть заменой на месте для строки 119 в файле html-sdb_create_domain_data.php в примере кода в Amazon PHP SDK (1.2).

Amazon публикует правила цитирования, и я полагаю, что я мог бы написать что-то, что гарантирует, что любые "или" в пользовательском вводе будут удвоены... но я всегда понимал, что побег - это в основном гонка вооружений, которая делает параметризацию моим оружием выбора при использовании, например, MySQL.

Что другие люди используют для защиты запросов SimpleDB?

Ответ 1

Операция SimpleDB Select не разрушительна, поэтому единственное, что нужно защитить, - это дополнительные данные запроса, отправляемые злоумышленнику.

Решение для дезинфекции пользовательского ввода в запрос довольно просто с помощью SimpleDB, поскольку подвыборки и составные утверждения не разрешены. Так что это не гонка вооружений; последовательности одного или нескольких символов кавычек на входе должны быть экранированы, если длина последовательности нечетна.