如何在IIS服务器上为网页设置密码保护
可行存储方案及调用方法
方案1:加密web.config配置节存储(最推荐,适配IIS原生生态)
- 存储位置:将密码哈希存放在web.config的
<system.web><authentication><forms><credentials>节点下,哈希算法建议选择SHA256及以上强度,同时对整个<authentication>配置节执行加密操作,避免配置文件意外泄露导致哈希外泄。
加密操作可以直接使用.NET Framework自带工具执行,以管理员身份打开CMD运行以下命令即可:aspnet_regiis.exe -pe "system.web/authentication" -app "/你的站点名称" - 网页侧调用方法:所有比对逻辑在服务端执行,无需手动读取配置文件,直接调用ASP.NET原生
FormsAuthentication.Authenticate(用户名, 输入密码)方法即可自动完成哈希校验,校验通过后再跳转至受保护页面。
方案2:站点根目录外独立文件存储(适合多站点共享、哈希数量多的场景)
- 存储位置:将加盐后的密码哈希存放在站点根目录之外的路径,比如
C:\iis-secrets\your-site-hashes.json,不要放在站点的wwwroot目录下,避免被外部直接访问下载。同时需要给站点对应的应用程序池身份授予该文件的只读权限。 - 网页侧调用方法:在服务端代码(C#/VB.NET等)中直接读取该文件内容,对用户提交的密码做相同加盐、哈希运算后,和文件中存储的哈希值做比对即可,绝对不要把存储的哈希值返回给前端浏览器。
方案3:IIS基本身份验证配合Windows本地用户(无需自己开发校验逻辑)
如果不需要自定义登录页,可以直接使用IIS自带的基本身份验证功能,不需要自己存储哈希:
- 直接在Windows服务器上创建仅限网站访问的本地用户,设置对应密码,IIS会自动完成密码校验和权限管控,密码哈希由Windows系统原生安全机制存储,不需要自己维护。
注意事项
- 存储密码哈希时必须加盐,不要直接对原始密码做哈希运算,避免被彩虹表破解
- 所有哈希校验逻辑必须在服务端执行,禁止将存储的哈希值暴露给前端
- 如果选择存在web.config中,必须对对应配置节加密,IIS运行时会自动解密,不影响正常使用

内容的提问来源于stack exchange,提问作者Ibrahim Timimi
相关产品推荐
相关产品推荐

