鉴于一个简单的登录系统(注册和登录),这两个选择中的哪一个更安全:
用户信息完全由用户名密码组成。
当然,两种选择都假设最佳情况:考虑MySQL注入,密码为md5 / sha1 / md5 + sha1 /任何其他加密方式等。
如果您想知道,在第一种情况下,php会将用户凭据添加到htpasswd文件中。 (有关示例实现,请参阅this问题。)
答案 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
}
通过这种方式,您可以进行速率限制/强力检测。设置会话,以便不会随每个请求一起发送密码,并使用户登录并更轻松地跟踪它们。