FastAPI安全防护指南:构建坚不可摧的参数处理体系

FastAPI安全防护指南:构建坚不可摧的参数处理体系_第1张图片

FastAPI安全防护指南:构建坚不可摧的参数处理体系_第2张图片

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

探索数千个预构建的 AI 应用,开启你的下一个伟大创意


第一章:输入验证体系

1.1 类型安全革命
from pydantic import BaseModel, PaymentCardNumber
from pydantic.types import SecretStr


class UserRequest(BaseModel):
    username: str = Field(min_length=4, regex="^[a-zA-Z0-9_]+$")
    credit_card: PaymentCardNumber
    password: SecretStr
    ip_address: IPv4Address

# 自动完成:
# 1. 信用卡格式验证
# 2. 密码内存加密
# 3. IP地址合法性检测
1.2 深度校验策略
from pydantic import validator, root_validator


class OrderRequest(BaseModel):
    items: list[int]
    total_price: float

    @validator('items', each_item=True)
    def check_item_ids(cls, v):
        if v <= 0:
            raise ValueError("非法商品ID")
        return v

    @root_validator
    def check_price_match(cls, values):
        items = values.get('items')
        price = values.get('total_price')
        # 查询数据库验证价格一致性
        real_price = calc_real_price(items)
        if abs(price - real_price) > 1e-6:
            raise ValueError("价格不匹配")
        return values

第二章:注入攻击防护

2.1 SQL注入防护矩阵
# 危险示例(绝对禁止)
@app.get("/items")
async def get_items(name: str):
    # 直接拼接SQL语句
    query = f"SELECT * FROM items WHERE name = '{
     name}'"
    return await database.fetch_all(query)


# 安全方案
from sqlalchemy import text


@app.get("/items")
async def safe_get_items(name: str):
    # 参数化查询
    query = text("SELECT * FROM items WHERE name = :name")
    return await database.fetch_all(query, {
   "name": name})
2.2 NoSQL注入防护
from bson 

你可能感兴趣的:(fastapi,安全)