# Basic Authentication

> HTTP Basic Authentication nedir, nasıl çalışır ve ne zaman kullanılır? Temel kimlik doğrulama yönteminin işleyişi, PHP örneği ve güvenlik değerlendirmesi.

- Yayın: 2024-07-14
- Güncelleme: 2026-10-07
- Kategori: Web Geliştirme
- Okuma süresi: 3 dk okuma
- Kaynak: https://muhammetsafak.com/tr/blog/basic-authentication/
- Dil: tr-TR
- Yazar: Muhammet Şafak

---
> **Kısaca:** HTTP Basic Authentication, her isteğin Authorization başlığında Base64 ile kodlanmış bir kullanıcıadı:şifre çifti gönderir. Base64 şifreleme değil kodlamadır; bu yüzden yalnızca HTTPS üzerinde güvenlidir ve kullanıcı hesabı yönetimine değil, kapalı ağ ve staging ortamlarına uyar.

HTTP Basic Authentication, 1996'dan bu yana [RFC 1945: Hypertext Transfer Protocol -- HTTP/1.0, May 1996](https://www.rfc-editor.org/rfc/rfc1945) içinde tanımlanmış, 1999'da [RFC 2617: HTTP Authentication: Basic and Digest Access Authentication, June 1999](https://www.rfc-editor.org/rfc/rfc2617) içinde yeniden ele alınmış, 2015'ten bu yana da onun yerini alan [RFC 7617: The "Basic" HTTP Authentication Scheme, September 2015](https://www.rfc-editor.org/rfc/rfc7617) içinde yer alan en eski kimlik doğrulama mekanizmalarından biridir. Modern uygulamaların büyük çoğunluğunda OAuth veya [JWT tabanlı çözümler](/tr/blog/jwt-authentication/) tercih edilse de Basic Authentication hâlâ geçerli bir araç — doğru bağlamda kullanıldığında.

Mekanizma kavramsal olarak basittir: `kullaniciadı:şifre` dizesi Base64 ile kodlanır ve her istekte `Authorization` başlığı olarak sunucuya iletilir. Sunucu bu başlığı çözümleyip doğrular; başlık yoksa veya geçersizse `401 Unauthorized` yanıtı döner.

## HTTP Basic Authentication nasıl çalışır?

Bir istemci korumalı bir kaynağa erişmeye çalıştığında akış şöyle gelişir:

1. Sunucu `401 Unauthorized` yanıtıyla birlikte `WWW-Authenticate: Basic realm="..."` başlığı gönderir.
2. İstemci, `kullaniciadı:şifre` dizesini Base64 ile kodlar.
3. Sonraki istekte `Authorization: Basic <kodlanmış_dize>` başlığını ekler.
4. Sunucu bu başlığı doğrular; geçerliyse kaynağa erişim verir.

Dikkat edilmesi gereken nokta: Base64 bir şifreleme değil, yalnızca bir kodlama yöntemidir. Kolaylıkla çözümlenebilir. Bu yüzden Basic Authentication'ı HTTPS olmadan kullanmak, şifreyi açık metin göndermekten farklı değildir. Belirtim de bunu söyler: "The most serious flaw of Basic authentication is that it results in the cleartext transmission of the user's password over the physical network" ([RFC 7617: The "Basic" HTTP Authentication Scheme, September 2015](https://www.rfc-editor.org/rfc/rfc7617), Security Considerations).

## PHP ile minimal bir örnek

```php
const USERNAME = 'admin';
const PASSWORD = 'password';

function authenticate(string $username, string $password): bool
{
    return $username === USERNAME && $password === PASSWORD;
}

if (isset($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) && authenticate($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'])) {
    echo "Hoş Geldin @" . $_SERVER['PHP_AUTH_USER'];
} else {
    header('WWW-Authenticate: Basic realm="Giriş Yapın"');
    header('HTTP/1.0 401 Unauthorized');
    exit;
}
```

`$_SERVER['PHP_AUTH_USER']` ve `$_SERVER['PHP_AUTH_PW']`, PHP'nin `Authorization` başlığını otomatik olarak ayrıştırıp sunduğu iki süper global değişkendir. Framework kullanan projelerde genellikle bu ayrıştırmayı middleware katmanı üstlenir.

## Nerede kullanılır, nerede kullanılmaz

Basic Authentication'ın kazandığı en net bağlam: kapalı ağlarda servisler arası iletişim, geliştirme ve staging ortamlarındaki hızlı erişim kontrolü, basit araç veya dashboard'lar için tek kullanıcılı koruma katmanı.

Kullanılmaması gereken yerler ise daha belirgin: kullanıcı hesaplarının yönetildiği, şifre sıfırlama veya çok faktörlü doğrulama ihtiyacının ortaya çıktığı, token geçerliliği ve iptal mekanizması gerektiren her senaryo.

## Güvenlik değerlendirmesi

HTTPS olmadan konuşlandırmak kabul edilemez; bu birinci kural, tartışmasız. Bunun ötesinde birkaç pratik tedbir söz konusu:

- **IP kısıtlaması veya VPN zorunluluğu** — korumalı endpoint'i yalnızca belirli kaynak adreslerine açmak, credential sızması durumunda maruz kalınan yüzeyi önemli ölçüde daraltır.
- **Rate limiting** — credential stuffing saldırılarına karşı belirli bir süre içindeki başarısız deneme sayısını sınırlamak minimum beklentidir.
- **Güçlü, döngüsel credential** — insanların hatırlaması gereken bir şifre değilse, uzun ve rastgele bir değer kullanmak zor kaba kuvvet saldırılarını anlamsız kılar. API anahtarlarını de facto Basic Authentication olarak kullanan sistemlerin rotasyon stratejisi olması gerekir.
- **Başarısız denemede gecikme** — bir doğrulama başarısız olduğunda yanıtı bilinçli olarak birkaç yüz milisaniye geciktirmek, otomatik kaba kuvvet araçlarının hızını gözle görülür biçimde düşürür; meşru kullanıcının deneyimine etkisi ise ihmal edilebilir düzeydedir.
- **Loglama** — her `401` yanıtı kayıt altına alınmalı; tekrarlayan başarısız denemeler izlenmeli.

Aynı rotasyon sorusu, bir uygulamanın production veritabanına ulaşmak için kullandığı credential'lar için de geçerli; bu, [Production Veritabanı Erişim Rehberi](/tr/kitaplar/production-database-access-guide/) kitabımın "Credential'lar ve Secret'lar" bölümünün konusu.

## Basitliğin değeri

Kimlik doğrulama mekanizmaları arasında Basic Authentication'ı ilginç kılan şey teknik derinliği değil, doğru bağlamda sağladığı sürtünmesiz uyumdur. Bir servis hesabının dahili bir API'ye erişmesi için OAuth consent flow'u kurmak anlamsız mühendislik yüküdür. HTTPS üzerinde, ağ katmanında kısıtlanmış, tek bir özel credential ile çalışan bir endpoint için Basic Authentication yeterli ve yeterli olmaktan fazlasıdır.

Araç değişmedi; bağlamı doğru okumak değişti.
