Icarus 安全机制深度解析:前端 PBKDF2 与后端十万次迭代的双重密码防护 Icarus 安全机制深度解析前端 PBKDF2 与后端十万次迭代的双重密码防护【免费下载链接】Icarus️ An opensource community/forum project write with python3 aiohttp and vue.js. 一个开源的社区程序临时测试站https://t.myrpg.cn项目地址: https://gitcode.com/gh_mirrors/ic/Icarus在社区论坛类开源项目中Icarus 安全机制一直以双端哈希设计著称前端用PBKDF2对密码做第一轮加盐哈希后端再用十万次迭代做第二轮防护明文密码自始至终不落盘、不上网。这篇 Icarus 安全机制深度解析将带你拆解这套双重密码防护的完整链路并给出部署时最值得注意的配置项让新手站长也能看懂背后的原理。为什么需要双重 PBKDF2 密码哈希很多论坛只在服务端存一次哈希这意味着密码在网络传输中是明文一旦被中间人截获就彻底失守。Icarus 的做法是前端先哈希、后端再哈希即使流量被嗅探攻击者拿到的也只是经过 10 万次 PBKDF2 迭代的派生密钥而非原始密码。第一重防护前端 PBKDF2 哈希浏览器内完成Icarus 在前端利用浏览器原生Web Crypto API执行 PBKDF2 派生核心代码在 src/utils/password.ts算法PBKDF2SHA-512迭代次数默认1e5十万次输出长度256 位32 字节盐来自后端下发的USER_SECURE_AUTH_FRONTEND_SALT配置对于不支持crypto.subtle的旧浏览器Icarus 还内置了 asmCrypto 降级方案见 passwordHashAsmCrypto通过动态加载 polyfill 保证兼容性。最终生成的密钥会拼上版本号v01、盐与迭代次数后做 Base64 编码再提交给后端。第二重防护后端十万次迭代哈希Python 侧完成后端接收到前端传来的哈希值后并不会直接存储而是把它当作密码原文再次走一遍 PBKDF2。核心实现位于 gen_password_and_salt每次注册随机生成 32 字节盐os.urandom(32)确保每个用户盐值唯一使用hashlib.pbkdf2_hmac哈希函数为sha512迭代次数由 config.py 中的PASSWORD_SECURE_HASH_ITERATIONS 10_0000控制即十万次登录校验时后端会用存储的盐重新计算并比对见 _auth_base通过后才签发访问令牌。这意味着即使数据库泄露攻击者也难以从十万次迭代的哈希反推出前端密钥更别说原始密码。双重防护的完整登录流程用户在浏览器输入密码前端用 PBKDF2十万次迭代 前端盐生成派生密钥后端收到密钥后再次用 PBKDF2十万次迭代 每用户独立盐计算存储值比对通过生成access_token返回客户端见 signin 接口部署时必改的两个安全配置Icarus 的安全性高度依赖配置文件站长部署时务必修改 config.py 中的两个默认值USER_SECURE_AUTH_FRONTEND_SALT前端哈希用盐注释明确标注务必修改默认值PASSWORD_SECURE_HASH_ITERATIONS后端迭代次数可依据服务器性能适当调高默认十万次已满足 2017 年密码学报告建议更多安全机制登录冷却与注册限流除了密码防护Icarus 还内置了完整的防爆破策略见 config.py账号登录间隔 10 秒USER_SIGNIN_COOLDOWN_BY_ACCOUNT单 IP 注册间隔 10 分钟USER_SIGNUP_COOLDOWN_BY_IP改密与重置密码申请均有 2~5 分钟冷却这些限流与双重 PBKDF2 哈希共同构成了 Icarus 的纵深防御体系对小型社区来说已经相当扎实。理解这套机制你就能在部署时做出更稳妥的安全取舍。【免费下载链接】Icarus️ An opensource community/forum project write with python3 aiohttp and vue.js. 一个开源的社区程序临时测试站https://t.myrpg.cn项目地址: https://gitcode.com/gh_mirrors/ic/Icarus创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考