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

Zir*_*rak 6 php .htaccess .htpasswd

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

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

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

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

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

Pek*_*ica 13

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

  • .htaccess 身份验证在每个请求上传输密码(当然,SSL会在这里提供帮助)

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

  • .htaccess身份验证中退出是一个婊子


Doo*_*oon 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
    }
Run Code Online (Sandbox Code Playgroud)

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