Tüm makaleler

Basic Authentication: bir HTTP kaynağını korumanın en basit yolu nasıl çalışır

HTTP Basic Authentication, bir kaynağı şifreyle korumanın en eski ve en basit yollarından biridir: tarayıcı kullanıcı adı ve şifre ister, bunlar her istekle birlikte sunucuya gönderilir. Bu basitlik aynı zamanda en büyük zayıflığıdır.

Authorization başlığı nasıl oluşur

Kullanıcı adı ve şifre iki nokta üst üste ile birleştirilir (kullaniciadi:sifre), ardından tüm dize Base64 ile kodlanıp Authorization: Basic <kodlanmis_dize> başlığına yerleştirilir. Tarayıcı, ilk başarılı girişten sonra bu başlığı sonraki her istekte otomatik olarak yeniden gönderir.

Base64 neden güvenlik değildir

Base64 bir şifreleme değil, bir kodlama şemasıdır: herhangi biri hiçbir anahtara ihtiyaç duymadan dizeyi saniyeler içinde tekrar kullaniciadi:sifre haline çözebilir. İstek ele geçirilirse — örneğin korumasız bir açık Wi-Fi ağında — kimlik bilgileri anında ifşa olur.

Türkçe I/İ sorunu ve büyük/küçük harf tuzağı

Base64 kodlaması Türkçe karakterleri (ç, ğ, ı, ö, ş, ü) sorunsuz işler — bunlar UTF-8'de her biri 2 bayt kaplar ve şifre "İstanbul123" gibi bir metin, aynı uzunluktaki ASCII bir şifreden daha uzun bir Base64 çıktısı üretir. Asıl klasik tuzak farklı bir yerde: kullanıcı adı doğrulaması yapan sunucu kodu, büyük/küçük harf dönüşümünde toUpperCase()/toLowerCase() kullanıyorsa, Türkçe kültür ayarında "i" harfi "I" değil "İ" harfine, "I" harfi ise "ı" değil "i" harfine dönüşebilir — bu da aynı kullanıcı adının farklı ortamlarda beklenmedik şekilde eşleşmemesine yol açabilir.

Ne işe yarar

  • Geliştirme aşamasında bir staging sunucusunu veya dahili bir aracı hızlıca şifreyle korumak.
  • curl veya Postman ile bir API'yi manuel test etmek için doğru Authorization başlığını oluşturmak.
  • Basic Auth'un düz HTTP üzerinden neden ciddi bir güvenlik açığı sayıldığını anlamak.

Basic Auth'ta yerleşik bir çıkış yapma mekanizması yoktur

Tarayıcı, kimlik bilgilerini önbelleğe alır ve sekme kapatılana kadar aynı origin'e yapılan her sonraki isteğe Authorization başlığını otomatik olarak ekler — protokol standart bir "çıkış yap" düğmesi içermez. Bir kullanıcıyı zorla çıkışa zorlamak için sunucular hileye başvurur: kasıtlı olarak farklı bir realm değeriyle 401 döndürmek veya kullanıcının tüm tarayıcı sekmelerini kendisinin kapatmasına güvenmek gibi.

Aracı dene