У меня есть веб-сайт на основе PHP с базой данных MySQL. Несколько дней назад я получил электронное письмо, содержащее всех пользователей в базе данных вместе с их расшифрованными паролями (пароли были закодированы с использованием MD5).
После изменения всех паролей (ftp, базы данных и паролей от всех пользователей) я получил электронное письмо с новой информацией о пользователях.
я использовал mysql_real_escape_string
и htmlentities
для дезинфекции пользовательского ввода. Не знаю, что еще сделать, чтобы защитить сайт от нового вторжения. Есть ли у кого-нибудь идеи, как это могло произойти и что я могу сделать, чтобы это предотвратить?
Ваша помощь очень ценится!
Спросите злоумышленника. Они связались с вами (вместо того, чтобы хранить молчание и просто продать информацию), поэтому, по-видимому, они также хотят вам помочь.
Проверьте все ваши SQL-запросы, поиск пропущенного ввода, экранирование и тому подобное. Следите за запросами к таблице пользователей, особенно если вы выполняете SELECT *
.
Избегайте SELECT * как можно чаще - просто выберите нужные поля.
htmlentities неправильно экранирует данные для вставки в запросы SQL. Для этого всегда следует использовать mysql_real_escape_string. htmlentities и htmlspecialchars используются для очистки данных перед их отправкой в браузер.
Рассмотрите возможность использования подготовленных операторов, например, с PDO. Это значительно упростит задачу защиты от SQL-инъекций, поскольку данные вообще не нужно экранировать. (вам по-прежнему нужны htmlentities перед выводом в браузер, но XSS - это другая тема).
Попробуйте изменить свои SQL-запросы на Подготовленные заявления.
Также свяжитесь с вашим хостером, чтобы получить от них помощь.
Проверьте наличие последних исправлений для вашей CMS, если вы ее используете.
Используйте MD5 с солью и несколькими раундами хеширования MD5.