Ответ
Валидировать необходимо абсолютно все входящие данные, независимо от HTTP-метода. Принцип "никогда не доверяй пользовательскому вводу" (Never Trust User Input) является фундаментальным в веб-безопасности.
Злоумышленник может подделать любой аспект запроса, поэтому проверке подлежат:
- Тело запроса (
Request Body): Данные из форм, JSON. Обычно вPOST,PUT,PATCH. - Параметры URL (
Query Parameters): Данные после?в URL. Обычно вGET. - Параметры пути (
Path Parameters): Динамические части URL, например,idв/users/{id}. - Заголовки (
Headers): Например,User-Agent,Accept-Language, кастомные заголовки. - Cookies: Данные, хранимые на клиенте.
Пример валидации GET-параметра в FastAPI:
from fastapi import FastAPI, Query, HTTPException
import re
app = FastAPI()
@app.get("/search/")
def search_items(q: str | None = Query(None, min_length=3, max_length=50)):
# FastAPI автоматически валидирует длину `q`
# Добавим ручную проверку на допустимые символы
if q and not re.match(r'^[a-zA-Z0-9s]+$', q):
raise HTTPException(status_code=400, detail="Invalid characters in search query")
if q:
return {"results": f"Searching for '{q}'..."}
return {"results": "No query provided."}
Вывод: Любая информация, поступающая извне системы, потенциально опасна и должна быть строго проверена перед использованием.