扫描二维码

关注或者微信搜一搜:编程智域 前端至全栈交流与成长

发现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 认证流程

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 密码流

使用依赖注入系统实现权限层级:

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注入防护为例的代码实现:

# 安装依赖: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. 自动化安全工具链配置

工具链集成方案:

# 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

扫描工具组合

# 代码审计
bandit -r ./ --severity-level high # 依赖检查
safety check --full-report # 容器扫描
trivy image --severity CRITICAL my-api:latest

CI/CD 集成示例

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[撤销相关令牌]

日志配置示例

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

解决方案:

  1. 检查令牌有效期(exp字段)
  2. 验证签名算法是否匹配
  3. 确认令牌携带方式正确(Authorization: Bearer模式)
  4. 调试模式开启时禁用生产环境证书

余下文章内容请点击跳转至 个人博客页面 或者 扫码关注或者微信搜一搜:编程智域 前端至全栈交流与成长

,阅读完整的文章:FastAPI如何玩转安全防护,让黑客望而却步?

往期文章归档:

免费好用的热门在线工具

FastAPI如何玩转安全防护,让黑客望而却步?的更多相关文章

  1. WEB安全新玩法 [3] 防护交易数据篡改

    在任何涉及交易的系统中,客户与商家之间的交易数据具有核心作用,如购买商品的价格.数量.型号和优惠券等.在客户挑选商品的过程中,这些交易数据逐渐形成:待客户提交订单时,交易数据被商家接收,形成双方认可的 ...

  2. WEB安全新玩法 [4] 防护邮箱密码重置漏洞

    大部分具有账号系统的应用都会提供重置用户登录密码的功能,常见方式之一是:用户输入自己的邮箱地址或手机号,应用向这个邮箱或手机号发送验证码,用户将收到的验证码输入应用中即可完成密码重置.这一过程容易因设 ...

  3. 应对WannaCry勒索危机之关闭445端口等危险端口——以本人Windows7系统为例

    应对WannaCry勒索危机之关闭445端口等危险端口--以本人Windows7系统为例 近日,全球范围内爆发WannaCry勒索病毒危机 我国很多大学纷纷中招.受灾严重,甚至连刘老师的电脑也-- 拿 ...

  4. 浅析AnyCast网络技术

    什么是BGP AnyCast? BGP anycast就是利用一个(多个) as号码在不同的地区广播相同的一个ip段.利用bgp的寻路原则,短的as path 会选成最优路径(bgp寻路原则之n),从 ...

  5. 图片后门恶意捆绑工具FackImageexploer

    本文作者:夜莺 今天向大家提个醒,最近有一款工具名叫FackImageexploer,该工具能够将恶意的.bat和.exe程序与图片绑定在一起,假若受害者点击了图片,就会反弹个shell给不法分子,如 ...

  6. Tomcat的配置文件Server.xml解析

    配置元素说明: 元素名 属性 解释 server port 指定一个端口,这个端口负责监听关闭tomcat 的请求 shutdown 指定向端口发送的命令字符串 service name 指定serv ...

  7. 系列文章(一):探究电信诈骗的关键问题与应对策略——By Me

    导读:伴随着互联网与移动网的融合,移动互联网变得更加开放.与此同时,伴随着新型的移动互联网服务模式的出现,移动互联网的安全问题也出现了新的形式及特点. 如今,移动互联网遭受到的攻击已严重影响了人们的隐 ...

  8. Tomcat配置和Spring MVC配置

    Tomcat启动时,先找系统变量CATALINA_BASE,如果没有,则找CATALINA_HOME.然后找这个变量所指的目录下的conf文件夹,从中读取配置文件.最重要的配置文件:server.xm ...

  9. 网站开发学习Python实现-Django学习-自学注意(6.1.3)

    @ 目录 1.配置文件相关 2.应用创建相关 3.项目相关 4.模板相关 5.其他 关于作者 1.配置文件相关 1.可以更改时间,地区相关(国际化) 2.BASE_DIR很重要,一个工程要有很好的移植 ...

  10. 700名黑客无法攻破Trillium安全防护软件 欲以网络安全险获利

    盖世汽车讯 据外媒报道,在2017 DEF CON黑客大会上,黑客们受邀入侵Car Hacking Village会场内的各类自动驾驶车辆.物联网网络安全公司--Trillium Incorporat ...

随机推荐

  1. C# 中合并2个 Dictionary

    内置方法 using System.Collections.Generic; using System.Linq; Dictionary<string, object> dicA = ne ...

  2. 【Yuexingfei_qwq的原创游戏】

    好的其实标题里的Yuexingfei_qwq指的是我. 不定时持续更新ing-- 有bug及时回复或私信我哈-- 本文同步发表在以下Blog: 洛谷:https://www.luogu.com.cn/ ...

  3. ZKmall模版商城前后端分离秒级响应架构深度解析

    在当今的电商领域,用户体验和响应速度已成为决定平台竞争力的关键因素.ZKmall模版商城,作为一款高性能的电商平台解决方案,通过采用前后端分离架构,实现了秒级响应,为用户带来了极致的购物体验.本文将深 ...

  4. @ResponseBody 响应 json 数据

    /** * 将json数据封装到bean对象中条件: * 1:json数据中的key名必须和bean对象的属性相同 * 2:添加jsonjar包的支持 * 作用:使用@ResponseBody 注解实 ...

  5. eclipse安装OpenExplorer插件--快速打开文件目录

    eclipse安装OpenExplorer插件--快速打开文件目录功能: 1.下载: github: 下载地址:https://github.com/samsonw/OpenExplorer/down ...

  6. Web前端入门第 33 问:CSS 元素外观常用属性(边框、阴影、轮廓、透明度)

    background 作为元素外观里的重点功臣介绍完毕,本文再一览其他常用的外观属性. 本文示例中,盒子基础样式: .box { font-size: 20px; margin: 20px; padd ...

  7. PC端网页/web通过自定义协议唤起启动windows桌面应用

    PC端网页/web通过自定义协议唤起启动windows桌面应用 步骤: 写注册表 调用 Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\ ...

  8. 零基础搭建AI作曲工具:基于Magenta/TensorFlow的交互式音乐生成系统

    引言:当AI遇见莫扎特 "音乐是流动的建筑",当人工智能开始理解音符间的数学规律,音乐创作正经历着前所未有的范式变革.本文将手把手教你构建一套智能作曲系统,不仅能够生成古典钢琴小品 ...

  9. 使用dtree制作一个简单的网站导航(后台管理)

    目录 效果展示(轻喷) dtree简介 涉及技术 目录结构 各个文件详情 index.html top.html left.html main.html cpright.html dtree下载地址 ...

  10. 【代码】百度语音API|Python|文本朗读

    百度语音合成官方教程_AI开放平台 百度语音合成官方demo_github.com 简单地写了一个按段落朗读文本的demo:DEMO链接_gitee.com. 有时候会请求不到数据,不知道是网络原因还 ...