扫描二维码

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

发现1000+提升效率与开发的AI工具和实用程序https://tools.cmdragon.cn/

一、密钥轮换自动化机制

实现方案

  1. 使用环境变量存储密钥(避免硬编码)
  2. 定时任务自动生成密钥(cronjob/celery)
  3. 双密钥过渡机制(新旧密钥并存)
# 安装依赖:pip install python-jose[cryptography]==3.3.0
from jose import JWTError, jwt
from fastapi import Depends, HTTPException
import os
import secrets
from apscheduler.schedulers.background import BackgroundScheduler # 密钥管理类
class KeyManager:
def __init__(self):
self.current_key = self._generate_key()
self.previous_key = None def _generate_key(self):
return secrets.token_urlsafe(64) def rotate_key(self):
self.previous_key = self.current_key
self.current_key = self._generate_key() # 初始化密钥管理器
key_manager = KeyManager() # 定时任务(每小时轮换)
scheduler = BackgroundScheduler()
scheduler.add_job(key_manager.rotate_key, 'interval', hours=1)
scheduler.start() # JWT验证依赖
async def validate_token(token: str = Depends(oauth2_scheme)):
try:
# 尝试用当前密钥解析
payload = jwt.decode(token, key_manager.current_key, algorithms=["HS256"])
except JWTError:
try:
# 尝试用旧密钥解析(过渡期)
payload = jwt.decode(token, key_manager.previous_key, algorithms=["HS256"])
except JWTError:
raise HTTPException(status_code=401, detail="Invalid token")
return payload

二、请求频率限制防护

分层防护策略

# 安装依赖:pip install slowapi==0.1.7 redis==4.5.5
from fastapi import FastAPI, Request
from fastapi.middleware.cors import CORSMiddleware
from slowapi import Limiter, _rate_limit_exceeded_handler
from slowapi.util import get_remote_address
from slowapi.errors import RateLimitExceeded
import redis # Redis连接(分布式环境)
redis_client = redis.Redis(host='localhost', port=6379, db=0) limiter = Limiter(
key_func=get_remote_address,
storage_uri="redis://localhost:6379/0",
strategy="fixed-window"
) app = FastAPI()
app.state.limiter = limiter
app.add_exception_handler(RateLimitExceeded, _rate_limit_exceeded_handler) # 全局限制:每分钟100次
@app.get("/api/public")
@limiter.limit("100/minute")
async def public_api(request: Request):
return {"data": "public"} # 严格限制:每秒2次
@app.get("/api/secure")
@limiter.limit("2/second")
async def secure_api(request: Request):
return {"data": "secure"}

三、安全头部强化配置

CSP+HSTS中间件配置

from fastapi import FastAPI
from fastapi.middleware.httpsredirect import HTTPSRedirectMiddleware
from fastapi.middleware.trustedhost import TrustedHostMiddleware app = FastAPI() # 强制HTTPS
app.add_middleware(HTTPSRedirectMiddleware) # 安全头部中间件
@app.middleware("http")
async def security_headers(request, call_next):
response = await call_next(request)
# 添加安全头部
response.headers["Strict-Transport-Security"] = "max-age=31536000; includeSubDomains"
response.headers["Content-Security-Policy"] = "default-src 'self'; script-src 'self' 'unsafe-inline'"
response.headers["X-Content-Type-Options"] = "nosniff"
response.headers["X-Frame-Options"] = "DENY"
return response

课后Quiz

  1. 问题:当JWT验证同时需要检查新旧密钥时,代码应该如何优化?

    答案:使用密钥链验证机制,优先尝试当前密钥,失败后自动尝试历史密钥

  2. 问题:当API收到大量来自同一IP的请求时,如何快速定位异常?

    答案:通过Redis的MONITOR命令实时观察请求计数,结合日志分析请求特征


常见报错处理

错误代码 原因分析 解决方案
429 Too Many Requests 请求超出速率限制 检查limiter配置,临时提高阈值或优化业务逻辑
401 Unauthorized 密钥轮换后旧token失效 实现双密钥过渡期,强制客户端定期刷新token
500 Internal Error CSP策略过严导致资源加载失败 使用Content-Security-Policy-Report-Only模式调试策略

以上实现方案通过密钥动态管理、分层限流策略和安全头部三重防护,可有效提升FastAPI应用的安全性。实际部署时建议结合KMS服务和WAF进行深度防护。

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

,阅读完整的文章:FastAPI安全加固:密钥轮换、限流策略与安全头部如何实现三重防护?

往期文章归档:

免费好用的热门在线工具

FastAPI安全加固:密钥轮换、限流策略与安全头部如何实现三重防护?的更多相关文章

  1. Java限流策略

    概要 在大数据量高并发访问时,经常会出现服务或接口面对暴涨的请求而不可用的情况,甚至引发连锁反映导致整个系统崩溃.此时你需要使用的技术手段之一就是限流,当请求达到一定的并发数或速率,就进行等待.排队. ...

  2. RabbitMQ消费端限流策略(十)

    消费端限流: 什么是消费端限流? 场景: 我们RabbitMQ服务器有上万条未处理的消息,我们随便打开一个消费者客户端,会出现下面情况: 巨量的消息瞬间全部推送过来,但是我们单个客户端无法同时处理这么 ...

  3. 基于redis实现的四种常见的限流策略

    引言 在web开发中功能是基石,除了功能以外运维和防护就是重头菜了.因为在网站运行期间可能会因为突然的访问量导致业务异常.也有可能遭受别人恶意攻击 所以我们的接口需要对流量进行限制.俗称的QPS也是对 ...

  4. 互联网进行限流策略的Semaphore信号量使用

    在Semaphore信号量非常适合高并发访问,新系统在上线之前,要对系统的访问量进行评估,当然这个值肯定不是随便拍拍脑袋就能想出来的,是经过以往的经验.数据.历年的访问量,已经推广力度进行一个合理的评 ...

  5. Anno 框架 增加缓存、限流策略、事件总线、支持 thrift grpc 作为底层传输

    github 地址:https://github.com/duyanming/dymDemo dym 分布式开发框架 Demo 熔断 限流 事件总线(包括基于内存的.rabbitmq的) CQRS D ...

  6. .Net Core结合AspNetCoreRateLimit实现限流

    前言 相信使用过WebApiThrottle的童鞋对AspNetCoreRateLimit应该不陌生,AspNetCoreRateLimit是一个ASP.NET Core速率限制的解决方案,旨在控制客 ...

  7. 45.限流Throttling及源码解析

    什么是限流? 限流类似于权限机制,它也决定是否接受当前请求,用于控制客户端在某段时间内允许向API发出请求的次数,也就是频率 假设有客户端(比如爬虫程序)短时间发起大量请求,超过了服务器能够处理的能力 ...

  8. WebApiThrottle限流框架使用手册

    阅读目录: 介绍 基于IP全局限流 基于IP的端点限流 基于IP和客户端key的端点限流 IP和客户端key的白名单 IP和客户端key自定义限制频率 端点自定义限制频率 关于被拒请求的计数器 在we ...

  9. 服务接口API限流 Rate Limit

    一.场景描述 很多做服务接口的人或多或少的遇到这样的场景,由于业务应用系统的负载能力有限,为了防止非预期的请求对系统压力过大而拖垮业务应用系统. 也就是面对大流量时,如何进行流量控制? 服务接口的流量 ...

  10. 简易RPC框架-客户端限流配置

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

随机推荐

  1. 分布式任务调度系统 xxl-job

    微服务难不难,不难!无非就是一个消费方,一个生产方,一个注册中心,然后就是实现一些微服务,其实微服务的难点在于治理,给你一堆 微服务,如何来管理?这就有很多方面了,比如容器化,服务间通信,服务上下线发 ...

  2. AR 智能生态鱼缸组态远控平台 | 图扑软件

    在工业 4.0 和物联网技术的推动下,万物互联正重塑行业管理模式.组态远控系统作为高效管控的核心,打破了设备孤立状态,实现数据实时交互.以智能生态鱼缸为例,图扑软件低代码数字孪生平台通过集成前沿技术, ...

  3. CH390使用注意事项

    关于CH390使用注意事项 CH390替换DM90xx硬件注意事项 1.CH390L替换DM9000 AVDD33的对地电容建议1uF贴近芯片放置,42脚为主电源AVDD33需10uF并联0.1uF. ...

  4. IDEA target中没有class文件/target中有class没有yml文件/yml文件不显示叶子

    target中没有class文件.表现为文件显示红波浪线,但是点进去自己又好了,但是编译会说找不到.点进入target文件夹发现没有class文件,只有yml文件或者什么都没有 解决方法:rebuil ...

  5. Unbuntu16搭建Kafka环境总结

    1.安装Kafka 环境说明 OS:Ubuntu 16.04 Zookeeper:zookeeper 3.4.5 Kafka:kafka_2.11-0.11.0.0 jdk:jdk8(Kafka启动需 ...

  6. 🔥Elasticsearch(ES)(版本7.x)数据更新后刷新策略RefreshPolicy

    简介 在Elasticsearch 7.x版本中,当更新数据时(例如索引.更新或删除文档),这些更改并不会立即对搜索可见.为了让这些更改能够被搜索到,需要了解和选择合适的刷新策略(Refresh Po ...

  7. python实例:爬取caoliu图片,同时下载到指定的文件夹内

    本脚本主要实现爬取caoliu某图片板块,前3页当天更新的帖子的所有图片,同时把图片下载到对应帖子名创建的文件夹中 爬虫主要通过python xpath来实现,同时脚本内包含,创建文件夹,分割数据,下 ...

  8. PHP获取一个月所有时间

    $j = date("t"); //获取当前月份天数$start_time = strtotime(date('Y-m-01')); //获取本月第一天时间戳$array = ar ...

  9. 大模型应用开发进阶篇:Spring-AI 结合领域驱动开发设计思想

    ​  概要 本文聚焦如何使用spring-AI来开发大模型应用一些进阶技能,包含一套可落地的技术设计模式,读完你将会学习到: 如何使用Spring-AI 开发大模型对话应用 如何综合设计一套适用Spr ...

  10. HMM (隐马尔可夫) 推导 (上) - Viterbi算法求解 隐变量

    认识 跟 EM 算法的那部分是有些类似的思想, 引入 "隐变量" (Latent Variable). 对于观测样本: \(x_1, x_2, x_3, ...x_n\) 存在相对 ...