# Sicherheits-Anleitung Diese Anleitung erklärt die Sicherheitsfunktionen des Frameworks und wie Sie sie effektiv nutzen können, um Ihre Anwendung zu schützen. ## Überblick über die Sicherheitsarchitektur Das Framework bietet eine mehrschichtige Sicherheitsarchitektur, die verschiedene Schutzmaßnahmen auf verschiedenen Ebenen implementiert: 1. **Eingabevalidierung**: Validierung aller Benutzereingaben, um Injection-Angriffe zu verhindern. 2. **Ausgabebereinigung**: Automatische Bereinigung von Ausgaben, um Cross-Site Scripting (XSS) zu verhindern. 3. **CSRF-Schutz**: Schutz vor Cross-Site Request Forgery. 4. **Authentifizierung**: Flexible Authentifizierungsmechanismen. 5. **Autorisierung**: Rollenbasierte und fähigkeitsbasierte Zugriffskontrolle. 6. **Web Application Firewall (WAF)**: Integrierte WAF zum Schutz vor gängigen Angriffen. 7. **Sicherheitsheader**: Automatische Konfiguration von Sicherheitsheadern. 8. **Sichere Konfiguration**: Sichere Standardeinstellungen und Best Practices. ## Eingabevalidierung Die Eingabevalidierung ist die erste Verteidigungslinie gegen Injection-Angriffe. Das Framework bietet ein leistungsstarkes Validierungssystem, das in der [Validierungs-Anleitung](validation.md) ausführlich beschrieben wird. ### Beispiel für die Validierung von Benutzereingaben ```php public function store(Request $request): Response { $this->validate($request, [ 'name' => 'required|string|max:255', 'email' => 'required|email|unique:users,email', 'password' => 'required|string|min:8', 'website' => 'nullable|url', 'age' => 'nullable|integer|min:18', ]); // Die Validierung wurde bestanden, fahren Sie mit der Speicherung fort $user = User::create($request->only(['name', 'email', 'password'])); return $this->redirect('/users')->with('success', 'Benutzer erstellt'); } ``` ### Schutz vor SQL-Injection Das Framework verwendet parametrisierte Abfragen und Prepared Statements, um SQL-Injection-Angriffe zu verhindern: ```php // Sicher: Verwendung von parametrisierten Abfragen $users = DB::table('users') ->where('email', $request->input('email')) ->get(); // Sicher: Verwendung des Query Builders $users = User::where('email', $request->input('email'))->get(); // Sicher: Verwendung von Prepared Statements $statement = DB::prepare('SELECT * FROM users WHERE email = ?'); $statement->execute([$request->input('email')]); $users = $statement->fetchAll(); ``` ## Ausgabebereinigung ### Automatische Bereinigung in Views Das Framework bereinigt automatisch alle Ausgaben in Views, um XSS-Angriffe zu verhindern: ```php
name ?>
html_content) ?>
``` ### Manuelle Bereinigung Sie können auch manuell Daten bereinigen: ```php use App\Framework\Security\Sanitizer; // Text bereinigen $cleanText = Sanitizer::clean($input); // HTML bereinigen (entfernt gefährliche Tags und Attribute) $cleanHtml = Sanitizer::cleanHtml($input); // URL bereinigen $cleanUrl = Sanitizer::cleanUrl($input); ``` ## CSRF-Schutz Das Framework bietet automatischen Schutz vor Cross-Site Request Forgery (CSRF) für alle Formulare und AJAX-Anfragen. ### CSRF-Token in Formularen ```php
``` Die `csrf_field()`-Funktion generiert ein verstecktes Eingabefeld mit einem CSRF-Token: ```html ``` ### CSRF-Token in AJAX-Anfragen ```javascript // Mit jQuery $.ajax({ url: '/users', type: 'POST', data: { name: 'John Doe', _token: '' } }); // Mit Fetch API fetch('/users', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-CSRF-TOKEN': '' }, body: JSON.stringify({ name: 'John Doe' }) }); ``` ### CSRF-Schutz deaktivieren In einigen Fällen, wie z.B. bei API-Endpunkten, möchten Sie möglicherweise den CSRF-Schutz deaktivieren: ```php // In der Middleware-Konfiguration $middleware->except([ CsrfMiddleware::class => [ '/api/*' ] ]); ``` ## Authentifizierung Das Framework bietet ein flexibles Authentifizierungssystem, das verschiedene Authentifizierungsmethoden unterstützt. ### Benutzerauthentifizierung ```php use App\Framework\Auth\Auth; class LoginController extends Controller { public function login(Request $request): Response { $this->validate($request, [ 'email' => 'required|email', 'password' => 'required|string', ]); $credentials = $request->only(['email', 'password']); $remember = $request->input('remember', false); if (Auth::attempt($credentials, $remember)) { return $this->redirect('/dashboard'); } return $this->back()->withErrors([ 'email' => 'Die angegebenen Anmeldeinformationen sind ungültig.', ]); } public function logout(): Response { Auth::logout(); return $this->redirect('/'); } } ``` ### Zugriff auf den authentifizierten Benutzer ```php // Prüfen, ob ein Benutzer angemeldet ist if (Auth::check()) { // Benutzer ist angemeldet } // Aktuellen Benutzer abrufen $user = Auth::user(); // Benutzer-ID abrufen $userId = Auth::id(); ``` ### Passwort-Hashing Das Framework verwendet automatisch sichere Passwort-Hashing-Algorithmen: ```php use App\Framework\Security\Hash; // Passwort hashen $hashedPassword = Hash::make('password'); // Passwort überprüfen if (Hash::check('password', $hashedPassword)) { // Passwort ist korrekt } // Prüfen, ob ein Passwort neu gehasht werden muss if (Hash::needsRehash($hashedPassword)) { $hashedPassword = Hash::make('password'); } ``` ### Passwort-Zurücksetzung Das Framework bietet auch Unterstützung für die Passwort-Zurücksetzung: ```php use App\Framework\Auth\Password; // Token für die Passwort-Zurücksetzung erstellen $token = Password::createToken($user); // E-Mail mit dem Token senden Mail::send('emails.reset-password', [ 'token' => $token, 'user' => $user ], function ($message) use ($user) { $message->to($user->email); $message->subject('Passwort zurücksetzen'); }); // Token überprüfen und Passwort zurücksetzen $status = Password::reset($request->only( 'email', 'password', 'password_confirmation', 'token' ), function ($user, $password) { $user->password = Hash::make($password); $user->save(); }); ``` ## Autorisierung Das Framework bietet ein leistungsstarkes Autorisierungssystem, das rollenbasierte und fähigkeitsbasierte Zugriffskontrolle unterstützt. ### Rollenbasierte Zugriffskontrolle ```php use App\Framework\Auth\Auth; // Prüfen, ob der Benutzer eine bestimmte Rolle hat if (Auth::user()->hasRole('admin')) { // Benutzer ist ein Administrator } // Prüfen, ob der Benutzer eine von mehreren Rollen hat if (Auth::user()->hasAnyRole(['admin', 'editor'])) { // Benutzer ist entweder Administrator oder Editor } // Prüfen, ob der Benutzer alle angegebenen Rollen hat if (Auth::user()->hasAllRoles(['admin', 'editor'])) { // Benutzer ist sowohl Administrator als auch Editor } ``` ### Fähigkeitsbasierte Zugriffskontrolle ```php use App\Framework\Auth\Auth; // Prüfen, ob der Benutzer eine bestimmte Fähigkeit hat if (Auth::user()->can('edit-post', $post)) { // Benutzer kann den Beitrag bearbeiten } // Prüfen, ob der Benutzer eine Fähigkeit nicht hat if (Auth::user()->cannot('delete-post', $post)) { // Benutzer kann den Beitrag nicht löschen } // Autorisierung erzwingen (wirft eine Exception, wenn nicht autorisiert) Auth::user()->authorize('edit-post', $post); ``` ### Richtlinien definieren Sie können Autorisierungsrichtlinien definieren, um komplexe Autorisierungslogik zu kapseln: ```php use App\Framework\Auth\Policy; class PostPolicy extends Policy { public function view(User $user, Post $post): bool { return true; // Jeder kann Beiträge sehen } public function create(User $user): bool { return $user->hasRole('writer'); } public function update(User $user, Post $post): bool { return $user->id === $post->user_id || $user->hasRole('editor'); } public function delete(User $user, Post $post): bool { return $user->id === $post->user_id || $user->hasRole('admin'); } } ``` Registrieren Sie die Richtlinie: ```php use App\Framework\Auth\Gate; // In der Bootstrap-Datei Gate::policy(Post::class, PostPolicy::class); ``` Verwenden Sie die Richtlinie: ```php if (Auth::user()->can('update', $post)) { // Benutzer kann den Beitrag aktualisieren } ``` ### Autorisierung in Controllern Sie können die Autorisierung auch direkt in Controllern verwenden: ```php public function update(Request $request, int $id): Response { $post = Post::find($id); if (!$post) { return $this->notFound('Beitrag nicht gefunden'); } $this->authorize('update', $post); // Beitrag aktualisieren return $this->redirect('/posts')->with('success', 'Beitrag aktualisiert'); } ``` ## Web Application Firewall (WAF) Das Framework enthält eine integrierte Web Application Firewall (WAF), die Ihre Anwendung vor gängigen Angriffen schützt. ### WAF-Konfiguration Die WAF ist standardmäßig aktiviert und kann in der Konfigurationsdatei `config/security.php` konfiguriert werden: ```php return [ 'waf' => [ 'enabled' => true, 'rules' => [ 'sql_injection' => true, 'xss' => true, 'command_injection' => true, 'path_traversal' => true, 'request_validation' => true, ], 'whitelist' => [ 'ip' => [ '127.0.0.1', '::1', ], 'paths' => [ '/api/webhook', ], ], 'blacklist' => [ 'ip' => [ // Blockierte IP-Adressen ], 'user_agents' => [ 'Bad Bot', ], ], 'rate_limiting' => [ 'enabled' => true, 'max_requests' => 100, 'time_window' => 60, // Sekunden ], ], ]; ``` ### Maschinelles Lernen für die Angriffserkennung Die WAF verwendet auch maschinelles Lernen, um Anomalien zu erkennen und potenzielle Angriffe zu identifizieren: ```php use App\Framework\Waf\MachineLearning\MachineLearningEngine; // In einem Controller oder Service $mlEngine = $this->container->get(MachineLearningEngine::class); $anomalyScore = $mlEngine->detectAnomalies($request); if ($anomalyScore > 0.8) { // Verdächtige Anfrage protokollieren oder blockieren $this->logger->warning('Verdächtige Anfrage erkannt', [ 'ip' => $request->ip(), 'path' => $request->path(), 'score' => $anomalyScore, ]); } ``` ## Sicherheitsheader Das Framework konfiguriert automatisch wichtige Sicherheitsheader, um Ihre Anwendung zu schützen. ### Content Security Policy (CSP) Die Content Security Policy schützt vor XSS-Angriffen, indem sie kontrolliert, welche Ressourcen geladen werden dürfen: ```php use App\Framework\Security\ContentSecurityPolicy; // In einem Middleware oder Controller $csp = new ContentSecurityPolicy(); $csp->setDefaultSrc(['self']) ->setScriptSrc(['self', 'trusted-scripts.com']) ->setStyleSrc(['self', 'trusted-styles.com']) ->setImgSrc(['self', 'trusted-images.com']) ->setFontSrc(['self', 'trusted-fonts.com']) ->setConnectSrc(['self', 'api.trusted-domain.com']) ->setFrameSrc(['none']) ->setObjectSrc(['none']) ->setReportUri('/csp-report'); $response->headers->set('Content-Security-Policy', $csp->compile()); ``` ### Andere Sicherheitsheader Das Framework setzt auch andere wichtige Sicherheitsheader: ```php // In einem Middleware oder Controller $response->headers->set('X-Content-Type-Options', 'nosniff'); $response->headers->set('X-Frame-Options', 'DENY'); $response->headers->set('X-XSS-Protection', '1; mode=block'); $response->headers->set('Referrer-Policy', 'strict-origin-when-cross-origin'); $response->headers->set('Strict-Transport-Security', 'max-age=31536000; includeSubDomains; preload'); ``` ## Sichere Konfiguration ### HTTPS erzwingen Sie können HTTPS für Ihre Anwendung erzwingen: ```php // In der Middleware-Konfiguration $middleware->add(HttpsMiddleware::class); ``` ### Sichere Cookies Das Framework konfiguriert automatisch sichere Cookies: ```php // In der Konfigurationsdatei config/session.php return [ 'cookie' => [ 'secure' => true, 'http_only' => true, 'same_site' => 'lax', ], ]; ``` ### Sichere Datei-Uploads Das Framework bietet Funktionen für sichere Datei-Uploads: ```php use App\Framework\Security\FileValidator; // In einem Controller $this->validate($request, [ 'document' => 'required|file|mimes:pdf,doc,docx|max:10240', ]); $file = $request->file('document'); // Zusätzliche Sicherheitsvalidierung $validator = new FileValidator(); if (!$validator->isSafe($file)) { return $this->back()->withErrors([ 'document' => 'Die Datei ist möglicherweise schädlich.', ]); } // Datei speichern $path = $file->store('documents'); ``` ## Sicherheitsprotokollierung und -überwachung Das Framework bietet umfangreiche Protokollierung für Sicherheitsereignisse: ```php use App\Framework\Security\SecurityLogger; // In einem Controller oder Service $securityLogger = $this->container->get(SecurityLogger::class); // Sicherheitsereignis protokollieren $securityLogger->log('authentication_failure', [ 'user_id' => $user->id, 'ip' => $request->ip(), 'user_agent' => $request->userAgent(), ]); ``` ### Sicherheitsbenachrichtigungen Sie können auch Benachrichtigungen für wichtige Sicherheitsereignisse konfigurieren: ```php use App\Framework\Security\SecurityNotifier; // In einem Controller oder Service $securityNotifier = $this->container->get(SecurityNotifier::class); // Benachrichtigung senden $securityNotifier->notify('suspicious_login', [ 'user_id' => $user->id, 'ip' => $request->ip(), 'location' => $geoip->getLocation($request->ip()), 'time' => now(), ]); ``` ## Sicherheits-Checkliste Hier ist eine Checkliste, um sicherzustellen, dass Ihre Anwendung sicher ist: 1. **Eingabevalidierung**: Validieren Sie alle Benutzereingaben. 2. **Ausgabebereinigung**: Bereinigen Sie alle Ausgaben, um XSS zu verhindern. 3. **CSRF-Schutz**: Verwenden Sie CSRF-Token in allen Formularen und AJAX-Anfragen. 4. **Authentifizierung**: Implementieren Sie sichere Authentifizierungsmechanismen. 5. **Autorisierung**: Implementieren Sie rollenbasierte und fähigkeitsbasierte Zugriffskontrolle. 6. **Sichere Passwörter**: Verwenden Sie sichere Passwort-Hashing-Algorithmen. 7. **HTTPS**: Erzwingen Sie HTTPS für Ihre Anwendung. 8. **Sichere Cookies**: Konfigurieren Sie sichere Cookies. 9. **Sicherheitsheader**: Setzen Sie wichtige Sicherheitsheader. 10. **Datei-Uploads**: Validieren Sie Datei-Uploads sorgfältig. 11. **Fehlerbehandlung**: Zeigen Sie keine sensiblen Informationen in Fehlermeldungen an. 12. **Protokollierung**: Protokollieren Sie Sicherheitsereignisse. 13. **Aktualisierungen**: Halten Sie das Framework und alle Abhängigkeiten aktuell. ## Weitere Informationen - [Authentifizierungs-Anleitung](authentication.md): Erfahren Sie mehr über die Authentifizierungsfunktionen des Frameworks. - [Autorisierungs-Anleitung](authorization.md): Erfahren Sie mehr über die Autorisierungsfunktionen des Frameworks. - [WAF-Anleitung](../components/waf/index.md): Erfahren Sie mehr über die Web Application Firewall des Frameworks. - [Validierungs-Anleitung](validation.md): Erfahren Sie mehr über die Validierungsfunktionen des Frameworks. - [Architekturübersicht](../architecture/overview.md): Überblick über die Architektur des Frameworks.