HttpOnly ve Secure Flagleri ile Cookie Güvenliği

Cookie bilgisi kullanıcının oturum bilgisini tutar. XSS gibi açıklıklardan faydanılarak bir javascript ile kullanıcıların bu bilgisi çalınabilir. Bu yazımızda bu zafiyetin önüne nasıl geçebilirizi bir örnek ile göstereceğiz.

Örneğin aşağıdaki gibi bir giriş formumuz olsun.

2 - HttpOnly ve Secure Flagleri ile Cookie Güvenliği

Kullanıcı isteğini gerçekleştirdiğinde sunucudan cookie oluşturulur. Client artık bu cookie’yi set eder.

3 1 - HttpOnly ve Secure Flagleri ile Cookie Güvenliği

Bu bilgiye tarayıcadan bir javascript ile erişebiliriz. Örneğin cookie bilgisini javascript ile almak isteyelim.

4 - HttpOnly ve Secure Flagleri ile Cookie Güvenliği

Bu da doğal olarak XSS açıklığı varsa javascript ile bu bilginin çalınabileceği anlamına geliyor. İşte tam bu nokta da bir önlem alarak cookie bilgisinin çalınmasının önüne geçmek için httponly flag’ini kullanırız. Bunun için örnek olarak php kullandığımdan, php yapılandırmasından ilgili flag’i aktif edelim.

session.cookie_httponly = 1

7 - HttpOnly ve Secure Flagleri ile Cookie Güvenliği

Tekrardan login olup başlık bilgisi içerisinde HttpOnly geçtiğini görelim.

6 - HttpOnly ve Secure Flagleri ile Cookie Güvenliği

Şimdi tekrardan tarayıcıdan javascript ile cookie bilgisini almak isteyelim, ama javascript ile de alamadığımızı da görelim.

8 - HttpOnly ve Secure Flagleri ile Cookie Güvenliği

Secure flagi

Diyelim ki sayfanız hem HTTP hem de HTTPS üzerinden erişilebiliyor olsun. Https trafiği ile bildiğiniz üzere veriler uçtan uca şifreli giderken, Http ile şifrelenmemiş halde gider. Eğer oturum bilgisinin HTTPS kanalı üzerinden istemciden sunucuya gitmesini istiyorsanız Set-Cookie başlığına secure flagi eklenmelidir. Bunun için sunucunuzda ilgili yapılandırmayı yapmalısınız. Bu örnekte php kullanılmasından dolayı php yapılandırmasında ilgili flag aşağıdaki gibi aktif edilir.

session.cookie_secure = 1

9 - HttpOnly ve Secure Flagleri ile Cookie Güvenliği

Aktifleştirme sonrası artık sunucudan gelen cevapda ilgili flagi görebilirsiniz.

12 - HttpOnly ve Secure Flagleri ile Cookie Güvenliği

Son yaptığımız ayarı php içinde gerçekleştirdiğimiz için php kullanılmayan cookie’lerde göremeyebilirsiniz. Örneğin yukarıdaki son ekran görüntüsünde sonuncu Set-Cookie ifadesi httponly veya secure ifadesi yer almamış. Peki tüm set-cookie’ler için bunu yapmak istersek nasıl yapabiliriz ? Tabiki sunucunun kendi konfigürasyonunda bunu yapmak gerekir. Örneğin Apache kullanıyorsak apache’de ilgili flagleri aşağıdaki gibi ekletebiliriz. Bu örneğimiz için daha önce php yapılandırırken 1 olarak set ettiğimiz değerlerin tekrardan Apache’de gözükmemesi için 0 olarak değiştirdiğimi düşünün.

Header edit Set-Cookie ^(.*)$ $1;httponly;secure

13 - HttpOnly ve Secure Flagleri ile Cookie Güvenliği