PÔhjalik juhend FastAPI rakenduste turvamiseks CORS-i ja turbe pÀiste abil, tagades kaitse levinud veebiohtude eest.
FastAPI Turvalisus: CORS ja turbe pÀised robustsete API-de jaoks
TĂ€napĂ€eva omavahel ĂŒhendatud digimaastikul on oma API-de turvalisus esmatĂ€htis. FastAPI, kaasaegne, kĂ”rge jĂ”udlusega veebiraamistik API-de loomiseks Pythoniga, pakub suurepĂ€raseid tööriistu ja funktsioone robustsete turvameetmete rakendamiseks. See pĂ”hjalik juhend sĂŒveneb kahe kriitilise aspekti FastAPI turvalisuses: Cross-Origin Resource Sharing (CORS) ja turbe pĂ€ised. Neid tehnikaid mĂ”istes ja rakendades saate oluliselt parandada oma API kaitset levinud veebiohtude eest.
MÔistes CORS-i (Cross-Origin Resource Sharing)
CORS on brauseri turvamehhanism, mis piirab veebilehti, et takistada neil tegemast pÀringuid teisele domeenile kui see, kust veebileht pÀrineb. See poliitika on kehtestatud selleks, et takistada pahatahtlikel veebisaitidel ilma nÔuetekohase loata juurdepÀÀsu tundlikule andmetele teistelt veebisaitidelt. Ilma CORS-ita vÔiks kahjulik veebisait potentsiaalselt teha volitamata pÀringuid teie API-sse sisselogitud kasutaja nimel, mis viib andmete lekkimiseni vÔi muude turvalisusrikkumisteni.
Miks CORS on vajalik?
Kujutage ette stsenaariumi, kus kasutaja on sisse logitud oma internetipanga kontole. Samal ajal kĂŒlastab ta pahatahtlikku veebisaiti. Ilma CORS-ita vĂ”iks pahatahtlik veebisait potentsiaalselt tĂ€ita JavaScript-koodi, mis saadab pĂ€ringuid kasutaja pangandus-API-sse, kandes raha ĂŒle rĂŒndaja kontole. CORS takistab seda, kehtestades vaikimisi sama-pĂ€ritolu poliitika.
Kuidas CORS töötab
Kui brauser teeb cross-origin pÀringu (pÀring teisele domeenile kui praegune leht), teeb ta esmalt "preflight" pÀringu HTTP OPTIONS meetodil. See preflight pÀring kontrollib serveriga, et teha kindlaks, kas tegelik pÀring on lubatud. Server vastab pÀistega, mis nÀitavad, millised domeenid, meetodid ja pÀised on lubatud. Kui brauser otsustab, et pÀring on lubatud serveri vastuse pÔhjal, jÀtkab ta tegeliku pÀringuga. Vastasel juhul pÀring blokeeritakse.
"PĂ€ritolu" mÀÀratletakse protokolli (nt HTTP vĂ”i HTTPS), domeeni (nt example.com) ja pordi (nt 80 vĂ”i 443) jĂ€rgi. Kaks URL-i loetakse sama pĂ€ritolu omavaks ainult siis, kui kĂ”ik kolm neist komponentidest ĂŒhtivad tĂ€pselt.
CORS-i konfigureerimine FastAPI-s
FastAPI lihtsustab CORS-i konfigureerimise protsessi CORSMiddleware abil. Saate selle middleware'i lisada oma FastAPI rakendusse CORS-i lubamiseks ja lubatud domeenide, meetodite ja pÀiste mÀÀramiseks.
Siin on pÔhi nÀide CORS-i lubamisest FastAPI-s:
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
origins = [
"http://localhost",
"http://localhost:8080",
"https://example.com",
"https://*.example.com", # Lubab kÔik example.com alamdomeenid
]
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"]
allow_headers=["*"]
)
@app.get("/")
async def read_root():
return {"message": "Hello, World!"}
Selles nÀites:
allow_origins: MÀÀrab lubatud domeenide loendi, mis vĂ”ivad teha cross-origin pĂ€ringuid. Kasutades["*"]lubab kĂ”ik domeenid, mis ĂŒldiselt ei ole soovitatav tootmiskeskkondades. Selle asemel mÀÀrake tĂ€psed lubatud domeenid.allow_credentials: NĂ€itab, kas lubada cross-origin pĂ€ringutesse kaasa arvatud volitused (nt kĂŒpsised, autoriseerimispead). Selle seadmine vÀÀrtuseleTruenĂ”uabAccess-Control-Allow-OriginpĂ€ise seadmist konkreetsele domeenile, mitte*.allow_methods: MÀÀrab lubatud HTTP meetodite loendi cross-origin pĂ€ringute jaoks. Kasutades["*"]lubab kĂ”ik meetodid. Turvalisuse suurendamiseks saate seda piirata konkreetsete meetoditega nagu["GET", "POST", "PUT", "DELETE"].allow_headers: MÀÀrab lubatud HTTP pĂ€iste loendi cross-origin pĂ€ringutes. Kasutades["*"]lubab kĂ”ik pĂ€ised. Turvalisuse suurendamiseks kaaluge piiramist ainult vajalike pĂ€istega.
CORS-i konfigureerimise parimad tavad
- VĂ€ltige
["*"]kasutamistallow_originsjaoks tootmises: see avab teie API pÀringutele mis tahes domeenilt, mis vÔib olla turvarisk. Selle asemel loetlege selgesÔnaliselt lubatud domeenid. - Olge lubatud meetodite ja pÀiste osas tÀpne: Luba ainult need meetodid ja pÀised, mida teie rakendus tegelikult vajab.
- MÔistke
allow_credentialstagajĂ€rgi: Kui lubate volitusi, veenduge, et mĂ”istate turvalisusega seotud tagajĂ€rgi ja konfigureerite oma serveri vastavalt. - Vaadake regulaarselt oma CORS-i konfiguratsiooni ĂŒle: Teie rakenduse arenedes vĂ”ib teie CORS-i konfiguratsiooni vaja minna vĂ€rskendamist, et peegeldada muutusi lubatud domeenides, meetodites vĂ”i pĂ€istes.
Turbe pÀiste rakendamine
Turbe pĂ€ised on HTTP vastuse pĂ€ised, mis annavad brauserile juhiseid, kuidas teie veebisaidi vĂ”i API kĂ€sitlemisel kĂ€ituda. Need aitavad leevendada erinevaid veebiohte, nagu Cross-Site Scripting (XSS), Clickjacking ja muud rĂŒnnakud. Nende pĂ€iste Ă”ige seadistamine on teie FastAPI rakenduse kaitsmiseks ĂŒlioluline.
Levinud turbe pÀised ja nende tÀhtsus
Content-Security-Policy (CSP): See pĂ€is on vĂ”imas tööriist XSS-rĂŒnnakute ennetamiseks. See vĂ”imaldab teil mÀÀrata valge nimekirja allikatest, kust brauser tohib laadida ressursse nagu skriptid, stiilid ja pildid.X-Frame-Options: See pĂ€is kaitseb Clickjacking-rĂŒnnakute eest, takistades teie veebisaidi sisestamist teise veebisaidi raami.Strict-Transport-Security (HSTS): See pĂ€is sunnib brauserit alati kasutama HTTPS-i teie veebisaidi kĂŒlastamisel, ennetades man-in-the-middle rĂŒnnakuid.X-Content-Type-Options: See pĂ€is takistab brauseril faile tĂ”lgendamast erineva MIME tĂŒĂŒbina kui on deklareeritudContent-TypepĂ€ises, leevendades MIME sniffingu ohte.Referrer-Policy: See pĂ€is kontrollib, kui palju viitaja teavet (eelneva lehekĂŒlje URL) saadetakse pĂ€ringutega.Permissions-Policy(endine Feature-Policy): See pĂ€is vĂ”imaldab teil kontrollida, milliseid brauseri funktsioone (nt kaamera, mikrofon, geograafiline asukoht) teie veebisaidil lubatakse kasutada.
Turbe pÀiste seadistamine FastAPI-s
Kuigi FastAPI-l pole sisseehitatud middleware'i turbe pÀiste seadistamiseks, saate seda hÔlpsalt saavutada kohandatud middleware'i vÔi kolmanda osapoole teegi nagu starlette-security abil vÔi otse pÀiste seadistamisega oma vastustes.
NĂ€ide kohandatud middleware'i kasutamisega:
from fastapi import FastAPI, Request, Response
from starlette.middleware import Middleware
from starlette.responses import JSONResponse
app = FastAPI()
async def add_security_headers(request: Request, call_next):
response: Response = await call_next(request)
response.headers["Content-Security-Policy"] = "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; object-src 'none'; media-src 'self'; frame-ancestors 'none'; upgrade-insecure-requests; block-all-mixed-content;"
response.headers["X-Frame-Options"] = "DENY"
response.headers["X-Content-Type-Options"] = "nosniff"
response.headers["Referrer-Policy"] = "strict-origin-when-cross-origin"
response.headers["Strict-Transport-Security"] = "max-age=31536000; includeSubDomains; preload"
response.headers["Permissions-Policy"] = "geolocation=(), camera=(), microphone=()"
return response
app.middleware("http")(add_security_headers)
@app.get("/")
async def read_root():
return {"message": "Hello, World!"}
Selles nĂ€ites lisatakse FastAPI rakendusele add_security_headers middleware. See middleware pĂŒĂŒab kinni iga pĂ€ringu ja lisab vastusele mÀÀratud turbe pĂ€ised. Jaotame pĂ€ised lahti:
Content-Security-Policy: See on keeruline pĂ€is, mis mÀÀrab erinevate ressursitĂŒĂŒpide lubatud allikad. Selles nĂ€ites lubab see ressursse samast domeenist ('self'), sisemisi skripte ja stiile ('unsafe-inline'- kasutada ettevaatlikult), andmete URI-sid piltide jaoks (data:) ja keelab objektielemendid (object-src 'none'). Samuti seadistab seeframe-ancestors 'none'clickjacking-i vĂ€ltimiseks.upgrade-insecure-requestskĂ€sib brauseril uuendada kĂ”ik ebaturvad (HTTP) URL-id HTTPS-iks.block-all-mixed-contenttakistab brauseril laadimast segatud sisu (HTTP sisu HTTPS-i lehel). Selle pĂ€ise kohandamine teie konkreetse rakenduse vajadustele vastavaks on kriitilise tĂ€htsusega. Vale CSP konfiguratsioon vĂ”ib teie veebisaidi rikkuda.X-Frame-Options: Seadistatud vÀÀrtuseleDENY, et takistada lehe sisestamist mis tahes domeeni poolt. Alternatiivina lubabSAMEORIGINsisestamist ainult sama domeeni poolt.X-Content-Type-Options: Seadistatud vÀÀrtuselenosniff, et vĂ€ltida MIME sniffingu.Referrer-Policy: Seadistatud vÀÀrtuselestrict-origin-when-cross-origin, et saata pĂ€ritolu (protokoll + host) viitajana teisele domeenile navigeerimisel ja null viitajana samale domeenile navigeerimisel.Strict-Transport-Security: MÀÀrab poliitika, mis sunnib brauserit kasutama HTTPS-i mÀÀratud aja jooksul (max-age).includeSubDomainstagab, et kĂ”ik alamdomeenid on samuti HTTPS-iga kaitstud.preloadvĂ”imaldab domeeni lisada HSTS eelkoormamise loendisse, mis on brauseritesse sisseehitatud. Pange tĂ€hele, etpreloadkasutamine nĂ”uab, et teie sait oleks esitatud ja vastu vĂ”etud HSTS eelkoormamise loendisse.Permissions-Policy: MÀÀrab, millised funktsioonid (nt geograafiline asukoht, kaamera, mikrofon) on brauseris lubatud kasutada. Selles nĂ€ites on kĂ”ik keelatud.
Peamised kaalutlused turbe pÀiste osas:
Content-Security-Policykohandage hoolikalt: See on kÔige keerulisem turbe pÀis ja selle Ôige konfigureerimine on kriitilise tÀhtsusega, et vÀltida teie veebisaidi rikkumist. Kasutage turvalise ja tÔhusa poliitika loomiseks CSP generaatorit vÔi validaatorit.- Testige oma turbe pÀiseid: Kasutage veebisaidi turbe pÀiste testimiseks ja vÔimalike probleemide tuvastamiseks veebitööriistu nagu SecurityHeaders.com.
- JÀlgige oma turbe pÀiseid: JÀlgige regulaarselt oma turbe pÀiseid, et veenduda nende jÀtkuvas tÔhususes ja et muudatusi pole vaja.
- Kaaluge sisu edastamise vÔrgu (CDN) kasutamist: Paljud CDN-id pakuvad sisseehitatud turbe pÀiste haldamise funktsioone, mis vÔivad lihtsustada teie turbe pÀiste seadistamise ja hooldamise protsessi.
Lisaks CORS-ile ja turbe pÀistele
Kuigi CORS ja turbe pÀised on API turvalisuse jaoks hÀdavajalikud, ei ole need ainsad meetmed, mida te peaksite vÔtma. Muud olulised turvalisuse kaalutlused hÔlmavad:
- Autentimine ja volitus: Rakendage robustseid autentimis- ja volitusmehhanisme, et tagada ainult volitatud kasutajatel juurdepÀÀs teie API-le. Autentimiseks kaaluge OAuth 2.0 vÔi JWT (JSON Web Tokens) kasutamist.
- Sisendi valideerimine: Valideerige kogu kasutaja sisend, et vĂ€ltida sisestusĂŒnnakuid (nt SQLi sisestus, XSS).
- PĂ€ringute piiramine: Rakendage pĂ€ringute piiramist, et vĂ€ltida teenuse keelamise (DoS) rĂŒnnakuid.
- Logimine ja jÀlgimine: Logige kÔik API pÀringud ja jÀlgige oma API-d kahtlase tegevuse osas.
- Regulaarsed turbe auditid: Viige lÀbi regulaarsed turbe auditid, et tuvastada ja lahendada kÔik vÔimalikud turvaaugud.
- Hoidke sÔltuvused ajakohased: VÀrskendage regulaarselt oma FastAPI versiooni ja kÔiki selle sÔltuvusi, et parandada turvaauke.
JĂ€reldus
Oma FastAPI API-de turvamine nĂ”uab mitmekĂŒlgset lĂ€henemist. CORS-i Ă”ige rakendamise ja sobivate turbe pĂ€iste seadistamisega saate oluliselt vĂ€hendada erinevate veebiohtude riski. Pidage meeles, et oma turvakonceerimist regulaarselt ĂŒle vaadata ja vĂ€rskendada, et pĂŒsida aja jooksul arenevate ohtudega kaasas. Laiahaardelise turvapoliitika omaksvĂ”tmine, sealhulgas autentimine, sisendi valideerimine, pĂ€ringute piiramine ja jĂ€lgimine, on kriitilise tĂ€htsusega robustsete ja turvaliste API-de loomiseks, mis kaitsevad teie kasutajaid ja teie andmeid. Nende meetmete rakendamine, kuigi potentsiaalselt keeruline, on vajalik investeering, et tagada teie rakenduste pikaajaline turvalisus ja stabiilsus tĂ€napĂ€eva ohumaastikul.