1. 系统与依赖安全管理
保持Ubuntu系统和Python生态的最新状态是安全基础。定期运行sudo apt update && sudo apt upgrade更新系统包,修复内核、库等基础组件的安全漏洞;使用pip list --outdated检查过时的Python依赖,通过pip install --upgrade package_name升级到安全版本。借助safety工具扫描依赖库的已知漏洞(如pip install safety && safety check),避免使用存在公开漏洞的库。同时,推荐使用virtualenv、pipenv或poetry创建隔离的虚拟环境(如python3 -m venv myenv && source myenv/bin/activate),避免全局环境依赖冲突,降低单一组件漏洞的影响范围。
2. 安全编码实践
遵循安全编码规范能有效预防常见漏洞:
isinstance()验证整数、len()限制输入长度),避免恶意输入;使用正则表达式(如re.match(r'^[a-zA-Z0-9]+$', username))或框架提供的验证工具(如Django的forms.Form)过滤非法字符。{{ user_input }});若需输出HTML,使用bleach库进行白名单净化(如bleach.clean(user_content, tags=['b', 'i'])),防止XSS攻击。eval()、exec()等动态执行函数,避免处理不可信数据时触发代码执行;使用subprocess模块时,设置shell=False并通过参数列表传递命令(如subprocess.call(['ffmpeg', '-i', filename, 'output.mp4'])),防止命令注入。os.getenv('DB_PASSWORD')读取)或加密配置文件(如使用cryptography库加密),避免硬编码在代码中。3. 代码审计与漏洞修复
定期进行代码审计是发现潜在漏洞的关键。使用自动化工具快速扫描:Bandit(基于AST的静态分析工具,检测SQL注入、XSS等漏洞,如bandit -r project_dir/)、Flake8(组合PyFlakes、pycodestyle等,检查代码风格与潜在错误)、Prospector(全面审查代码质量与安全)。结合人工审查,重点关注高风险场景:
pickle处理不可信数据,优先用JSON;若必须使用,用hmac库签名验证完整性(如hmac.compare_digest(hmac.new(key, data).hexdigest(), signature))。os.path.normpath()规范化路径,验证路径是否在允许的基目录内(如if not normalized_path.startswith(BASE_DIR): return "禁止访问")。DEBUG模式是否关闭(避免错误信息泄露敏感数据)、CSRF保护是否启用(使用@csrf_protect装饰器)、URL跳转是否使用is_safe_url验证目标地址。4. 运行时安全防护
ufw(Uncomplicated Firewall)限制对Python服务的访问,仅开放必要端口(如sudo ufw allow 8000/tcp用于开发服务器),默认拒绝其他流量(sudo ufw default deny incoming)。logging库记录应用事件(如请求日志、错误日志),设置日志轮转(如logging.handlers.TimedRotatingFileHandler)避免日志过大;结合Prometheus+Grafana监控应用的性能指标(如CPU使用率、内存占用、请求响应时间)和异常行为(如频繁的404请求、异常的数据库查询),及时发现攻击迹象。5. 代码加密与保护
若需进一步保护Python代码,可使用工具加密或混淆:
pip install pyarmor安装,使用pyarmor obfuscate main.py命令加密脚本,生成dist目录下的加密文件,运行时无需额外配置(如python dist/main.py)。python setup.py build,其中setup.py配置executables=[Executable("main.py")]),适用于分发无需Python环境的程序。