0

昨天我的网站被黑了,黑客设法登录到管理区域并发布了一个博客,其中包含指向他网站的重定向链接。所以我请求一些帮助以确保我的登录安全。

这是我的脚本:

    $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))); 
    } 

非常感谢任何帮助、建议和改进。

4

3 回答 3

1

您的登录脚本没有任何问题,除了非常愚蠢的函数 md5_base64() 之外。但从 SQL 注入的角度来看,它是无辜的。
使用像“qwerty123”这样的密码,不需要狡猾的注射就可以突破。我怀疑,一个名字就像密码一样容易被猜到。

或者可能有其他一些缺陷。像愚蠢的cookie来记住用户等

于 2013-02-14T09:16:58.913 回答
1

需要一些关于攻击如何发生的信息。

  1. 这可能是SQL 注入而不是编程缺陷的可能性。

  2. 始终在将查询发送到数据库之前清理您的输入,单引号可以创建 SQL 注入攻击。

  3. 注意默认密码或简单密码,如 admin 、 admin123 、 12345 等。

  4. 人们可以很容易地猜到或者可以使用字典攻击来破解它。

    也使用复杂密码。

  5. 如果您使用的是数据库,请使用Prepared Statement

问候

安舒尔卡塔

于 2013-02-14T09:05:07.553 回答
0

你需要问自己的问题——那个人是怎么得到密码的?

他登录到实际机器吗?这可以通过安全审核来防止,并删除对 ftp/telnet 的访问 - 编辑/etc/inetd.conf和删除不必要的服务。还要检查启动时启动的守护进程 - Google 运行级别和启动的内容。只需使用 SSH 访问机器。

然后查看数据库。MySql 可以配置为只接受来自特定 IP 地址的连接并使用 SSH。还要确保通过对特定数据库具有已知权限的用户帐户访问数据库

还要检查你的防火墙。这可以防止人们远程访问机器。

然后看web服务器的配置。也许使用 HTTPS 访问管理区域。

还要遵循上面 anshulkatta 给出的建议

于 2013-02-14T09:10:17.490 回答