Cookie'lere Secure, HttpOnly, SameSite özelliklerini otomatik ekleyebilir miyim?
Kısa cevap
Evet, HTTP vService'te HTTP Cookie Security aksiyonuyla. Cookie Security Options listesinden Mark as Secure, Mark as HttpOnly ve Mark as SameSite=Strict seçilir; öznitelikler yanıttaki bütün Set-Cookie başlıklarına eklenir. Secure yalnızca HTTPS yanıtlarında eklenir; SameSite seçeneği çerezdeki mevcut SameSite değerini Strict ile değiştirir. SameSite=Lax gibi farklı bir değer ya da yalnızca belirli bir çerez için Replace HTTP Header Content kullanılır; TR7'nin kendi oturum kalıcılığı çerezlerinin bayrakları Security Flags ya da Cookie Based Connection Persistency ayarlarından yönetilir.
Sorun: Uygulamanın Çerezleri Güvenlik Özniteliği Taşımıyor
Oturum çerezlerinde Secure, HttpOnly ve SameSite öznitelikleri yoksa çerezler şifresiz bağlantıda gönderilebilir, sayfadaki script'lerle okunabilir ve siteler arası isteklerde kullanılabilir. Güvenlik denetimleri bu özniteliklerin eklenmesini ister; uygulama kodu her zaman değiştirilemez.
Çözüm: Üç Yöntem
| Durumunuz | Uygun yöntem |
|---|---|
| Bütün çerezlere Secure, HttpOnly, SameSite=Strict eklemek | Yöntem 1: HTTP Cookie Security |
| SameSite=Lax gibi farklı bir değer ya da yalnızca tek bir çerez | Yöntem 2: Replace HTTP Header Content |
| TR7'nin oturum kalıcılığı için eklediği çerez | Yöntem 3: Security flags / Cookie Based Connection Persistency |
Yöntem 1: HTTP Cookie Security Önerilen
- Nasıl çalışır Seçilen öznitelikler TR7'den çıkan bütün yanıtlardaki Set-Cookie başlıklarına eklenir; çerezde zaten Secure ya da HttpOnly varsa ikinci kez eklenmez, mevcut SameSite değeri Strict ile değiştirilir. Aksiyon koşul almaz.
- Nerede açılırLoad Balancer → Actions → HTTP Cookie Security → Cookie Security Options
- Gereksinim En az bir seçim
- vService tipi HTTP
Adım adım yapılandırma
Load Balancer → Actions → Add tıklanır (nasıl eklenir).
Action Name girilir, Action Type = HTTP cookie security seçilir. Cookie Security Options listesinden Mark as Secure, Mark as HttpOnly ve Mark as SameSite=Strict işaretlenir (özniteliklerin uygulanma biçimi).
Add tıklanır.
Load Balancer → Load Balancer vService List ekranında HTTP vService seçilip Edit tıklanır.
Save tıklanır. Değişiklik açık bağlantılar kopmadan uygulanır; cluster'da varsayılan auto-sync ile eş cihaza da gönderilir (Manual Sync Mode açıksa Synchronize ile).
Üç seçenek birlikte işaretliyken HTTPS yanıtlarındaki sonuç:
| Kurum Servisinin gönderdiği Set-Cookie | İstemcinin aldığı Set-Cookie |
|---|---|
SESSIONID=abc; Path=/ | SESSIONID=abc; Path=/; Secure; HttpOnly; SameSite=Strict |
SESSIONID=abc; Path=/; Secure | SESSIONID=abc; Path=/; Secure; HttpOnly; SameSite=Strict |
lang=tr; HttpOnly | lang=tr; HttpOnly; Secure; SameSite=Strict |
secure_token=1; Path=/ | secure_token=1; Path=/; HttpOnly; SameSite=Strict (çerezin adında secure geçtiği için Secure eklenmez) |
Doğrulama
curl -skI https://www.example.com/ | grep -i set-cookie
; Secure; HttpOnly; SameSite=StrictTarayıcının geliştirici araçlarında Application/Storage → Cookies bölümünde çerezin bayrakları görülür.
Secure ✓ · HttpOnly ✓ · SameSite StrictYöntem 2: Replace HTTP Header Content
- Nasıl çalışır Set-Cookie başlığı regex ile yeniden yazılır; yalnızca kalıba uyan çerez (ör.
SESSIONID) değişir, istenen SameSite değeri yazılır. - Nerede açılırLoad Balancer → Actions → Replace HTTP Header Content
- Gereksinim Kalıp büyük/küçük harfe duyarlıdır; Match type = Replace whole header
- vService tipi HTTP
Adım adım yapılandırma
Load Balancer → Actions → Add tıklanır.
Action Name girilir, Action Type = Replace HTTP header content seçilir: Execution Level = On response, Header to Replace = Set-Cookie, Regex to Match = ^(SESSIONID=.*); *SameSite=[A-Za-z]+(.*)$, Match Type = Replace whole header (varsayılan; Set-Cookie değerindeki tarihler virgül içerdiği için virgülle bölen seçenek kullanılmaz), Replacement Content = \1\2. Kalıp büyük/küçük harfe duyarlıdır; Kurum Servisi özniteliği samesite= gibi farklı yazıyorsa kalıp aynı yazımla kurulur. Kurum Servisi çereze hiç SameSite eklemiyorsa bu aksiyon atlanır.
Add tıklanır.
Load Balancer → Actions → Add tıklanır.
Action Name girilir, Action Type = Replace HTTP Header Content seçilir; Execution Level = On response, Header to Replace = Set-Cookie, Regex to Match = ^(SESSIONID=.*)$, Replacement Content = \1; SameSite=Lax (cookie senaryosu).
Add tıklanır.
Load Balancer → Load Balancer vService List ekranında HTTP vService seçilip Edit tıklanır.
Details → Actions alanında önce kaldıran, sonra ekleyen aksiyon seçilir.
Save tıklanır.
İki aksiyonun örnek değerlerdeki sonucu:
| Set-Cookie | Sonuç |
|---|---|
SESSIONID=abc; Path=/; HttpOnly | SESSIONID=abc; Path=/; HttpOnly; SameSite=Lax |
SESSIONID=abc; SameSite=None; Secure | SESSIONID=abc; Secure; SameSite=Lax |
lang=tr; Path=/, XSESSIONID=1 | Değişmez (kalıp başta SESSIONID= arar) |
Doğrulama
curl -skI https://www.example.com/giris | grep -i set-cookie
SESSIONID=…; SameSite=Lax (tek SameSite)Yöntem 3: TR7'nin Oturum Kalıcılığı Çerezi
- Nasıl çalışır TR7'nin oturum kalıcılığı için kendi eklediği çerezin bayrakları bu çerezi oluşturan ayarda seçilir.
- Nerede açılır vService → Session Affinity Manager (SAM) → Security Flags · Actions → Cookie Based Connection Persistency
- Gereksinim Çerez tabanlı oturum kalıcılığı kullanan vService
- vService tipi HTTP
Adım adım yapılandırma
SAM kullanılıyorsa vService Edit ile açılır ve Session Affinity Manager (SAM) bölümüne gidilir; Cookie Based Connection Persistency kullanılıyorsa Load Balancer → Actions ekranında aksiyon Edit ile açılır.
SAM'de Security Flags alanında HttpOnly, Secure (HTTPS only), SameSite=Strict ya da SameSite=Lax seçilir. Cookie Based Connection Persistency'de Mark as Secure ve Mark as Only HTTP işaretlenir (Session Affinity Manager (SAM) nedir; klasik cookie persistence'tan farkı ne?).
vService formunda Save, aksiyon düzenleme formunda formun altındaki Edit tıklanır.
Doğrulama
curl -skI https://www.example.com/ | grep -i set-cookie
Kalıcılık çerezinde seçilen bayraklarSık Yapılan Hatalar
- HTTP yanıtlarında Secure beklemek. Secure yalnızca HTTPS yanıtlarında eklenir.
- Lax ya da None değerinin korunacağını sanmak. Mark as SameSite=Strict mevcut SameSite değerini Strict ile değiştirir; farklı bir değer için Yöntem 2 kullanılır.
- SameSite=Strict'in her uygulamaya uyduğunu sanmak. Strict, başka sitelerden gelen bağlantılarda çerezi göndermez; tek oturum açma (SSO) ve ödeme dönüşleri gibi akışları bozabilir. Bu akışlarda Lax seçilir.
- Adında
secureya dahttponlygeçen çerezlerde bayrak beklemek. HTTP Cookie Security, Set-Cookie değerinde bu sözcüklerden birini bulursa ilgili bayrağı zaten var sayar; bu çerezler için Yöntem 2 ile bayrak eklenir. - Set-Cookie için virgülle bölen eşleştirme seçmek. Expires tarihi virgül içerir; Replace HTTP Header Content'te Match type = Replace whole header kullanılır.
- Cookie encryption ile karıştırmak. Cookie encryption çerezin değerini şifreler; öznitelik eklemez.
Dokümantasyonda nasıl yapılır
