Лучшее руководство по MySQL и SQL инъекции в 2024 году. В этом руководстве вы можете изучить Предотвращение 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, мы должны обратить внимание на следующие моменты:
В языках сценариев, таких как 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 () функция