昨天我的网站被黑了,黑客设法登录管理区域并发布了一个博客,其中包含指向其网站的重定向链接。所以我想要一些帮助,使我的登录安全。
这是我的剧本:
$username = $_POST['username'];
$password = md5_base64($_POST['password']);
$stmt = $mysqli->prepare("SELECT id, username, password, permission FROM user WHERE username = ? AND password = ?");
$stmt->bind_param('ss', $username, $password);
$stmt->execute();
$stmt->bind_result($userid, $username, $password, $permission);
$stmt->store_result();
if(($numRows = $stmt->num_rows) > 0)
{
$response_array['status'] = "success";
$response_array['message'] = "Logged in";
}
else
{
$response_array['status'] = "error";
$response_array['message'] = "Sorry, Wrong Username/Password Combination" .$password;
}
继承md5_base64功能:
function md5_base64 ( $data )
{
return preg_replace('/=+$/','',base64_encode(md5($data,true)));
}
非常感谢任何帮助,建议和改进。
答案 0 :(得分:1)
需要有关攻击如何发生的一点信息。
可能是 SQL注入而不是编程 缺陷。
在将查询发送到数据库之前,请始终清理输入,a 单引号可以创建SQL注入攻击。
注意默认密码或简单密码,例如admin, admin123,12345等
人们很容易猜到或者可以使用字典攻击来破解它。
也使用复杂密码。
如果您使用的是数据库,请使用准备好的声明。
此致
Anshul Katta
答案 1 :(得分:1)
您的登录脚本没有任何问题,除了功能md5_base64()这是非常愚蠢的。但从SQL注入的角度来看,这是无辜的 使用像'qwerty123'这样的密码,不需要狡猾的注射来突破。我怀疑,一个名字就像密码一样容易猜到。
或者还有其他一些缺陷。喜欢愚蠢的cookie来记住用户或类似的
答案 2 :(得分:0)
您需要问自己的问题 - 该人是如何获得密码的?
他是否登录了实际机器?这可以通过安全审核来防止,并删除对ftp / telnet的访问权限 - 编辑/etc/inetd.conf
并删除不必要的服务。还要检查启动时启动的守护程序 - Google运行级别以及启动的内容。只需使用SSH即可访问该机器。
然后看看数据库。可以将MySql配置为仅接受来自某些IP地址的连接并使用SSH。还要确保通过具有特定数据库的已知权限的用户帐户访问数据库
同时检查防火墙。这可以防止人们远程访问机器。
然后查看Web服务器的配置。也许使用HTTPS来访问管理区域。
同时遵循上面的anshulkatta提供的建议