Простой акт принятия пользовательского ввода открывает двери для эксплойтов. Проблема связана, в первую очередь, с логическим управлением данными, но, к счастью, эти основные недостатки довольно легко избежать.
Возможности внедрения SQL обычно возникают у пользователей, вводящих данные в виде имени, и логике кода не удается проанализировать этот ввод. Код, напротив, позволяет злоумышленнику вставить инструкцию MariaDB, которая будет выполняться в базе данных.
Всегда рассматривайте данные, введенные пользователями, подозревайте и нуждаются в строгой проверке перед любой обработкой. Выполните эту проверку с помощью сопоставления с образцом. Например, если ожидаемым вводом является имя пользователя, ограничьте введенные символы буквенно-цифровыми символами и символами подчеркивания и определенной длиной. Просмотрите пример, приведенный ниже —
if(check_match("/^\w{8,20}$/", $_GET['user_name'], $matches)) { $result = mysql_query("SELECT * FROM system_users WHERE user_name = $matches[0]"); } else { echo "Invalid username"; }
Кроме того, используйте оператор REGEXP и предложения LIKE при создании входных ограничений.
Рассмотрим все типы необходимого явного контроля ввода, такие как —
-
Управляйте используемыми escape-символами.
-
Управляйте конкретными соответствующими типами данных для ввода. Ограничьте ввод нужным типом данных и размером.
-
Контроль синтаксиса вводимых данных. Не допускайте ничего за пределами необходимого шаблона.
-
Контролировать условия разрешено. Черный список ключевых слов SQL.
Управляйте используемыми escape-символами.
Управляйте конкретными соответствующими типами данных для ввода. Ограничьте ввод нужным типом данных и размером.
Контроль синтаксиса вводимых данных. Не допускайте ничего за пределами необходимого шаблона.
Контролировать условия разрешено. Черный список ключевых слов SQL.
Вы можете не знать об опасностях инъекционных атак или считать их незначительными, но они возглавляют список проблем безопасности. Кроме того, рассмотрим влияние этих двух записей —
1=1 -or- *
Код, позволяющий вводить любой из них вместе с правильной командой, может привести к раскрытию всех пользовательских данных в базе данных или удалению всех данных в базе данных, и ни одна из инъекций не является особенно умной. В некоторых случаях злоумышленники даже не тратят время на изучение дыр; они выполняют слепые атаки с простым вводом.
Кроме того, рассмотрите инструменты сопоставления с образцом и регулярного выражения, предоставляемые любым языком программирования / сценариев в паре с MariaDB, которые обеспечивают больший контроль, а иногда и лучший контроль.