Files
HKW/SECURITY.md
2026-02-03 09:01:55 +01:00

173 lines
4.1 KiB
Markdown

# HKW Anwälte - Sicherheitsdokumentation
## PHPMailer Sicherheitskonfiguration
### Wichtige Sicherheitsmaßnahmen implementiert:
#### 1. **Konfigurationsdatei-Schutz**
- `config.php` ist jetzt außerhalb des Webroots verfügbar
- `.htaccess` blockiert direkten Zugriff auf Konfigurationsdateien
- Unterstützung für Umgebungsvariablen (.env)
#### 2. **Verbesserte Input-Validierung**
- XSS-Schutz durch htmlspecialchars
- Header-Injection-Schutz (keine Newlines in E-Mail/Namen)
- Längenbeschränkungen für alle Felder
- Erweiterte Spam-Wort-Blacklist
- E-Mail-Domain-Blacklist
#### 3. **Rate Limiting**
- Max. 5 E-Mails pro Stunde pro IP
- Hash-basierte Datei-Speicherung mit LOCK_EX
- Zeitbasierte Formular-Validierung (mind. 5 Sek.)
#### 4. **reCAPTCHA-Integration**
- Erweiterte Validierung mit Timeout
- SSL-Verifizierung aktiviert
- Fehlerbehandlung mit Logging
#### 5. **Datei-Upload-Sicherheit**
- Maximale Dateigröße: 20 MB
- Erlaubte Dateitypen: PDF, DOC, DOCX, JPG, JPEG, PNG
- Größenvalidierung vor Upload
#### 6. **Weitere Sicherheitsmaßnahmen**
- Honeypot-Feld gegen Spam-Bots
- CSRF-Token-Unterstützung vorbereitet
- Security Headers in .htaccess
- Fehlerausgabe deaktiviert (nur Logging)
---
## Installation & Konfiguration
### 1. Umgebungsvariablen einrichten
Erstellen Sie eine `.env` Datei basierend auf `.env.example`:
```bash
cp .env.example .env
```
Tragen Sie Ihre echten Zugangsdaten ein:
```env
HKW_SMTP_PASS=Ihr_echtes_Passwort
HKW_RECAPTCHA_SECRET=Ihr_reCAPTCHA_Secret
```
### 2. Berechtigungen setzen
```bash
# Konfigurationsdatei schützen
chmod 600 config.php
# .env Datei schützen
chmod 600 .env
# Forms-Verzeichnis
chmod 755 forms/
chmod 644 forms/.htaccess
```
### 3. config.php außerhalb Webroot verschieben (empfohlen)
```bash
# Erstellen Sie ein sicheres Config-Verzeichnis
mkdir -p /home/sebastian/config
# Verschieben Sie die config.php
mv config.php /home/sebastian/config/hkw-config.php
# Passen Sie dann den Pfad in contact.php an (Zeile 12)
```
### 4. Apache/Nginx konfigurieren
#### Apache (.htaccess bereits vorhanden):
- Stellen Sie sicher, dass `AllowOverride All` gesetzt ist
#### Nginx:
```nginx
location ~ /(config\.php|\.env|test-.*\.php) {
deny all;
}
```
---
## Wartung & Updates
### PHPMailer aktualisieren
Das Projekt verwendet jetzt **PHPMailer 7.0.2** (aktuellste Version vom Januar 2026).
Zum manuellen Update:
```bash
cd assets/vendor/phpmailer
# Backup erstellen
cp -r src ../phpmailer-backup
# Neue Version von GitHub herunterladen
wget https://github.com/PHPMailer/PHPMailer/archive/refs/tags/v7.0.2.zip
unzip v7.0.2.zip
# Dateien kopieren...
```
Oder via Composer (empfohlen):
```bash
composer require phpmailer/phpmailer:^7.0
```
**Aktuelle Version: 7.0.2** (Stand: 3. Februar 2026)
#### Wichtige Änderungen in Version 7.x:
- Verbesserte PHP 8.x Kompatibilität
- Erweiterte Sicherheitsfeatures
- Bessere Error Handling
- Modernisierte Codebase
- Keine Breaking Changes zu 6.x (API-kompatibel)
### Logs überprüfen
```bash
# PHP Error Log
tail -f /var/log/apache2/error.log
# Custom Error Log (falls konfiguriert)
tail -f /path/to/error.log
```
---
## Checkliste für Produktivbetrieb
- [ ] `.env` Datei mit echten Credentials erstellt
- [ ] `config.php` außerhalb Webroot verschoben (optional aber empfohlen)
- [ ] Berechtigungen auf 600 für sensible Dateien gesetzt
- [ ] reCAPTCHA Secret Key eingetragen
- [ ] SMTP-Zugangsdaten geprüft
- [ ] `.gitignore` aktiv (.env wird nicht committed)
- [ ] Test-E-Mail erfolgreich versendet
- [ ] Rate Limiting getestet
- [ ] Formular-Validierung getestet
- [ ] File-Upload getestet
- [ ] Error Logging funktioniert
---
## Bekannte Limitierungen
1. **Rate Limiting**: Basiert auf IP-Adresse, kann bei Shared IPs problematisch sein
2. **Temporäre Dateien**: Rate-Limit-Daten werden in `/tmp` gespeichert
3. **reCAPTCHA**: Benötigt Internetverbindung zu Google-Servern
---
## Support & Updates
- PHPMailer: https://github.com/PHPMailer/PHPMailer
- reCAPTCHA: https://www.google.com/recaptcha/admin
**Letzte Aktualisierung**: 3. Februar 2026