登录页面vs. htpasswd -哪个更安全



给定一个简单的登录系统(注册和登录),两种选择哪一种更安全:

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

用户信息仅由用户名-密码组成。

当然,最好的情况是假设两个选项:MySQL注入,密码是md5/sha1/md5+sha1/任何其他方式加密,等等。

如果您想知道,在第一种情况下,php将向htpasswd文件添加用户凭据。(参见这个问题的示例实现)

我认为总是登录表单(我假设您指的是标准的基于会话的身份验证)。

  • .htaccess认证在每次请求时传输密码(当然,SSL在这里会有所帮助)

  • .htaccess认证在Apache中默认没有速率限制/暴力破解保护

  • 退出.htaccess认证是一个婊子

在飞行安全方面,这两种方式几乎没有区别。但佩卡的担心都是有道理的如果你只是想使用HTTP基本认证(即弹出框)而不是登录表单,你可以通过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
    }

这样你可以做速率限制/暴力检测。设置一个会话,这样密码就不会随每个请求一起发送,并使登录用户退出和跟踪他们更容易。

最新更新