所以基本上,几天前我的一个网站客户来找我,告诉我他们的数据库和网站被黑客入侵(黑客以某种方式从数据库中窃取了md5哈希密码),登录管理面板,并更改了数据。嗯,是的,我在 1 年半前创建了那个页面,所以当时我不知道更好的hash
或盐。无论如何,他们如何破解数据库?基本上,是否有任何保护措施,或者他们是否使用任何类型的JavaScript代码,我不应该允许加载,或者其他什么?
希望你能帮助我解决这个问题,这样我就可以创建更多受保护的网站。
这是该站点以前的登录代码。根据请求添加 -
public function loginUser($username, $password) {
if(isset($_POST['login'])) {
if($username != '' && $password != '') {
$sql = "SELECT * FROM `users` WHERE `username` = '".$username."' AND `password` = '".$password."'";
$q = mysql_query($sql);
$row = mysql_fetch_array($q);
if(mysql_num_rows($q) > 0) {
if($row['level'] == 'admin') {
$_SESSION['user_level'] = 'admin';
}
else {
$_SESSION['user_level'] = 'normal';
}
$_SESSION['logged_in'] = 1;
header('location: account.php');
}
else {
header('location: error2.php');
// Return to page and show error
}
}
else {
header('location: error1.php');
// Show error, when people have empty fields entered
}
}
如果没有更多信息,就不可能肯定地说,但最有可能的情况是你的应用程序容易受到SQL注入的攻击,这使得攻击者能够让站点显示数据库的内容。另一种可能性是目录遍历攻击允许他们直接下载数据库文件。
由于MD5现在已经完全坏了(无论你是否使用盐,MD5都不再重要),其余的都很简单。
你应该阅读SQL注入(也许这就是他们在你的数据库中获取信息的方式)。
然后你应该看看XSS。
你要做的第一件事是验证每一个输入,一切!
针对 SQLi,您应该使用预准备语句。
针对XSS,您应该对所有内容进行编码!
但是,嘿,不用担心,你可以用谷歌搜索所有这些!