本文目录
什么是 htpasswd?
htpasswd 文件是一种平面文件数据库,Apache 和 Nginx 网页服务器用它来存储用于 HTTP 基本认证的用户名和哈希密码。每一行包含一个用户名和一段密码哈希,两者以冒号分隔,例如 admin:$2y$10$abc...。该文件提供了一种无需完整认证后端即可保护网页资源的简便方式。
htpasswd 工具最初是 Apache HTTP Server 项目的一部分,但其文件格式已成为众多网页服务器、反向代理和开发工具支持的事实标准。现代 htpasswd 生成器支持包括 bcrypt、SHA-1 和 MD5 在内的多种哈希算法,其中 bcrypt 是安全性方面的推荐选择。
htpasswd 的生成原理
生成一条 htpasswd 记录,需要用选定的算法对明文密码进行哈希,并将其与用户名一同格式化。所得哈希的强度取决于算法及其配置。
- bcrypt($2y$)——最安全的选项,采用可配置的开销因子(默认为 10)来控制每次哈希的计算成本,使暴力破解变得不切实际
- SHA-1({SHA})——生成经 Base64 编码的 SHA-1 摘要,并以 {SHA} 作为前缀;速度快于 bcrypt,但在面对现代基于 GPU 的攻击时明显更弱
- MD5($apr1$)——Apache 自定义的 MD5 变体,带有随机盐值;这一遗留格式仍受支持,但由于存在已知弱点,不建议用于新部署
免费试用 —— 无需注册
生成 htpasswd 记录 →htpasswd 的常见用途
对于那些配置完整认证系统显得多余的轻量级访问控制场景,基于 htpasswd 的认证被广泛采用。
- 预发布站点保护——限制对预生产环境的访问,仅允许团队成员和相关方查看进行中的工作
- 管理面板安全——在 CMS 管理面板、数据库管理工具或监控仪表盘前增加一层额外的认证
- 开发环境访问控制——无需搭建 OAuth 或 LDAP,即可保护本地或共享的开发服务器免遭未授权访问
常见问题
htpasswd 应该用 bcrypt、SHA-1 还是 MD5?
只要条件允许,请始终使用 bcrypt。bcrypt 专为密码哈希而设计,其可配置的开销因子使它能够抵御暴力破解。SHA-1 和 MD5 是快速哈希函数,并非为密码而设计——它们被破解的速度可能比 bcrypt 快上好几个数量级。某些较旧的 Apache 版本可能不支持 bcrypt,但任何现代安装版本都支持。
我应该把 htpasswd 文件放在服务器的什么位置?
请将 htpasswd 文件存放在网页根目录之外,以防它被提供给访客下载。常见位置是 /etc/apache2/.htpasswd 或 /etc/nginx/.htpasswd。然后在服务器配置中通过 AuthUserFile(Apache)或 auth_basic_user_file(Nginx)引用它。切勿将其放在可公开访问的目录中。
HTTP 基本认证的安全性足以用于生产环境吗?
基本认证会在每次请求中以 Base64 编码文本(并非加密)的形式发送凭据,因此必须始终在 HTTPS 上使用。即便使用了 HTTPS,它也缺少会话管理、速率限制和账户锁定等功能。它适用于预发布站点或内部工具等低风险场景,但面向用户的生产环境认证应采用带有基于令牌会话的正规认证系统。