所以基本上,几天前,我的一个网站客户来到我面前,告诉我他们的数据库和网站遭到黑客入侵(黑客以某种方式从数据库中窃取了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
}
}
答案 0 :(得分:1)
如果没有更多信息,就不可能肯定地说,但最可能的情况是你的应用程序容易受到SQL injection的攻击,这使攻击者能够让网站显示数据库的内容。另一种可能性是directory traversal attack允许他们直接下载数据库文件。
由于MD5现在完全被打破了(无论你是否使用盐,或者MD5不再使用盐),其余的都很简单。
答案 1 :(得分:0)
您应该阅读有关SQL注入的信息(也许这就是他们如何获取数据库中的信息)。
然后你应该看看XSS。
您要做的第一件事就是验证每一条输入,一切!
针对SQLi,您应该使用预准备语句。
对于XSS,你应该对所有内容进行编码!
但是,嘿,不用担心,你可以用Google搜索这一切!