Flask项目含SECRET_KEY默认值的config.py是否可安全提交到代码仓库?
关于Flask配置中SECRET_KEY安全性的问题解答
问题1答复
这个config.py文件可以正常提交到公开代码仓库,该写法的设计初衷就是避免把生产密钥硬编码提交到仓库。
但如果你没有在部署环境配置对应的SECRET_KEY环境变量,Cookie加密的安全性会完全被破坏:此时程序会直接使用代码中硬编码的默认字符串作为加密密钥,相当于密钥完全公开。
问题2答复
你的理解完全正确。如果部署时运行环境未配置SECRET_KEY,所有能访问代码仓库的人都可以拿到这个默认密钥,能直接解密、伪造你的应用签发的所有加密Cookie,包括用户会话Cookie,可随意伪装成任意用户访问你的应用,风险极高。
最佳实践建议
- 本地开发阶段可以不用特意配置环境变量,使用默认密钥不影响功能调试
- 生产部署必须提前配置SECRET_KEY环境变量,为了避免操作失误漏配,可以修改校验逻辑,未读到有效环境变量时直接阻止程序启动,示例代码如下:
import os class Config: SECRET_KEY = os.environ.get('SECRET_KEY') if not SECRET_KEY: raise RuntimeError("Please set SECRET_KEY environment variable before running in production")
- 生产环境使用的SECRET_KEY建议通过
python -c "import secrets; print(secrets.token_hex(32))"生成足够随机的32位以上字符串,不要使用简单易猜的内容。
内容的提问来源于stack exchange,提问作者Doptima
相关产品推荐
相关产品推荐

