# .htpasswd & Basic Auth Güvenliği

Geliştirme veya staging ortamlarında TYPO3 sitesini basit HTTP kimlik doğrulama ile korumayı kapsar.

---

## Neden Basic Auth?

- Geliştirme/staging ortamını yetkisiz erişimden koruma
- Arama motorlarının indekslemesini engelleme
- Müşteriye gösterim öncesi koruma

> **Not:** Production ortamda Basic Auth yerine TYPO3'ün kendi kimlik doğrulama sistemini kullanın.

---

## .htpasswd Dosyası Oluşturma

### Komut Satırı ile

```bash
# htpasswd dosyası oluştur (ilk kullanıcı)
htpasswd -c /path/to/.htpasswd username

# Ek kullanıcı ekle (-c olmadan!)
htpasswd /path/to/.htpasswd another_user

# DDEV içinde
ddev exec htpasswd -c /var/www/html/.htpasswd admin
```

### Online Araç ile

[htpasswd Generator](https://htpasswdgenerator.de/) adresinden oluşturabilirsiniz.

### Manuel Oluşturma

`.htpasswd`:

```
admin:$apr1$xyz123$abcdef1234567890
editor:$apr1$abc456$ghijkl0987654321
```

---

## Apache Yapılandırması

### Tüm Siteyi Koruma

`public/.htaccess` dosyasının başına ekleyin:

```apache
# Basic Authentication
AuthType Basic
AuthName "Restricted Access"
AuthUserFile /var/www/html/.htpasswd
Require valid-user

# TYPO3 kurallarından ÖNCE olmalı
```

### Sadece Backend'i Koruma

`public/.htaccess`:

```apache
# Backend'i Basic Auth ile koru
<LocationMatch "^/typo3">
    AuthType Basic
    AuthName "Admin Area"
    AuthUserFile /var/www/html/.htpasswd
    Require valid-user
</LocationMatch>
```

### Belirli IP'leri Muaf Tutma

```apache
AuthType Basic
AuthName "Restricted Access"
AuthUserFile /var/www/html/.htpasswd

# IP bazlı muafiyet
<RequireAny>
    Require ip 192.168.1.0/24
    Require ip 10.0.0.0/8
    Require valid-user
</RequireAny>
```

### DDEV Ortamında

DDEV'de `.htaccess` dosyasını `public/` dizinine yerleştirin:

```apache
# Geliştirme ortamı koruması
AuthType Basic
AuthName "Dev Site"
AuthUserFile /var/www/html/.htpasswd
Require valid-user
```

```bash
# DDEV içinde .htpasswd oluştur
ddev exec htpasswd -cb /var/www/html/.htpasswd admin password123
ddev restart
```

---

## Nginx Yapılandırması

```nginx
server {
    listen 80;
    server_name staging.example.com;

    # Basic Auth
    auth_basic "Restricted Access";
    auth_basic_user_file /etc/nginx/.htpasswd;

    # TYPO3 yapılandırması devamı...
    root /var/www/html/public;
    index index.php;
}
```

### Belirli Yolları Koruma

```nginx
# Sadece backend'i koru
location /typo3 {
    auth_basic "Admin Area";
    auth_basic_user_file /etc/nginx/.htpasswd;
    try_files $uri $uri/ /index.php$is_args$args;
}

# Frontend'i koru ama belirli kaynakları muaf tut
location / {
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;

    location ~* \.(css|js|png|jpg|gif|ico|svg|woff2?)$ {
        auth_basic off;
    }
}
```

---

## TYPO3 IP Kısıtlama (Alternatif)

### Backend IP Kısıtlama

```php
// config/system/additional.php
$GLOBALS['TYPO3_CONF_VARS']['BE']['IPmaskList'] = '192.168.1.0/24,10.0.0.0/8';
```

### Install Tool Koruması

```php
// Install Tool şifresi ayarla
$GLOBALS['TYPO3_CONF_VARS']['BE']['installToolPassword'] = '$argon2i$...';
```

---

## Güvenlik Kontrol Listesi

- [ ] Geliştirme/staging ortamları Basic Auth ile korunuyor
- [ ] `.htpasswd` dosyası web root dışında veya erişilmez konumda
- [ ] Güçlü şifreler kullanılıyor
- [ ] Production ortamda Basic Auth kaldırılmış
- [ ] robots.txt ile indeksleme engelleniyor (staging)
- [ ] SSL/TLS aktif (şifre düz metin gönderilmesin)

---

## Kaynaklar

- [Apache Authentication](https://httpd.apache.org/docs/2.4/howto/auth.html)
- [Nginx Auth Basic](https://docs.nginx.com/nginx/admin-guide/security-controls/configuring-http-basic-authentication/)
