Как я могу защитить Amazon SimpleDB от SQL-инъекций?

По принципу "если он ходит как утка и звучит как утка", то кажется, что запросы со вкусом 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 SDK PHP (1.2).

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

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

1 ответ

Решение

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

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

Другие вопросы по тегам