# SQL Injection Denetimi

**Tarih:** 2026-05-13
**Kapsam:** `app/Http/`, `app/Domain/`
**Yöntem:** `DB::raw`, `DB::statement`, `whereRaw`, `havingRaw`, `orderByRaw`, `selectRaw` pattern taraması

---

## Bulgular

### GUVENLI — Kullanıcı girdisi yok

Aşağıdaki kullanımlar tamamen statik SQL ifadelerinden oluşmaktadır; kullanıcı girdisi interpolasyonu yoktur.

| Dosya | Satır | İfade | Durum |
|---|---|---|---|
| `Admin/ApacheConfigController.php` | 165 | `DB::raw('default_value')` | Güvenli — statik sütun adı |
| `Admin/BackupConfigController.php` | 103 | `DB::raw('default_value')` | Güvenli — statik sütun adı |
| `Admin/DovecotConfigController.php` | 122 | `DB::raw('default_value')` | Güvenli — statik sütun adı |
| `Admin/PhpSystemController.php` | 148 | `DB::raw('default_value')` | Güvenli — statik sütun adı |
| `Admin/PostfixConfigController.php` | 118 | `DB::raw('default_value')` | Güvenli — statik sütun adı |
| `Admin/MonitoringController.php` | 126, 178 | `DB::raw('count(*) as count')` | Güvenli — statik |
| `Admin/MultiPhpController.php` | 42 | `selectRaw('php_version, count(*) as count')` | Güvenli — statik |
| `Admin/OutboundWebhookController.php` | 49 | `selectRaw('endpoint_id, count(*) ...')` | Güvenli — statik |
| `Domain/Bandwidth/BandwidthAggregator.php` | 63-199 | Tüm `DB::raw(SUM/COUNT...)` | Güvenli — statik toplama |
| `Domain/Bandwidth/BandwidthAggregator.php` | 116, 190 | `orderByRaw('SUM(...)')` | Güvenli — statik |
| `Domain/Monitoring/PrometheusExporter.php` | 32-194 | Tüm `DB::raw(...)` | Güvenli — statik |

### DIKKAT — DB::statement ile dinamik değer

| Dosya | Satır | İfade | Durum |
|---|---|---|---|
| `Domain/Migration/CpanelRestoreEngine.php` | 257 | `DB::statement("CREATE DATABASE IF NOT EXISTS \`{$newName}\`...")` | Orta risk — bkz. not |

**Not — CpanelRestoreEngine:** `$newName`, kullanıcının doğrudan kontrol ettiği bir input değil; `$prefix = 'onx_' . $targetUser . '_'` prefiksi ile birleştirilen, iç süreçte oluşturulan bir veritabanı adıdır. Ancak backtick ile sarılmış olsa dahi, `$targetUser` değerinin sanitizasyonu doğrulanmalıdır. **Öneri:** Veritabanı adını yalnızca `[a-zA-Z0-9_]` içerecek şekilde doğrulamak için aşağıdaki guard eklenmeli:

```php
if (!preg_match('/^[a-zA-Z0-9_]+$/', $newName)) {
    throw new \InvalidArgumentException("Geçersiz veritabanı adı: {$newName}");
}
```

---

## Sonuç

Kritik (doğrudan kullanıcı girdisi interpolasyonu) SQLi bulgusu **bulunmamıştır**. Tek orta-risk bulgu olan `CpanelRestoreEngine` için öneri belgelenmiştir.
