我有一个基于 PHP 的网站,带有 MySQL 数据库。几天前,我收到了一封电子邮件,其中包含数据库中的所有用户及其解码后的密码(密码使用 MD5 编码)。
更改所有密码(ftp、数据库和所有用户的密码)后,我收到了一封包含用户新信息的电子邮件。
我已经使用mysql_real_escape_string
和htmlentities
来清理用户输入。不知道还能做些什么来保护网站免受再次入侵。有谁知道这是怎么发生的,以及我可以做些什么来防止它?
非常感谢您的帮助!
答案1
询问攻击者。他们联系了你(而不是保持沉默并出售信息),所以他们可能也想帮助你。
查看全部您的 SQL 查询,查找遗漏的输入转义等。特别留意对用户表的查询,尤其是当您执行
SELECT *
.尽量避免使用 SELECT * - 只需选择您需要的字段。
htmlentities 无法正确转义要插入 SQL 查询的数据。您应始终使用 mysql_real_escape_string 来实现这一点。htmlentities 和 htmlspecialchars 用于在将数据发送到浏览器之前对其进行清理。
考虑使用准备好的语句,例如原产地保护组织。这将极大地简化防范 SQL 注入的任务,因为数据根本不需要转义。(在回显到浏览器之前仍然需要 htmlentities,但 XSS 是另一个主题)。