Достаточно ли 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