
# Barındırılan sayfaların ve ön yüz API'sinin web güvenliği

Barındırılan giriş, hesap portalı, e-posta sayfaları (doğrulama, parola sıfırlama, davet) ve bunların çağırdığı tarayıcı API'si her pakette sabit bir web güvenliği temel çizgisini izler. Bu korumalar kapatabileceğiniz ayarlar değildir. Kontrol ettiğiniz tek ayar, hangi web kaynaklarının OAuth uç noktalarını tarayıcıdan çağırabileceğidir.

## Siteler arası istek sahteciliği (CSRF)

Durumu değiştiren istekler, hiçbir şey okunmadan veya değiştirilmeden önce denetlenir:

- **Kaynak denetimi.** Barındırılan giriş API'sine veya bir doğrulama ya da sıfırlama sayfasına yapılan durum değiştiren bir istek, tam olarak ortamın giriş ana makinesi olan bir `Origin` başlığı taşımalıdır. Diğer tüm kaynaklar `origin_not_allowed` ile reddedilir.
- **Onay ekranı.** Onay ekranındaki bir form gönderimi, `Origin` sayfanın kendi ana makinesi değilse veya `Sec-Fetch-Site` mevcut ve `same-origin` değilse reddedilir.
- **Form belirteçleri.** Her giriş işlemi ve her e-posta formu, ortama özgü bir anahtardan HMAC-SHA256 ile türetilmiş kendi CSRF belirtecine sahiptir. Giriş API'si bunu `Idp-Csrf-Token` başlığında bekler; bir formun belirteci başka bir formda çalışmaz. Belirteçler sabit sürede karşılaştırılır.
- **Çerezler.** Giriş durumunu taşıyan çerezler `SameSite=Lax` kullanır (aşağıya bakın), bu yüzden başka bir siteden başlatılan bir istek bunları göndermez.

## Siteler arası istekler (CORS)

CORS yalnızca tarayıcı uygulamasının çağırdığı OAuth uç noktalarında yanıtlanır: belirteç, iptal, itilmiş yetkilendirme isteği ve userinfo uç noktaları. Yalnızca herkese açık tek sayfa uygulamaları (`spa` türü) için geçerlidir.

- İzin verilen kaynakları uygulama bazında `allowed_web_origins` ile ayarlayın (`https://host[:port]`, en fazla 20, joker karakter yok). Bkz. [Uygulama oluşturun](/docs/api/management/applications/create).
- Bir tarayıcının ön uçuş isteği hangi uygulamanın çağırdığını belirtmez, bu yüzden ortamdaki etkin herkese açık tek sayfa uygulamalarının izin verilen kaynaklarının birleşiminden yanıtlanır. Asıl istek ise çağıran uygulamanın kaynak listesine karşı denetlenir.
- Bu uygulamanın listesi dışındaki bir kaynak `403 origin_not_allowed` ile reddedilir ve `Access-Control-Allow-Origin` başlığı almaz.
- İzin verilen bir kaynak tam olarak geri yansıtılır. `*` ve `null` hiçbir zaman gönderilmez, `Access-Control-Allow-Credentials` hiçbir zaman gönderilmez ve her siteler arası yanıt `Vary: Origin` taşır.
- Giriş ana makinesinin kendisinden gelen istekler siteler arası değildir ve etkilenmez.

## Girişten sonra yönlendirmeler

Next.js SDK'sını kullanıyorsanız `returnTo` uygulamanızın kendi yolu olmalıdır. Tam bir URL veya `//evil.example` gibi bir değer yok sayılır ve kullanıcı `/` sayfasına iner. Bkz. [Next.js SDK](/docs/sdk/nextjs).

## Güvenlik başlıkları

Barındırılan sayfalar her yanıtta bu başlıkları ayarlar:

| Başlık | Değer |
|---|---|
| `Content-Security-Policy` | `default-src 'none'`; betikler yalnızca her yanıta özgü taze bir nonce ile; `style-src 'self'`; `connect-src 'self'`; `frame-ancestors 'none'`; `base-uri 'none'`; `object-src 'none'`; `upgrade-insecure-requests`; betikler için Trusted Types gerekli |
| `Reporting-Endpoints` ve `report-to` | Politika ihlalleri aynı ana makinedeki `/u/csp-report` adresine bildirilir |
| `X-Frame-Options` | `DENY`: barındırılan sayfalar bir çerçeve içine gömülemez |
| `X-Content-Type-Options` | `nosniff` |
| `Referrer-Policy` | `no-referrer` |
| `Cross-Origin-Opener-Policy` | `same-origin` |
| `Permissions-Policy` | Kamera, mikrofon, konum, ödeme, USB, seri, HID ve Bluetooth kapalıdır; passkey istekleri sayfanın kendisi için izinlidir |
| `Cache-Control` | `no-store` |

Politika satır içi betiklere ve `unsafe-` anahtar sözcüklerine izin vermez. Form gönderimleri sayfanın kendi ana makinesiyle sınırlıdır; onay ekranında politika ayrıca isteyen uygulamanın yönlendirme adresine de izin verir, böylece karar ona geri dönebilir.

Bildirim uç noktası yalnızca en fazla 8 KiB boyutundaki tarayıcı ihlal raporlarını kabul eder ve IP adresi başına hız sınırlıdır. Raporlar yönergeye göre sayılır. Kaydedildiklerinde sorgu dizgisi, parça veya kullanıcı bilgisi taşımazlar.

### Strict-Transport-Security

- `keenauth.app` üzerindeki ortam ana makineleri `max-age=63072000; includeSubDomains` gönderir.
- Bir [özel alan adı](/docs/guides/custom-domains) yalnızca `max-age=63072000` gönderir, `includeSubDomains` göndermez. KeenAuth alan adınızın diğer alt alan adları hakkında karar veremez, bu seçim size aittir.

## Çerezler

Giriş durumu çerezleri `__Host-` önekiyle adlandırılır; bu sayede tarayıcı bunları yalnızca HTTPS üzerinden, `Path=/` ile ve `Domain` özniteliği olmadan kabul eder. Kardeş alt alan adlarından ayarlanamazlar.

| Çerez | Bayraklar | Amaç |
|---|---|---|
| `__Host-idp_session` | `Secure`, `HttpOnly`, `SameSite=Lax` | Kullanıcının oturumu. Ömrü, oturumun mutlak sona erme süresinde biter |
| `__Host-idp_device` | `Secure`, `HttpOnly`, `SameSite=Lax` | Cihaz tanıma |
| `__Host-idp_ltx` ve `__Host-idp_azr_*` | `Secure`, `HttpOnly`, `SameSite=Lax` | Bir giriş veya yetkilendirme girişimini, onu başlatan tarayıcıya bağlar |
| `__Host-idp_fed_bind` | `Secure`, `HttpOnly`, `SameSite=None` | Kurumsal SAML girişi için kısa ömürlü bağlama. Kimlik sağlayıcı başka bir siteden geri gönderir, bu yüzden `Lax` onu düşürürdü |

Çerez değerleri sayfa betikleri tarafından okunamaz (`HttpOnly`).

## İlgili

- [Kontrol paneli erişim güvenliği](/docs/security/dashboard-access)
- [Kiracı yalıtımı](/docs/security/tenant-isolation)
- [Giriş sayfalarınızı markalaştırın](/docs/guides/branding)
