#mysql #pdo #безопасность #взлом
В интернете я нашёл только один способ взлома Mysql базы данных - sql-инъекция. Однако там же я нашёл и решение, как не допустить попадание нежелательных символов в mysql_query: $query = sprintf("SELECT * FROM sometable WHERE somevar='%s'", mysql_real_escape_string($var)); mysql_query($query); И тем не менее, многие люди настойчиво рекомендуют переходить на другие расширения по работе с Mysql (PDO, например), считая оригинальное API априори небезопасным и недостаточно функциональным. На последнее я не жалуюсь, но безопасность важна для меня. И вот вот вопрос: полностью ли меня обезопасил от хакерских атак код, приведённый выше? Если нет, то возможно ли мне обезопаситься полностью, не переходя на другие расширения?
Ответы
Ответ 1
Если рассматривать ситуацию только в контексте "безопасность запросов от хакерских атак", то ответ: "Да, код, приведённый выше, полностью обезопасил от хакерских атак". Однако при разработке остальные моменты тоже нужно учитыватьОтвет 2
Для защиты от SQL инъекций перейдите на расширение PDO или mysqli и воспользуйтесь функцией bindParam. Функции mysql_* устарели и больше не поддерживаются. Пример использования для PDO prepare('SELECT name, colour, calories FROM fruit WHERE calories < :calories AND colour = :colour'); $sth->bindParam(':calories', $calories, PDO::PARAM_INT); $sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12); $sth->execute(); Документация Пример для mysqli prepare($sql); $category_id = 1; $lastname = '%Smith%'; /* Bind параметры. Типы: s = string, i = integer, d = double, b = blob */ $stmt->bind_param('is', $category_id, $lastname); $stmt->execute(); ДокументацияОтвет 3
Нет, вы обезопасили себя не полностью. Вы не обезопасили себя от прямого подключения к вашему MySQL серверу. Ограничьте IP адреса, с которых можно подключаться к вашей базе данных - как в настройках пользователей MySQL, так и в настройках сетевого экрана.
Комментариев нет:
Отправить комментарий