Latest web development tutorials

MySQL и SQL инъекции

Если вы получаете данные, введенные пользователем через веб и вставить его в базу данных MySQL, то можно SQL проблемы безопасности инъекций.

Этот раздел расскажет вам, как предотвратить инъекции SQL, а также для фильтрации SQL инъекций символов в сценарии.

Так называемый SQL инъекции, через команду SQL в веб-формы или введите имя домена или запроса страницы строку запроса, и в конечном счете обмануть сервер для выполнения вредоносных команд SQL.

Мы никогда не доверять пользовательского ввода, мы должны определить данные, введенные пользователем, небезопасно, все мы нуждаемся для пользовательского ввода процесса фильтрации данных.

В следующем примере, имя пользователя, введенное должно быть сочетание букв, цифр и символов подчеркивания, а длина имени пользователя составляет от 8-20 символов:

if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches))
{
   $result = mysql_query("SELECT * FROM users 
                          WHERE username=$matches[0]");
}
 else 
{
   echo "username 输入异常";
}

Давайте посмотрим на ситуацию, когда нет SQL фильтра появляются специальные символы:

// 设定$name 中插入了我们不需要的SQL语句
$name = "Qadir'; DELETE FROM users;";
mysql_query("SELECT * FROM users WHERE name='{$name}'");

Над инжекционного заявления, мы не должны фильтровать переменную $ имя, $ имя нам не нужно, чтобы вставить оператор SQL удалит все данные в таблицы пользователей.

mysql_query в PHP () не разрешено выполнять несколько операторов SQL, но в SQLite и PostgreSQL могут выполнять несколько операторов SQL одновременно, так что пользователи этих данных нам необходимо строгое подтверждение.

Предотвращение инъекции SQL, мы должны обратить внимание на следующие моменты:

  • 1. Никогда не доверяйте ввод данных пользователем. Проверка пользовательского ввода, вы можете использовать регулярные выражения, или ограничить длину, одиночные и двойные кавычки "-" в преобразовании.
  • 2. Никогда не используйте динамическую сборку SQL, вы можете использовать параметры прямого использования SQL или хранимых процедур для доступа к данным запроса.
  • 3. Никогда не используйте администратора подключение к базе данных привилегий, использовать ограниченные индивидуальные права доступа для каждого соединения с базой данных приложения.
  • 4. Не храните конфиденциальную информацию непосредственно, шифрование или хэш из паролей и конфиденциальной информации.
  • 5. сведения об исключении приложение должно быть дано как несколько подсказок, то лучше использовать пользовательское сообщение об ошибке появляется сообщение об ошибке оригинальную упаковку
  • Обнаружение 6.sql инъекции сайта в целом или опорной платформы программного обеспечения для обнаружения, программное обеспечение обычно используется SQL средства обнаружения инъекции jsky, интернет-сайт сайт млрд мышление есть средства обнаружения платформы безопасности. MDCSOFT SCAN нравится. Использование MDCSOFT-IPS может быть эффективной защиты SQL инъекций, XSS атаки.

Предотвращение SQL инъекции

В языках сценариев, таких как Perl и PHP вы можете избежать данные, введенные пользователем, чтобы предотвратить SQL-инъекции.

Расширение PHP MySQL предоставляет функцию mysql_real_escape_string (), чтобы избежать специальных входных символов.

if (get_magic_quotes_gpc()) 
{
  $name = stripslashes($name);
}
$name = mysql_real_escape_string($name);
mysql_query("SELECT * FROM users WHERE name='{$name}'");

Как инъекции заявление

как запрос, если пользователь вводит значение "_" и "%", то это происходит: пользователь просто пытался запрос "abcd_", результаты запроса там "ABCD _", "ABCDE", "ABCDF" и т.д., пользователю запрос "30%" (Примечание: тридцать процентов) будут иметь проблемы.

В PHP скрипт, мы можем использовать addcslashes () функцию для обработки выше случае, следующие примеры:

$sub = addcslashes(mysql_real_escape_string("%something_"), "%_");
// $sub == \%something\_
mysql_query("SELECT * FROM messages WHERE subject LIKE '{$sub}%'");

addcslashes () функции перед указана с помощью обратной косой черты.

Синтаксис:

addcslashes(string,characters)
параметры описание
строка Обязательный параметр. Чтобы проверить указанную строку.
символы Необязательно. Предписано addcslashes () влияют на символы или диапазоны символов.

Вы можете просмотреть конкретное приложение: PHP - addcslashes () функция