1. 输入验证: 使用 Pydantic 模型来定义请求和响应的数据结构,以及输入参数的类型。Pydantic 提供了强大的数据验证和转换功能,可以帮助防止不良输入。
from pydantic import BaseModel
class Item(BaseModel):
name: str
description: str = None
2. 路径参数和查询参数验证: 使用路径参数和查询参数时,确保对输入进行验证。FastAPI 支持在路径操作中使用参数的方式来验证输入。
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id: int, query_param: str = None):
return {"item_id": item_id, "query_param": query_param}
3. 身份验证: 使用 FastAPI 提供的 Depends 和 fastapi.security 模块来进行身份验证。支持的身份验证方式包括 OAuth2、API 密钥、Cookie 等。
from fastapi import Depends, FastAPI, HTTPException
from fastapi.security import OAuth2PasswordBearer
app = FastAPI()
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
@app.get("/items/")
async def read_items(token: str = Depends(oauth2_scheme)):
return {"token": token}
4. 密码哈希: 使用密码哈希库(例如 Passlib)来安全地存储和验证用户密码。避免在数据库中存储明文密码。
from passlib.context import CryptContext
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
def verify_password(plain_password, hashed_password):
return pwd_context.verify(plain_password, hashed_password)
def get_password_hash(password):
return pwd_context.hash(password)
5. HTTPS: 在生产环境中始终使用 HTTPS,以加密数据在传输过程中的安全性。配置反向代理(例如 Nginx 或 Apache)来提供 HTTPS 支持。
uvicorn main:app --host 0.0.0.0 --port 8000 --ssl-keyfile=key.pem --ssl-certfile=cert.pem
6. 跨域资源共享(CORS): 如果你的应用允许跨域请求,请使用 FastAPI 内置的 fastapi.middleware.cors.CORSMiddleware 中间件进行配置,以确保安全的跨域资源共享。
from fastapi.middleware.cors import CORSMiddleware
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
这些步骤是确保 FastAPI 应用程序基本安全性的一部分。在开发和部署应用程序时,还需要考虑其他方面,如错误处理、日志记录、数据库安全、安全头部设置等。不断了解和遵循最新的 Web 安全最佳实践是确保应用程序安全性的关键。
转载请注明出处:http://www.zyzy.cn/article/detail/7390/FastAPI