扫描二维码
关注或者微信搜一搜:编程智域 前端至全栈交流与成长
发现1000+提升效率与开发的AI工具和实用程序:https://tools.cmdragon.cn/
1. FastAPI安全基础架构
通过内置的OAuth2和JWT支持,FastAPI提供了开箱即用的安全解决方案。典型的认证流程如下:
graph TD A[用户请求] --> B[认证中间件] B --> C{凭证验证} C -->|通过| D[颁发访问令牌] C -->|失败| E[返回401错误] D --> F[携带令牌访问资源] F --> G[权限验证] G -->|授权| H[返回数据] G -->|拒绝| I[返回403错误]
JWT 认证流程
python
from fastapi import Depends, HTTPException
from jose import JWTError, jwt
from passlib.context import CryptContext
# 配置参数
SECRET_KEY = "your-secret-key-here"
ALGORITHM = "HS256"
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
def verify_password(plain_password, hashed_password):
return pwd_context.verify(plain_password, hashed_password)
def create_access_token(data: dict):
return jwt.encode(data, SECRET_KEY, algorithm=ALGORITHM)
async def get_current_user(token: str = Depends(oauth2_scheme)):
try:
payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])
return payload.get("sub")
except JWTError:
raise HTTPException(status_code=401, detail="Invalid credentials")
(安装要求:python-jose[cryptography]3.3.0 passlib1.7.4)
OAuth2 密码流
使用依赖注入系统实现权限层级:
python
from fastapi.security import OAuth2PasswordBearer
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
class RoleChecker:
def __init__(self, allowed_roles: List[str]):
self.allowed_roles = allowed_roles
def __call__(self, user: User = Depends(get_current_user)):
if user.role not in self.allowed_roles:
raise HTTPException(403, "Operation forbidden")
OWASP Top5防御实现
漏洞对应表
OWASP 风险项 | FastAPI 防护措施 |
---|---|
注入攻击 | Pydantic 数据验证 + ORM 参数化查询 |
失效的身份认证 | JWT 签名验证 + 密码哈希存储 |
敏感数据泄露 | 自动生成的API文档过滤敏感字段 |
XML 外部实体 | 默认禁用XML解析器 |
失效的访问控制 | 基于角色的权限依赖注入系统 |
以SQL注入防护为例的代码实现:
python
# 安装依赖:fastapi==0.68.0 pydantic==1.10.7 sqlalchemy==1.4.36
from fastapi import Depends
from pydantic import BaseModel
from sqlalchemy import text
class QueryParams(BaseModel):
product_id: int
@app.get("/products/")
async def get_products(
params: QueryParams = Depends(),
db: Session = Depends(get_db)
):
# 使用参数化查询防御SQL注入
result = db.execute(
text("SELECT * FROM products WHERE id = :product_id"),
{"product_id": params.product_id}
)
return result.fetchall()
3. 自动化安全工具链配置
工具链集成方案:
yaml
# security_pipeline.yml
stages:
- test
- scan
bandit:
stage: test
script:
- pip install bandit==1.7.4
- bandit -r ./app
dependency-check:
stage: scan
script:
- wget https://jeremylong.github.io/DependencyCheck/dependency-check-7.1.1-release.zip
- ./dependency-check.sh --project "MyAPI" --scan ./src
扫描工具组合
bash
# 代码审计
bandit -r ./ --severity-level high
# 依赖检查
safety check --full-report
# 容器扫描
trivy image --severity CRITICAL my-api:latest
CI/CD 集成示例
yaml
steps:
- name: Security Scan
run: |
bandit -r ./ --format json --output bandit.json
safety check --json > safety.json
trivy fs --severity HIGH,CRITICAL . > trivy.txt
4. 应急响应处理机制
应急流程图
graph TD A[监控系统告警] --> B{确认攻击类型} B -->|注入攻击| C[立即隔离实例] B -->|凭证泄露| D[强制密码重置] C --> E[分析日志溯源] D --> F[撤销相关令牌]
日志配置示例
python
import logging
from fastapi import Request
@app.middleware("http")
async def log_requests(request: Request, call_next):
logger.info(f"Request: {request.method} {request.url}")
response = await call_next(request)
logger.info(f"Response: {response.status_code}")
return response
典型的安全事件处理流程:
graph LR A[事件检测] --> B[初步评估] B --> C{严重等级} C -->|高危| D[启动应急小组] C -->|中危| E[限时修复] C -->|低危| F[常规处理] D --> G[系统隔离] G --> H[漏洞分析] H --> I[修复验证] I --> J[系统恢复]
课后Quiz:
Q: 当API返回422 Validation Error时,首要检查点是什么?
A: 应检查请求体是否符合Pydantic模型定义,特别是数据类型和必填字段。使用curl命令重放请求时添加-v参数查看原始请求数据。
当收到 JWTExpiredError 时应如何处理?
- A) 忽略错误继续操作
- B) 强制用户重新登录
- C) 自动延长令牌有效期
答案:B。根据安全最佳实践,令牌过期后必须通过正规认证流程重新获取,不能自动续期以防止会话劫持。
常见报错处理:
问题:JWT验证失败返回403
解决方案:
- 检查令牌有效期(exp字段)
- 验证签名算法是否匹配
- 确认令牌携带方式正确(Authorization: Bearer模式)
- 调试模式开启时禁用生产环境证书
余下文章内容请点击跳转至 个人博客页面 或者 扫码关注或者微信搜一搜:编程智域 前端至全栈交流与成长
,阅读完整的文章:FastAPI如何玩转安全防护,让黑客望而却步?
往期文章归档:
- 如何用三层防护体系打造坚不可摧的 API 安全堡垒? - cmdragon's Blog
- FastAPI安全加固:密钥轮换、限流策略与安全头部如何实现三重防护? - cmdragon's Blog
- 如何在FastAPI中巧妙玩转数据脱敏,让敏感信息安全无忧? - cmdragon's Blog
- RBAC权限模型如何让API访问控制既安全又灵活? - cmdragon's Blog
- FastAPI中的敏感数据如何在不泄露的情况下翩翩起舞?
- FastAPI安全认证的终极秘籍:OAuth2与JWT如何完美融合? - cmdragon's Blog
- 如何在FastAPI中打造坚不可摧的Web安全防线? - cmdragon's Blog
- 如何用 FastAPI 和 RBAC 打造坚不可摧的安全堡垒? - cmdragon's Blog
- FastAPI权限配置:你的系统真的安全吗? - cmdragon's Blog
- FastAPI权限缓存:你的性能瓶颈是否藏在这只"看不见的手"里? | cmdragon's Blog
- FastAPI日志审计:你的权限系统是否真的安全无虞? | cmdragon's Blog
- 如何在FastAPI中打造坚不可摧的安全防线? | cmdragon's Blog
- 如何在FastAPI中实现权限隔离并让用户乖乖听话? | cmdragon's Blog
- 如何在FastAPI中玩转权限控制与测试,让代码安全又优雅? | cmdragon's Blog
- 如何在FastAPI中打造一个既安全又灵活的权限管理系统? | cmdragon's Blog
- FastAPI访问令牌的权限声明与作用域管理:你的API安全真的无懈可击吗? | cmdragon's Blog
- 如何在FastAPI中构建一个既安全又灵活的多层级权限系统? | cmdragon's Blog
- FastAPI如何用角色权限让Web应用安全又灵活? | cmdragon's Blog
- FastAPI权限验证依赖项究竟藏着什么秘密? | cmdragon's Blog
- 如何用FastAPI和Tortoise-ORM打造一个既高效又灵活的角色管理系统? | cmdragon's Blog
- JWT令牌如何在FastAPI中实现安全又高效的生成与验证? | cmdragon's Blog
- 你的密码存储方式是否在向黑客招手? | cmdragon's Blog
- 如何在FastAPI中轻松实现OAuth2认证并保护你的API? | cmdragon's Blog
- FastAPI安全机制:从OAuth2到JWT的魔法通关秘籍 | cmdragon's Blog
- FastAPI认证系统:从零到令牌大师的奇幻之旅 | cmdragon's Blog
- FastAPI安全异常处理:从401到422的奇妙冒险 | cmdragon's Blog
- FastAPI权限迷宫:RBAC与多层级依赖的魔法通关秘籍 | cmdragon's Blog
- JWT令牌:从身份证到代码防伪的奇妙之旅 | cmdragon's Blog
- FastAPI安全认证:从密码到令牌的魔法之旅 | cmdragon's Blog
- 密码哈希:Bcrypt的魔法与盐值的秘密 | cmdragon's Blog
- 用户认证的魔法配方:从模型设计到密码安全的奇幻之旅 | cmdragon's Blog
- FastAPI安全门神:OAuth2PasswordBearer的奇妙冒险 | cmdragon's Blog
- OAuth2密码模式:信任的甜蜜陷阱与安全指南 | cmdragon's Blog
- API安全大揭秘:认证与授权的双面舞会 | cmdragon's Blog
- 异步日志监控:FastAPI与MongoDB的高效整合之道 | cmdragon's Blog
- FastAPI与MongoDB分片集群:异步数据路由与聚合优化 | cmdragon's Blog
免费好用的热门在线工具
- CMDragon 在线工具 - 高级AI工具箱与开发者套件 | 免费好用的在线工具
- 应用商店 - 发现1000+提升效率与开发的AI工具和实用程序 | 免费好用的在线工具
- CMDragon 更新日志 - 最新更新、功能与改进 | 免费好用的在线工具
- 支持我们 - 成为赞助者 | 免费好用的在线工具
- AI文本生成图像 - 应用商店 | 免费好用的在线工具
- 临时邮箱 - 应用商店 | 免费好用的在线工具
- 二维码解析器 - 应用商店 | 免费好用的在线工具
- 文本转思维导图 - 应用商店 | 免费好用的在线工具
- 正则表达式可视化工具 - 应用商店 | 免费好用的在线工具
- 文件隐写工具 - 应用商店 | 免费好用的在线工具
- IPTV 频道探索器 - 应用商店 | 免费好用的在线工具
- 快传 - 应用商店 | 免费好用的在线工具
- 随机抽奖工具 - 应用商店 | 免费好用的在线工具
- 动漫场景查找器 - 应用商店 | 免费好用的在线工具
- 时间工具箱 - 应用商店 | 免费好用的在线工具
- 网速测试 - 应用商店 | 免费好用的在线工具
- AI 智能抠图工具 - 应用商店 | 免费好用的在线工具
- 背景替换工具 - 应用商店 | 免费好用的在线工具
- 艺术二维码生成器 - 应用商店 | 免费好用的在线工具
- Open Graph 元标签生成器 - 应用商店 | 免费好用的在线工具
- 图像对比工具 - 应用商店 | 免费好用的在线工具
- 图片压缩专业版 - 应用商店 | 免费好用的在线工具
- 密码生成器 - 应用商店 | 免费好用的在线工具
- SVG优化器 - 应用商店 | 免费好用的在线工具
- 调色板生成器 - 应用商店 | 免费好用的在线工具
- 在线节拍器 - 应用商店 | 免费好用的在线工具
- IP归属地查询 - 应用商店 | 免费好用的在线工具
- CSS网格布局生成器 - 应用商店 | 免费好用的在线工具
- 邮箱验证工具 - 应用商店 | 免费好用的在线工具
- 书法练习字帖 - 应用商店 | 免费好用的在线工具
- 金融计算器套件 - 应用商店 | 免费好用的在线工具
- 中国亲戚关系计算器 - 应用商店 | 免费好用的在线工具
- Protocol Buffer 工具箱 - 应用商店 | 免费好用的在线工具
- IP归属地查询 - 应用商店 | 免费好用的在线工具
- 图片无损放大 - 应用商店 | 免费好用的在线工具
- 文本比较工具 - 应用商店 | 免费好用的在线工具
- IP批量查询工具 - 应用商店 | 免费好用的在线工具
- 域名查询工具 - 应用商店 | 免费好用的在线工具
- DNS工具箱 - 应用商店 | 免费好用的在线工具
- 网站图标生成器 - 应用商店 | 免费好用的在线工具
- XML Sitemap