Python安全无标准术语,需明确场景:禁用eval/exec防RCE;密码存储禁用MD5,须用PBKDF2或Argon2加盐;bandit可扫硬编码密码但不查.env;细节疏漏(如debug=True、字段长度不足)常致生产漏洞。
这个标题没有实际技术指向,无法对应到具体可操作的问题或知识点。
Python 安全系统本身不是标准术语——它可能指代 Web 安全(如 Flask/Django 的 CSRF、SQL 注入防护)、密码学应用(cryptography 库)、沙箱机制、AST 代码审计、或是第三方安全工具(如 bandit、pylint 的安全规则)。
如果你遇到的是以下某类问题,才值得深入:
eval() 在 Web 接口里直接用会触发 RCE?根本原因不是 eval() 本身“危险”,而是它在未过滤用户输入时,把字符串当作 Python 代码执行。攻击者可传入 "__import__('os').system('id')" 这类 payload。
eval()、exec()、compile()
ast.literal_eval()(只支持字面量:数字、字符串、元组、列表、字典等)eval(),就等于绕过整个防护层hashlib.md5() 为什么不能用于密码存储?MD5 是快速哈希,且无盐(salt),现代 GPU 可在一秒内穷举数亿个常见密码。它设计目标是校验完整性,不是抗暴力破解。
hashlib.pbkdf2_hmac() 或更优的 passlib + argon2
User.set_password() 已默认用 PBKDF2bandit 扫描项目里的硬编码密码?bandit 是基于 AST 的静态分析工具,能识别如 password = "123456"、requests.get("http://user:pass@host") 这类高危模式。
bandit -r myproject/
.env 文件,硬编码在环境文件里不会被发现——得靠 dotenv-linter 或 CI 阶段禁止提交含 PASSWORD= 的文件# noqa: B10
5 忽略单行,但别批量禁用规则真正卡住人的,往往不是原理听不懂,而是:
debug=True)带进生产环境;这些细节不写进日志、不报错、不崩溃,但上线后就是漏洞。