必须校验路径越界并脱敏敏感日志:用path.resolve()检查是否在允许根目录内,匹配password/token等字段时日志替换为。

避免用 exec 或 eval 处理外部输入的数据
数据修复脚本常要解析用户传入的表达式或配置,但直接喂给 exec 或 eval 就等于把 shell 交出去。哪怕只处理 CSV 中一列“计算公式”,攻击者也能塞进 __import__('os').system('rm -rf /')。
- 改用白名单函数 +
ast.literal_eval处理字面量(dict、list、数字、字符串),它不执行任意代码 - 真需要动态计算,用
numexpr或pandas.eval,它们限制作用域、禁用内置函数 - 如果必须用
eval,至少重置globals和locals,只暴露极少数安全函数,比如:{'abs': abs, 'round': round}
读写文件前必须校验路径是否越界
修复脚本常接受 --input 和 --output 路径参数,但没做规范化就直接拼接,容易被 ../../etc/passwd 绕过。Python 的 pathlib.Path 默认不拦截上层跳转。
- 用
pathlib.Path.resolve()获取绝对路径后,检查是否在允许根目录内:if not str(output_path).startswith(str(allowed_root)): - 避免用
os.path.join拼接用户输入——它不会清理../;改用Path.cwd() / user_input再.resolve() - Linux 下注意符号链接:即使路径在白名单内,
resolve()后仍可能指向外部,必要时用Path.samefile()校验真实位置
敏感字段默认不打印、不落日志
修复过程中若遇到含密码、token、身份证号的字段,脚本默认输出或写入 debug 日志,等于把密钥明文存硬盘。尤其当脚本跑在共享服务器或 CI 环境时,风险极高。
小麦企业网站展示系统介绍:一、安装使用将xiaomai.sql导入数据库二、后台登录后台帐号,密码默认都是admin,config.php 配置文件可根据自行需要修改,IP地址,数据库用户名,密码,及表名后台目录默认admin,支持自行任意修改目录名三、注意事项1 本源码完全免费,采用伪静态,减少不必要的源码重复,速度更快,支持二次开发。2、注明本程序编码为UTF8,如发生乱码,请注意修改编码3、
- 用正则预扫描字段值,匹配到敏感模式(如
r'(?i)password|token|idcard')就跳过 print,日志中替换为<redacted></redacted> - 别依赖“只在本地跑”——加一层开关:
if not args.sensitive_logging:控制是否记录原始值 - 用
logging.handlers.RotatingFileHandler时设mode='w'防止旧日志残留敏感内容
用 tempfile 替代手动建临时文件
修复大文件时,常先写中间结果到 /tmp/fix_temp.csv,但硬编码路径有竞态和权限问题:多个实例可能覆盖彼此,或因 umask 导致临时文件可被同组用户读取。
立即学习“Python免费学习笔记(深入)”;
- 一律用
tempfile.NamedTemporaryFile(delete=False),它自动选安全路径、设 0600 权限、避免命名冲突 - 关闭文件句柄后再重命名:
temp_file.close(); os.replace(temp_file.name, final_path),保证原子写入 - Windows 下注意:不能在打开时重命名,所以
delete=False是必须的;Linux 下可用tempfile.mkstemp()配合os.fdopen









