登录页面与htpasswd - 哪个更安全?

时间:2011-04-29 14:03:26

标签: php .htaccess .htpasswd

鉴于一个简单的登录系统(注册和登录),这两个选择中的哪一个更安全:

  • 使用htaccess和htpasswd文件存储和验证用户
  • 使用php到CRUD和MySQL(或任何其他数据库)来存储信息

用户信息完全由用户名密码组成。

当然,两种选择都假设最佳情况:考虑MySQL注入,密码为md5 / sha1 / md5 + sha1 /任何其他加密方式等。

如果您想知道,在第一种情况下,php会将用户凭据添加到htpasswd文件中。 (有关示例实现,请参阅this问题。)

2 个答案:

答案 0 :(得分:13)

我总是说登录表单(我假设你的意思是标准的基于会话的身份验证)。

  • .htaccess身份验证会在每次请求时传输密码(当然,SSL会对此有所帮助)

  • .htaccess身份验证默认情况下在Apache中没有任何速率限制/暴力保护

  • .htaccess身份验证is a bitch

  • 退出

答案 1 :(得分:5)

在飞行安全方面,两种方式几乎没有区别。但佩卡的担忧都是有效的。如果您只想使用HTTP Basic Auth(即弹出框)而不是登录表单,则可以通过PHP完成。通过查找$_SERVER['PHP_AUTH_USER']并且如果您没有找到它,则发回401响应,例如:

    if (!isset($_SERVER['PHP_AUTH_USER'])) {
            header('WWW-Authenticate: Basic realm="MY REALM"');
            header('HTTP/1.0 401 Unauthorized');
            echo 'Please Contact us if you are having problems logging in';
            exit;
    } else {
            //not their first time through
            //check their username and password here
            $username = trim($_SERVER['PHP_AUTH_USER']);
            $password = trim($_SERVER['PHP_AUTH_PW']);
            //do login
    }

通过这种方式,您可以进行速率限制/强力检测。设置会话,以便不会随每个请求一起发送密码,并使用户登录并更轻松地跟踪它们。