给定一个简单的登录系统(注册和登录),两种选择哪一种更安全:
- 使用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
}
这样你可以做速率限制/暴力检测。设置一个会话,这样密码就不会随每个请求一起发送,并使登录用户退出和跟踪他们更容易。