- Konu sahibi
- #1
HttpOnly çerez niteliği ne sağlar?
HttpOnly, çerezi document.cookie gibi betiklerin kullandığı HTTP dışı API erişiminden korur; JavaScript bu çerezi okuyamaz ve aynı yolla üzerine yazamaz. Böylece oturum çerezinin
document.cookie üzerinden alınarak dışarı gönderilmesi zorlaşır. Çerez yine de eşleşen HTTP istekleriyle sunucuya gönderilir; yani kullanıcı oturum açmışken normal sayfa ve API istekleri çalışmaya devam eder.Bu nitelik özellikle oturum kimliği taşıyan çerezlerde kullanılmalıdır. Ancak XSS açığını ortadan kaldırmaz: Saldırgan sayfada JavaScript çalıştırabiliyorsa, çerezin değerini okuyamasa bile kullanıcının tarayıcısı üzerinden yetkili istekler göndermeyi deneyebilir. Bu nedenle HttpOnly, XSS korumasının yerine değil, katmanlarından biri olarak düşünülmelidir.
Nasıl çalışır?
Sunucu, oturum çerezini istemciye gönderirken niteliği ekler:
Kod:
Set-Cookie: session=ornek-oturum-degeri; HttpOnly; Secure; SameSite=Lax; Path=/
Bu örnekte:
HttpOnly, JavaScript'in çerez değerinidocument.cookieile okumasını engeller.Secure, çerezin yalnızca HTTPS üzerinden gönderilmesini ister. Geliştirme ortamında HTTPS yoksa davranış test ortamına göre değişebilir.SameSite=Lax, çerezin siteler arası isteklerde otomatik gönderilmesini sınırlar ve CSRF riskini azaltmaya yardımcı olur.- Path=/, çerezin alan adı kapsamındaki tüm yollara uygun olmasını sağlar; Path tek başına bir güvenlik veya uygulamalar arası izolasyon sınırı değildir.
Kullanıcı JavaScript konsolunda
document.cookie çalıştırırsa HttpOnly çerez bu çıktıda görünmez. Buna karşılık tarayıcı, uygun alan adı, yol, HTTPS ve SameSite koşulları sağlandığında çerezi sunucuya yapılan isteğe kendisi ekler.Somut örnek: oturum çerezini korumak
Bir kullanıcı giriş yaptığında uygulama
session adlı çerez oluşturuyor olsun. Çerez HttpOnly olmadan ayarlanırsa kötü amaçlı bir betik, örneğin document.cookie değerini okuyup oturum kimliğini dışarı aktarabilir. HttpOnly eklendiğinde bu doğrudan okuma yolu kapanır.Uygulamanın beklenen sonucu şudur: Kullanıcı giriş yaptıktan sonra normal sayfa ve API istekleri başarılı olur; ancak sayfadaki JavaScript
session değerini okuyamaz. Çerez geliştirici araçlarında ağ isteğinin çerez bölümünde görülebilir, fakat bu görünürlük tarayıcı yönetimi içindir ve JavaScript erişimi anlamına gelmez.| Nitelik | Koruduğu sınır | Tek başına sağlamadığı |
|---|---|---|
| HttpOnly | Betiklerin çerez değerine erişimi | XSS veya CSRF açığının kapanması |
| Secure | Uygun çerezin güvenli taşıma kanalı | Çerez içeriğinin şifrelenmesi |
| SameSite | Siteler arası çerez gönderme koşulları | Bütün iş akışlarında tam CSRF savunması |
Uygulama ve kontrol adımları
- Oturum, kimlik doğrulama ve yenileme çerezlerini belirleyin. Kullanıcı tercihleri gibi JavaScript'in gerçekten okuması gereken çerezleri otomatik olarak HttpOnly yapmayın; aksi durumda istemci tarafı kodu bu değere erişemez.
- Sunucunun çerezi üretirken
HttpOnlyniteliğini eklediğini doğrulayın. Kullanılan framework veya oturum kütüphanesinde güvenli çerez ayarlarını etkinleştirin; yalnızca tarayıcı tarafında yeni çerez oluşturmaya güvenmeyin. - Üretim trafiğinde oturum çerezine
Secureve uygun birSameSitedeğeri de ekleyin. Çerez alan adı vePathkapsamını gerektiğinden geniş tutmayın. - HTTPS üzerinden giriş yapın ve tarayıcı geliştirici araçlarında sunucunun
Set-Cookieyanıtını inceleyin. Çerez ayrıntılarında HttpOnly etkin, Secure ve SameSite değerleri beklenen şekilde görünmelidir. - Uygulamada oturum açma, çıkış yapma, parola değiştirme ve oturum yenileme akışlarını test edin. Oturum kullanılamıyorsa önce alan adı, yol, HTTPS ve SameSite koşullarını kontrol edin; HttpOnly'nin kendisi çerezin sunucuya gönderilmesini engellemez.
HttpOnly'yi yalnızca hassas çerezlerde kullanmak pratik bir yaklaşımdır. Çerezi JavaScript'in okuması gerekmiyorsa varsayılan tercih HttpOnly olmalıdır. JavaScript'in ihtiyaç duyduğu bir erişim belirteci varsa onu HttpOnly olmayan bir çerezde tutmadan önce mimariyi yeniden değerlendirin; erişilebilir belirteçler XSS etkisini büyütebilir.
Sık yapılan hatalar
HttpOnly'nin şifreleme olduğunu sanmak: Bu nitelik çerez değerini şifrelemez; yalnızca istemci tarafı JavaScript erişimini sınırlar.
XSS açığını kapattığını düşünmek: Saldırgan çerezi okuyamasa da sayfada betik çalıştırabiliyorsa kullanıcının yetkisiyle istek gönderebilir. Girdi çıktısı kodlama, içerik güvenliği ve güvenli DOM kullanımı ayrıca ele alınmalıdır.
CSRF koruması yerine kullanmak: HttpOnly çerez, uygun koşullardaki isteklerle birlikte sunucuya gönderilmeye devam eder. Duruma göre SameSite, CSRF belirteci veya Origin/Referer kontrolleri gerekir.
Sık sorulan sorular
HttpOnly çerez geliştirici araçlarında hiç görünmez mi?
Hayır. Tarayıcının depolama veya ağ araçlarında görülebilir. Engellenen şey geliştirici araçlarının gösterimi değil, web sayfasında çalışan JavaScript'in çerez değerini okumasıdır.
HttpOnly API isteklerinde oturum kullanımını engeller mi?
Hayır. İstek çerez kapsamına ve tarayıcı politikalarına uyuyorsa tarayıcı çerezi otomatik gönderir. Ancak farklı kaynaklara yapılan isteklerde SameSite, CORS ve kimlik bilgisi politikaları ayrıca sonucu etkileyebilir.