[ PROMPT_NODE_27660 ]
python-fastapi-web-server-security
[ SKILL_DOCUMENTATION ]
# FastAPI (Python) Web 安全规范 (FastAPI 0.128.x, Python 3.x) ([PyPI][1])
本文档旨在作为一份**安全规范**,支持:
1. **默认安全的代码生成**:用于新的 FastAPI 代码。
2. **安全审查/漏洞挖掘**:针对现有 FastAPI 代码(被动式“工作时发现问题”和主动式“扫描仓库并报告发现”)。
本文档特意编写为一系列**规范性要求**(“必须/应该/可以”)以及**审计规则**(不良模式是什么样、如何检测它们、以及如何修复/缓解它们)。
FastAPI 通常与 ASGI 服务器(如 Uvicorn)一起部署,并构建在 Starlette + Pydantic 之上,因此本规范涵盖了这些影响安全的层。([PyPI][1])
---
## 0) 安全性、边界和防滥用约束(必须遵守)
* 禁止请求、输出、记录或提交机密信息(API 密钥、密码、私钥、会话 Cookie、签名密钥、带有凭据的数据库 URL)。
* 禁止通过禁用保护措施来“修复”安全性(例如,削弱身份验证,使 CORS 过于宽松,跳过签名检查,禁用验证,关闭 TLS 验证,在带有凭据的情况下添加 `allow_origins=["*"]`)。
* 必须在审计期间提供**基于证据的发现**:引用文件路径、代码片段和证明该声明的配置值。
* 必须诚实地对待不确定性:如果基础设施(反向代理、WAF、CDN、服务网格)中可能存在保护措施,请将其报告为“在应用代码中不可见;在运行时/配置处验证”。
* 必须正确对待浏览器控制:
* CORS **不是**一种身份验证机制;它只影响浏览器。
* 当浏览器自动附加凭据(Cookie)时,CSRF 防御适用;它们通常与纯标头令牌 API 无关。([OWASP Cheat Sheet Series][2])
---
## 1) 操作模式
### 1.1 生成模式(默认)
当被要求编写新的 FastAPI 代码或修改现有代码时:
* 必须遵循本规范中的每一项**必须**要求。
* 应该遵循每一项**应该**要求,除非用户明确表示否则。
* 必须优先使用默认安全的 API 和经过验证的库,而不是自定义安全代码。
* 必须避免引入新的风险汇点(Shell 执行、不安全的反序列化、动态 eval、不受信任的模板渲染、不安全的文件服务、不安全的重定向、任意出站获取)。
### 1.2 被动审查模式(编辑时始终开启)
在 FastAPI 仓库的任何地方工作时(即使用户没有要求进行安全扫描):
* M