续较早前一篇,给某网站应用加上了域访问认证

【nginx/apache】远古技术:增加网站访问密码(auth_basic)

密码加上了之后为安全起见总得定期更新,遇到特殊情况还需要紧急更改密码。
如果都得在服务器端命令行的方式修改的话,对运维人员的依赖太高了

想着能不能把这项工作也下放给运营管理来做。哦,找到了个合适的东西

https://github.com/ozanhazer/PHP-Htpasswd

使用也非常简单,支持添加用户、删除用户、更新密码

$pwdfile = ./htpasswd.db";
$htpasswd = new Htpasswd($pwdfile);
$htpasswd->addUser('ozan', '123456');
$htpasswd->updateUser('ozan', '654321');
$htpasswd->deleteUser('ozan');

注意的是,看了下没有包含验证的方法 verifyUser()
尝试自己写了一个,结果发现默认 crypt 算法加密,相同的原始密码输出是不一样的,不能做简单地验证。

还有一些其他限制,如果运行在windows环境 要手动指定改为 MD5SHA1

作者说只保证在apache下正确运行,我试了一下 nginx 下也暂时没遇到什么问题。

以后域密码也可以在前端直接管理了。

一些补充

密码库文件需要放在php能合法访问的路径,所以不能像最初那样存放在一个和 wwwroot 不相关不可访问的路径。
这样就带来了安全性的问题,万一整个密码文件被下载了前面的功夫几乎等于白做。
建议加上nginx 规则或其他手段,确保这个文件不可被浏览器直接访问或下载。

例如在vhost中加上以下内容 (仅仅由于我把密码库文件命名为 *.db 后缀,并不是必须)

location ~ .*\.(db)$
{
    deny all;
}

标签: php, auth

添加新评论