Я хочу обнаружить возможную атаку SQL путем проверки SQL-запроса. Я использую PDO и подготовленное заявление, так что, надеюсь, мне не грозит нападение кого-либо. Однако я хочу обнаружить возможность ввода / вывода строки запроса, которая может стать опасным запросом. Например, мое приложение - правильно - никогда не будет генерировать запрос «1 = 1», поэтому я могу проверить сгенерированную строку запроса для этого и пометить пользователя / IP-адрес, производящий этот запрос. То же самое и с «таблицей удаления», но, возможно, я могу проверить только зацикливание входного массива; или, может быть, я должен просто проверить сгенерированный запрос снова и снова. Я использую MySQL, но шаблон для других драйверов также приветствуется.
Я прочитал RegEx для обнаружения SQL-инъекций , и некоторые комментарии движутся в этом направлении. К моей помощи, я разрабатываю для пользователей, которые редко используют английский в качестве входных данных, поэтому простого / drop / match для запроса может быть достаточно, чтобы зарегистрировать пользователя / запрос для дальнейшей проверки. Вот некоторые из шаблонов, которые я обнаружил при исследовании SQL-инъекций:
- точка с запятой в середине предложения - хотя это может быть общим
- двойной знак тире / фунта для комментирования остальной части запроса
- с использованием кавычки в начале и конце значения
- с использованием гекса (мои целевые пользователи имеют малый или низкий шанс ввести 0x в их форме)
- Declare / Exec / Drop / 1 = 1 (мое приложение не должно генерировать эти значения)
- html tag (низкая вероятность от предполагаемого пользователя / варианта использования)
- и т.д.
Все вышеперечисленное легче обнаружить, зацикливая входные значения перед созданием строки запроса, поскольку они не были экранированы. Но сколько я пропустил? (наверное, много) Любой другой неясный шаблон, который я должен проверить? Как насчет проверки сгенерированного запроса? Любой шаблон, который может появиться?
tl; dr: Какой шаблон должен соответствовать запросу SQL (MySQL) для проверки на возможное внедрение? Я использую PDO с подготовленным оператором и привязкой значения, поэтому проверка предназначена для ведения журнала / оповещения.