pexels_temp

FastAPI’de CORS Yapılandırması: Kapsamlı Rehber

FastAPI’de CORS (Cross-Origin Resource Sharing) Yapılandırması: Kapsamlı Rehber

FastAPI uygulamalarınızda güvenli ve etkili CORS yapılandırması için adım adım rehber.

İçindekiler

  1. Giriş: CORS Nedir ve Neden Önemlidir?
  2. CORS’un Temel Kavramları
  3. FastAPI ve CORS Entegrasyonu
  4. FastAPI’de CORS Middleware Kullanımı
  5. Detaylı Yapılandırma Örnekleri
  6. Güvenlik Önlemleri ve Dikkat Edilmesi Gerekenler
  7. Örnek FastAPI CORS Uygulaması
  8. CORS Sorun Giderme
  9. Sonuç

Giriş: CORS Nedir ve Neden Önemlidir?

CORS (Cross-Origin Resource Sharing), web tarayıcılarının bir web sayfasının farklı bir domainden kaynaklara (örneğin, API’ler, fontlar, JavaScript dosyaları) erişmesini kontrol eden bir güvenlik mekanizmasıdır. Aynı-kaynak ilkesi (Same-Origin Policy), tarayıcıların bir kaynaktan (origin) yüklenen JavaScript kodunun, farklı bir kaynaktan verilere erişmesini varsayılan olarak engeller. CORS, bu kısıtlamayı aşmak ve belirli kaynaklar arası isteklere izin vermek için kullanılır.

CORS’un önemi, web uygulamalarının farklı domainlerdeki API’lerle güvenli bir şekilde iletişim kurabilmesini sağlamasıdır. Modern web uygulamaları genellikle farklı backend hizmetlerinden veri çeker ve bu hizmetler farklı domainlerde barındırılabilir. CORS, bu tür senaryolarda güvenlik risklerini minimize ederken işlevselliği artırır.

CORS’un Temel Kavramları

  • Origin: Bir kaynağın (örneğin, bir web sayfasının) protokolü (örneğin, HTTP veya HTTPS), domain adı (örneğin, example.com) ve port numarası (örneğin, 80 veya 443) kombinasyonudur.
  • Same-Origin Policy: Tarayıcıların bir origin’den yüklenen JavaScript kodunun, yalnızca aynı origin’den verilere erişmesine izin veren bir güvenlik ilkesidir.
  • Preflight Request: Tarayıcının sunucuya, gerçek isteği göndermeden önce CORS izinlerini kontrol etmek için gönderdiği bir OPTIONS isteğidir.
  • Access-Control-Allow-Origin: Sunucunun cevabında bulunan ve hangi originlerin kaynağa erişmesine izin verildiğini belirten bir HTTP başlığıdır.

FastAPI ve CORS Entegrasyonu

FastAPI, modern ve hızlı bir Python web framework’üdür. CORS yapılandırmasını kolaylaştırmak için `starlette.middleware.cors` modülünü kullanır. FastAPI uygulamalarında CORS’u etkinleştirmek, middleware eklemek kadar basittir.

FastAPI’de CORS Middleware Kullanımı

FastAPI uygulamanıza CORS middleware eklemek için aşağıdaki adımları izleyin:

  1. Gerekli paketleri yükleyin: pip install fastapi starlette uvicorn
  2. CORS middleware’i uygulamanıza ekleyin.

Örnek kod:


from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware

app = FastAPI()

origins = [
    "http://localhost",
    "http://localhost:8080",
    "https://example.com",
]

app.add_middleware(
    CORSMiddleware,
    allow_origins=origins,
    allow_credentials=True,
    allow_methods=["GET", "POST", "PUT", "DELETE", "OPTIONS"],
    allow_headers=["*"],
)

@app.get("/")
async def read_root():
    return {"message": "Merhaba Dünya!"}
    

Detaylı Yapılandırma Örnekleri

CORS middleware’inin farklı yapılandırma seçenekleri mevcuttur. İşte bazı yaygın örnekler:

Tüm Originlere İzin Verme

Tüm originlere izin vermek için `allow_origins` parametresini `[“*”]` olarak ayarlayın. Ancak, bu yapılandırma güvenlik açısından riskli olabilir ve yalnızca geliştirme veya test ortamlarında kullanılması önerilir.


app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["GET", "POST", "PUT", "DELETE", "OPTIONS"],
    allow_headers=["*"],
)
      

Belirli Originlere İzin Verme

Sadece belirli originlere izin vermek için `allow_origins` parametresine izin verilen originlerin bir listesini sağlayın.


origins = [
    "http://localhost",
    "http://localhost:8080",
    "https://example.com",
]

app.add_middleware(
    CORSMiddleware,
    allow_origins=origins,
    allow_credentials=True,
    allow_methods=["GET", "POST", "PUT", "DELETE", "OPTIONS"],
    allow_headers=["*"],
)
      

Credentials İzinleri

Credentials (örneğin, çerezler veya HTTP kimlik doğrulama başlıkları) göndermesine izin vermek için `allow_credentials` parametresini `True` olarak ayarlayın. Bu durumda, `allow_origins` parametresi `[“*”]` olamaz ve belirli originlerin belirtilmesi gerekir.


origins = [
    "http://localhost",
    "http://localhost:8080",
    "https://example.com",
]

app.add_middleware(
    CORSMiddleware,
    allow_origins=origins,
    allow_credentials=True,
    allow_methods=["GET", "POST", "PUT", "DELETE", "OPTIONS"],
    allow_headers=["*"],
)
      

HTTP Metotlarına Göre İzinler

Sadece belirli HTTP metotlarına izin vermek için `allow_methods` parametresine izin verilen metotların bir listesini sağlayın.


app.add_middleware(
    CORSMiddleware,
    allow_origins=origins,
    allow_credentials=True,
    allow_methods=["GET", "POST", "OPTIONS"],
    allow_headers=["*"],
)
      

Header İzinleri

İstemcinin hangi HTTP başlıklarını göndermesine izin verildiğini belirtmek için `allow_headers` parametresini kullanın. Tüm başlıkları izin vermek için `[“*”]` kullanabilirsiniz, ancak güvenlik için yalnızca gerekli başlıkları belirtmek daha iyidir.


app.add_middleware(
    CORSMiddleware,
    allow_origins=origins,
    allow_credentials=True,
    allow_methods=["GET", "POST", "PUT", "DELETE", "OPTIONS"],
    allow_headers=["Content-Type", "Authorization"],
)
      

Güvenlik Önlemleri ve Dikkat Edilmesi Gerekenler

  • Tüm Originlere İzin Vermekten Kaçının: Geliştirme dışında tüm originlere izin vermek güvenlik risklerini artırır.
  • Gerekli Başlıkları Belirtin: `allow_headers` parametresinde sadece gerekli başlıkları belirtmek, saldırı yüzeyini azaltır.
  • Credentials’ı Dikkatli Kullanın: `allow_credentials=True` kullanıldığında, `allow_origins` parametresinin belirli originleri içermesi gerekir.
  • Preflight İsteklerini İzleyin: Tarayıcıların gönderdiği OPTIONS isteklerini izleyerek CORS yapılandırmanızın doğru çalıştığından emin olun.

Örnek FastAPI CORS Uygulaması

Aşağıdaki örnek, basit bir FastAPI uygulamasında CORS’un nasıl yapılandırılacağını gösterir:


from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware

app = FastAPI()

origins = [
    "http://localhost",
    "http://localhost:8080",
    "https://example.com",
]

app.add_middleware(
    CORSMiddleware,
    allow_origins=origins,
    allow_credentials=True,
    allow_methods=["GET", "POST", "PUT", "DELETE", "OPTIONS"],
    allow_headers=["Content-Type", "Authorization"],
)

@app.get("/")
async def read_root():
    return {"message": "Merhaba Dünya!"}

@app.post("/items/")
async def create_item(item: dict):
    return item
    

Bu uygulamayı çalıştırmak için:

  1. Dosyayı `main.py` olarak kaydedin.
  2. uvicorn main:app --reload komutunu kullanarak uygulamayı başlatın.

CORS Sorun Giderme

CORS hataları genellikle tarayıcı konsolunda görüntülenir. En yaygın hatalardan bazıları şunlardır:

  • “No ‘Access-Control-Allow-Origin’ header is present on the requested resource.”
  • “The value of the ‘Access-Control-Allow-Origin’ header in the response is not equal to the origin of the request.”
  • “Response to preflight request doesn’t pass access control check: It does not have HTTP ok status.”

Bu hataları gidermek için CORS yapılandırmanızı dikkatlice kontrol edin ve gerekli izinlerin doğru şekilde ayarlandığından emin olun. Tarayıcı önbelleğini temizlemek de faydalı olabilir.

Sonuç

FastAPI’de CORS yapılandırması, web uygulamalarınızın farklı domainlerdeki kaynaklara güvenli bir şekilde erişmesini sağlamak için önemlidir. Bu rehberde, CORS’un temel kavramlarını, FastAPI’de CORS middleware’inin nasıl kullanılacağını ve farklı yapılandırma örneklerini inceledik. Güvenlik önlemlerine dikkat ederek ve CORS sorunlarını giderme yöntemlerini öğrenerek, FastAPI uygulamalarınızda etkili ve güvenli CORS yapılandırması yapabilirsiniz.

Tüm hakları saklıdır © 2024

Leave A Comment

Your email address will not be published. Required fields are marked *