- Add DISCOVERY_LOG_LEVEL=debug - Add DISCOVERY_SHOW_PROGRESS=true - Temporary changes for debugging InitializerProcessor fixes on production
4.5 KiB
4.5 KiB
Sicherheitsrichtlinien
Übersicht
Diese Richtlinien definieren Standards und Best Practices für sichere Softwareentwicklung im Projekt.
Grundprinzipien
1. Defense in Depth
- Mehrere Sicherheitsschichten implementieren
- Nicht auf eine einzelne Sicherheitsmaßnahme vertrauen
- Fail-Safe-Mechanismen einbauen
2. Least Privilege
- Minimale Berechtigungen für Funktionen und Benutzer
- Ressourcenzugriff nur bei Bedarf gewähren
- Temporäre Berechtigungen nach Gebrauch entziehen
3. Input-Validierung
- Alle Benutzereingaben validieren und bereinigen
- Whitelist-Ansatz bevorzugen (erlaubte Eingaben definieren)
- Typprüfung und Formatvalidierung durchführen
// Beispiel: Sichere Input-Validierung
public function processUserInput(string $input): string
{
// Länge prüfen
if (strlen($input) > 100) {
throw new ValidationException('Input zu lang (max 100 Zeichen)');
}
// Inhalt validieren (Whitelist-Ansatz)
if (!preg_match('/^[a-zA-Z0-9\s\-_]+$/', $input)) {
throw new ValidationException('Input enthält ungültige Zeichen');
}
// Bereinigung
return htmlspecialchars($input, ENT_QUOTES, 'UTF-8');
}
Spezifische Sicherheitsmaßnahmen
1. SQL-Injection-Prävention
- Prepared Statements für alle Datenbankabfragen
- Keine dynamischen SQL-Queries
- ORM-Framework bevorzugen
// Sicher
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?");
$stmt->execute([$email]);
// Unsicher - NIEMALS SO MACHEN
$query = "SELECT * FROM users WHERE email = '{$email}'";
2. Cross-Site Scripting (XSS) Prävention
- Output-Escaping für alle benutzergenerierten Inhalte
- Content-Security-Policy (CSP) implementieren
- HttpOnly und Secure Flags für Cookies
// Ausgabe in HTML
echo htmlspecialchars($userInput, ENT_QUOTES, 'UTF-8');
// Ausgabe in JavaScript
echo json_encode($userInput, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP);
3. Cross-Site Request Forgery (CSRF) Schutz
- CSRF-Token für alle ändernden Anfragen
- SameSite-Attribut für Cookies
// CSRF-Token generieren
public function generateCsrfToken(): string
{
$token = bin2hex(random_bytes(32));
$_SESSION['csrf_token'] = $token;
return $token;
}
// CSRF-Token validieren
public function validateCsrfToken(string $token): bool
{
return hash_equals($_SESSION['csrf_token'] ?? '', $token);
}
4. Sichere Authentifizierung
- Passwörter mit starken Algorithmen hashen (Argon2id)
- Multi-Faktor-Authentifizierung anbieten
- Ratelimiting für Login-Versuche
// Passwort hashen
public function hashPassword(string $password): string
{
return password_hash($password, PASSWORD_ARGON2ID);
}
// Passwort verifizieren
public function verifyPassword(string $password, string $hash): bool
{
return password_verify($password, $hash);
}
5. Sichere Datenspeicherung
- Sensible Daten verschlüsseln
- Separate Schlüssel für unterschiedliche Daten
- Schlüsselrotation implementieren
// Daten verschlüsseln
public function encrypt(string $data, string $purpose): string
{
$key = $this->getEncryptionKey($purpose);
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
$cipher = sodium_crypto_secretbox(
$data,
$nonce,
$key
);
return base64_encode($nonce . $cipher);
}
// Daten entschlüsseln
public function decrypt(string $encrypted, string $purpose): string
{
$key = $this->getEncryptionKey($purpose);
$decoded = base64_decode($encrypted);
$nonce = mb_substr($decoded, 0, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, '8bit');
$cipher = mb_substr($decoded, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, null, '8bit');
return sodium_crypto_secretbox_open(
$cipher,
$nonce,
$key
);
}
Sicherheitstests
1. Automatisierte Sicherheitstests
- Static Application Security Testing (SAST)
- Dynamic Application Security Testing (DAST)
- Dependency-Scanning für bekannte Schwachstellen
2. Penetrationstests
- Regelmäßige Sicherheitsaudits
- Manuelle Penetrationstests
- Bug-Bounty-Programme
Sicherheitskultur
1. Entwicklerschulungen
- Regelmäßige Sicherheitsschulungen
- Code-Reviews mit Sicherheitsfokus
- Sicherheits-Champions im Team
2. Incident Response
- Sicherheitsvorfälle dokumentieren
- Prozess für Sicherheitsmeldungen
- Notfallpläne für Sicherheitsvorfälle
Zusammenfassung
Sicherheit ist ein kontinuierlicher Prozess, keine einmalige Aufgabe. Diese Richtlinien sollten regelmäßig überprüft und aktualisiert werden, um neuen Bedrohungen zu begegnen.