«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Достаточно ли использования mysql_real_escape_string() и mysql_escape_string() для защиты вашего приложения?

Достаточно ли использования mysql_real_escape_string() и mysql_escape_string() для защиты вашего приложения?

Опубликовано 22 декабря 2024 г.
Просматривать:321

Is Using `mysql_real_escape_string()` and `mysql_escape_string()` Enough to Secure Your Application?

Достаточно ли mysql_real_escape_string() и mysql_escape_string() для безопасности приложений?

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

SQL Внедрение

Mysql_real_escape_string() все равно может подвергнуть ваше приложение SQL-инъекции, если вы неправильно обрабатываете переменные PHP в запросах. Рассмотрим следующий пример:

$sql = "SELECT number FROM PhoneNumbers WHERE " . 
        mysql_real_escape_string($field) . " = " . mysql_real_escape_string($value);  

Злоумышленник может манипулировать этим запросом для выполнения несанкционированных операторов SQL, поскольку mysql_real_escape_string() не предназначен для защиты имен таблиц, имен столбцов или полей LIMIT.

Как атаки

Mysql_real_escape_string() недостаточно для предотвращения эксплойтов LIKE. Злоумышленник может ввести вредоносное значение, например «%%», чтобы вернуть все записи, что потенциально может поставить под угрозу конфиденциальную информацию.

Эксплойты кодировки

Некоторые браузеры могут быть уязвимы к кодировке эксплойты, позволяющие злоумышленникам внедрять вредоносные символы, которые обходят механизмы экранирования и выполняют произвольные команды SQL.

Подготовлено Операторы: комплексное решение

Чтобы эффективно защитить ваше приложение, рекомендуется использовать подготовленные операторы вместо mysql_real_escape_string(). Подготовленные операторы выполняют запросы SQL с введенными пользователем значениями, связывая их в качестве параметров. Это устраняет необходимость ручного экранирования и гарантирует выполнение только авторизованного SQL.

Вот пример использования подготовленного оператора в PHP:

$pdo = new PDO($dsn);

$column = 'url';
$value = 'http://www.example.com/';
$limit = 1;

// Validate the search parameter column.
$validColumns = array('url', 'last_fetched');
if (!in_array($column, $validColumns)) { $column = 'id'; }

$statement = $pdo->prepare('SELECT url FROM GrabbedURLs ' .
                           'WHERE ' . $column . '=? ' .
                           'LIMIT ' . intval($limit));
$statement->execute(array($value));
while (($data = $statement->fetch())) { }

Подготовленные операторы предлагают механизм превентивной защиты за счет использования функций безопасности базового сервера базы данных. Они по своей природе устойчивы как к известным, так и к неизвестным атакам, обеспечивая целостность ваших данных.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3