PHP 实现 basic_auth的实时管理
续较早前一篇,给某网站应用加上了域访问认证
【nginx/apache】远古技术:增加网站访问密码(auth_basic)
密码加上了之后为安全起见总得定期更新,遇到特殊情况还需要紧急更改密码。
如果都得在服务器端命令行的方式修改的话,对运维人员的依赖太高了
想着能不能把这项工作也下放给运营管理来做。哦,找到了个合适的东西
使用也非常简单,支持添加用户、删除用户、更新密码
$pwdfile = ./htpasswd.db";
$htpasswd = new Htpasswd($pwdfile);
$htpasswd->addUser('ozan', '123456');
$htpasswd->updateUser('ozan', '654321');
$htpasswd->deleteUser('ozan');
注意的是,看了下没有包含验证的方法 verifyUser()
尝试自己写了一个,结果发现默认 crypt
算法加密,相同的原始密码输出是不一样的,不能做简单地验证。
还有一些其他限制,如果运行在windows环境 要手动指定改为 MD5
或 SHA1
。
作者说只保证在apache下正确运行,我试了一下 nginx 下也暂时没遇到什么问题。
以后域密码也可以在前端直接管理了。
一些补充
密码库文件需要放在php能合法访问的路径,所以不能像最初那样存放在一个和 wwwroot 不相关不可访问的路径。
这样就带来了安全性的问题,万一整个密码文件被下载了前面的功夫几乎等于白做。
建议加上nginx 规则或其他手段,确保这个文件不可被浏览器直接访问或下载。
例如在vhost中加上以下内容 (仅仅由于我把密码库文件命名为 *.db 后缀,并不是必须)
location ~ .*\.(db)$
{
deny all;
}
