Sicherheit

25 minutes MITTELSTUFE

Erfahren Sie mehr über die umfassende Sicherheitsarchitektur von GEMVC. Entdecken Sie, wie 90% der Sicherheit automatisch sind und vor XSS, SQL Injection, Path Traversal und mehr schützen.

What You'll Learn

Automatische Sicherheit

90% der Sicherheit ist automatisch – keine Konfiguration erforderlich

Mehrschichtiger Schutz

8 Sicherheitsschichten von der Anfrage bis zur Datenbank

Angriffs Prävention

Schutz gegen XSS, SQL Injection, Path Traversal und mehr

Video Coming Soon...

GEMVC Sicherheitsübersicht

GEMVC ist nach den Prinzipien der **Security by Design** architektoniert und implementiert mehrschichtige Verteidigungsmechanismen von der Ankunft der Anfrage bis zu Datenbankoperationen. Der wichtigste Punkt: **90% der GEMVC Sicherheit sind AUTOMATISCH** – keine Entwickler Konfiguration erforderlich!

🎯 Wichtiger Punkt:

**90% der GEMVC Sicherheit ist AUTOMATISCH** - Sicherheitsprüfungen erfolgen automatisch in Bootstrap.php (Apache/Nginx) und SwooleBootstrap.php (OpenSwoole) für jede Anfrage. Ihr app/api/ Code muss sich nie um die Bereinigung kümmern – das ist bereits erledigt!

  • **Automatischer Schutz** - Pfadzugriff, Header Bereinigung, Eingabebereinigung, SQL Injection Prävention
  • **Mehrschichtige Verteidigung** - 8 Sicherheitsschichten von der Anfrage bis zur Datenbank
  • **Null Konfiguration** - Sicherheit funktioniert sofort nach der Installation
  • **Entwicklerfreundlich** - Einfache Methodenaufrufe für die restlichen 10% (Schema Validierung, Authentifizierung)
1

Mehrschichtige Sicherheitsarchitektur

Sicherheitsfluss

Jede Anfrage durchläuft 8 Schichten des Sicherheitsschutzes:

1
Pfad Zugriffssicherheit
SecurityManager - Blockiert direkten Dateizugriff
✅ AUTOMATISCH
2
Header Bereinigung
ApacheRequest/SwooleRequest - Bereinigt alle HTTP Header
✅ AUTOMATISCH
3
Eingabebereinigung
XSS Prävention - Alle Eingaben werden HTML Entity kodiert
✅ AUTOMATISCH
4
Schema Validierung
Anfrage Filterung - Typüberprüfung, Mass Assignment Prävention
⚙️ Entwickler Aufrufe
5
Authentifizierung & Autorisierung
JWT Token System - Rollenbasierte Zugriffskontrolle
⚙️ Entwickler Aufrufe
6
Datei Sicherheit
Name/MIME Bereinigung, Signaturerkennung, Verschlüsselung
✅ AUTOMATISCH + ⚙️
7
Geschäftslogik Schutz
Automatischer Schutz im Anwendungscode
✅ AUTOMATISCH
8
Datenbank Sicherheit
SQL Injection Prävention - 100% Prepared Statements
✅ AUTOMATISCH

Legende:

  • ✅ **AUTOMATISCH** - Standardmäßig aktiviert, keine Entwickler Aktion erforderlich
  • ⚙️ **Entwickler Aufrufe** - Verfügbare Methoden, die Entwickler in ihrem Code verwenden
2

Schicht 1: Pfad Zugriffssicherheit

Automatisches Blockieren des Dateizugriffs

GEMVC blockiert automatisch den direkten Zugriff auf sensible Anwendungsdateien und Verzeichnisse. Dies geschieht **bevor** irgendein API Code ausgeführt wird.

Blockierte Pfade:

  • /app - Anwendungscode
  • /vendor - Composer Abhängigkeiten
  • /bin - Ausführbare Dateien
  • /templates - Template Dateien
  • /config - Konfigurationsdateien
  • /.env - Umgebungsvariablen
  • /.git - Versionskontrolle

Angriffs Prävention:

❌ Angriff:

GET /app/api/User.php

✅ Ergebnis:

403 Forbidden - "Direkter Dateizugriff ist nicht gestattet"
3

Schicht 2: Header Bereinigung

Automatischer Header Schutz

Alle HTTP Header werden in den Request Konstruktoren automatisch bereinigt, um Header Injection und XSS Angriffe zu verhindern.

Bereinigte Header:

  • HTTP_AUTHORIZATION - Bereinigt vor der JWT Extraktion
  • HTTP_USER_AGENT - Bereinigt vor der Protokollierung
  • HTTP_X_FORWARDED_FOR - Bereinigt aus Sicherheitsgründen
  • ✓ Alle benutzerdefinierten Header (HTTP_*) - Automatisch bereinigt

Angriffs Prävention:

❌ Angriff:

Authorization: Bearer <script>alert('XSS')</script>

✅ Bereinigt:

Authorization: Bearer &lt;script&gt;alert('XSS')&lt;/script&gt;
4

Schicht 3: Eingabebereinigung (XSS Prävention)

Automatischer XSS Schutz

Alle Eingaben werden automatisch bereinigt, wenn das Request Objekt erstellt wird. Dies verhindert XSS (Cross Site Scripting) Angriffe durch HTML Entity Kodierung aller Sonderzeichen.

Was bereinigt wird:

  • ✓ Alle POST Daten
  • ✓ Alle GET Parameter
  • ✓ Alle PUT/PATCH Daten
  • ✓ Alle HTTP Header
  • ✓ Abfrage Strings
  • ✓ Request URIs
  • ✓ Datei Namen und MIME Typen

XSS Angriffs Prävention:

❌ Angriffs Eingabe:

<script>alert('XSS')</script>

✅ Bereinigte Ausgabe:

&lt;script&gt;alert('XSS')&lt;/script&gt;

So funktioniert es:

GEMVC verwendet FILTER_SANITIZE_FULL_SPECIAL_CHARS, um alle Sonderzeichen HTML Entity zu kodieren. Das bedeutet, dass < zu &lt; wird, was die Skript Ausführung in Browsern verhindert.

5

Schicht 4: Schema Validierung

Anfrage Filterung & Typ Validierung

Die Schema Validierung ist die **einzige Schicht**, die Entwickler Aktionen erfordert. Verwenden Sie definePostSchema() oder defineGetSchema(), um Anfragen vor der Ausführung der Geschäftslogik zu validieren.

Was die Schema Validierung verhindert:

  • **Mass Assignment:** Verhindert unerwünschte Felder (z. B. is_admin: true)
  • **Type Confusion:** Validiert Daten Typen (z. B. id muss int sein, nicht "1' OR '1'='1")
  • **Fehlende Felder:** Stellt sicher, dass erforderliche Felder vorhanden sind
  • **Ungültige Formate:** Validiert E Mail, URL, Datums Formate
Terminal
<?php
public function create(): JsonResponse
{
    // Schema Validierung verhindert Angriffe!
    if (!$this->request->definePostSchema([
        'name' => 'string',      // Erforderlicher String
        'price' => 'float',      // Erforderliche Float
        '?description' => 'string' // Optionaler String
    ])) {
        return $this->request->returnResponse(); // 400 Bad Request
    }
    
    // ✅ Nur gültige Anfragen erreichen diesen Punkt!
    return (new ProductController($this->request))->create();
}

Angriffs Präventions Beispiele:

Angriff 1: Mass Assignment

Anfrage: {"name": "Product", "price": 99.99, "is_admin": true}

Ergebnis: ❌ ABGELEHNT - "Unerwünschtes Postfeld: is_admin"

Angriff 2: Type Confusion

Anfrage: {"id": "1' OR '1'='1", "name": "Product"}

Schema: ['id' => 'int']

Ergebnis: ❌ ABGELEHNT - "Ungültiger Wert für Feld id, erwarteter Typ: int"

6

Schicht 5: Authentifizierung & Autorisierung

JWT Token System

GEMVC beinhaltet ein integriertes JWT (JSON Web Token) Authentifizierungssystem. Verwenden Sie $request->auth(), um Tokens zu überprüfen und rollenbasierte Zugriffskontrolle zu implementieren.

Sicherheitsfunktionen:

  • ✓ **HS256 Signatur** - Verwendet TOKEN_SECRET aus .env
  • ✓ **Ablauf Validierung** - Prüft exp > time()
  • ✓ **Rollenbasierte Zugriffskontrolle** - Unterstützung mehrerer Rollen
  • ✓ **Token Erneuerung** - Integrierter Token Erneuerungsmechanismus
Terminal
<?php
public function create(): JsonResponse
{
    // Authentifizierungsprüfung
    if (!$this->request->auth()) {
        return $this->request->returnResponse(); // 401 Unautorisiert
    }
    
    // Autorisierungsprüfung (rollenbasierte)
    if (!$this->request->auth(['admin', 'salesManager'])) {
        return $this->request->returnResponse(); // 403 Verboten
    }
    
    // ✅ Authentifiziert und autorisiert
    return (new ProductController($this->request))->create();
}

Angriffs Prävention:

Angriff: Gefälschtes Token

Ergebnis: ❌ ABGELEHNT - "Ungültiges JWT Token. Authentifizierung fehlgeschlagen"

1492

Angriffs Prävention:

Angriff: SQL Injection

Eingabe: "admin' OR '1'='1"

Ergebnis: ✅ VERHINDERT - Datenbank behandelt als wörtliche Zeichenkette, nicht als SQL Code

Angriffs Prävention:

Angriff: Rollen Eskalation

Token: role="user", Anfrage erfordert role="admin"

Ergebnis: ❌ ABGELEHNT - "Rolle user ist nicht berechtigt, diese Aktion auszuführen"

7

Schicht 6: Datei Sicherheit

Datei Upload Schutz

GEMVC bietet mehrere Schichten der Datei Sicherheit: automatische Name/MIME Bereinigung, Signaturerkennung und optionale Verschlüsselung.

Automatisch: Datei Name & MIME Bereinigung

Datei Namen und MIME Typen werden in den Request Konstruktoren automatisch bereinigt, um Path Traversal und MIME Injection Angriffe zu verhindern.

Datei Signaturerkennung (Magic Bytes)

Verwenden Sie ImageHelper::convertToWebP(), um tatsächliche Datei Signaturen zu validieren, nicht nur Datei Erweiterungen oder MIME Typen.

**Verhindert:** Double Extension Angriffe (malware.php.jpg), MIME Spoofing, in Bilder umbenannte PHP Dateien

Datei Verschlüsselung

Verwenden Sie FileHelper::encrypt() für die AES 256 CBC Verschlüsselung mit HMAC SHA256 Integritätsprüfung.

8

Schicht 8: Datenbank Sicherheit (SQL Injection Prävention)

100% Prepared Statements

GEMVC **erzwingt automatisch** Prepared Statements für ALLE Datenbankabfragen. SQL Injection ist unmöglich, da alle Abfragen Parameter Binding verwenden, nicht String Verkettung.

So funktioniert es:

Alle Abfragen verwenden PDO::prepare() und bindValue(). Die Datenbank behandelt alle Eingaben als wörtliche Werte, nicht als SQL Code.

Terminal
<?php
// Alle Abfragen verwenden automatisch Prepared Statements
$products = (new ProductTable())
    ->select('id,name,price')
    ->where('name', "Product'; DROP TABLE products; --")  // Böswillige Eingabe
    ->run();

// Generiertes SQL:
// SELECT id,name,price FROM products WHERE name = :name
// Gebunden: [':name' => "Product'; DROP TABLE products; --"]

// Datenbank Ausführung:
// SELECT id,name,price FROM products WHERE name = 'Product'; DROP TABLE products; --'
// Die Datenbank behandelt die gesamte Zeichenkette als wörtlichen Wert, NICHT als SQL Code!

// Ergebnis: ✅ SQL INJECTION VERHINDERT
// Kein passendes Produkt gefunden (wie erwartet)

Angriffs Prävention:

Angriff: SQL Injection

Eingabe: "admin' OR '1'='1"

Ergebnis: ✅ VERHINDERT - Datenbank behandelt als wörtliche Zeichenkette, nicht als SQL Code

Angriffs Präventions Matrix

Angriffs Typ Angriffs Vektor GEMVC Schutz Ergebnis
XSS <script>alert('XSS')</script> Eingabebereinigung ✅ Verhindert
SQL Injection admin' OR '1'='1 Prepared Statements ✅ Verhindert
Path Traversal ../../../etc/passwd Pfad Blockierung + Datei Name Bereinigung ✅ Verhindert
Datei Upload malware.php.jpg Signaturerkennung ✅ Verhindert
Mass Assignment {is_admin: true} Schema Validierung ✅ Verhindert
JWT Fälschung Modifiziertes Token Signatur Überprüfung ✅ Verhindert
Rollen Eskalation Benutzer greift auf Admin Endpunkt zu Autorisierungsprüfung ✅ Verhindert

Sicherheitsgarantien

✅ Automatischer Schutz (Keine Entwickler Aktion erforderlich)

GEMVC bietet **automatischen Schutz** gegen:

  • ✓ **XSS (Cross Site Scripting)** - Eingabebereinigung + Ausgabe Kodierung
  • ✓ **SQL Injection** - Prepared Statements (100% Abdeckung)
  • ✓ **Path Traversal** - Pfad Blockierung + Datei Name Bereinigung
  • ✓ **Header Injection** - Header Bereinigung
  • ✓ **Datei Upload Angriffe** - Datei Name/MIME Bereinigung
  • ✓ **JWT Fälschung** - Signatur Überprüfung + Ablauf

⚙️ Entwickler Aktivierter Schutz (Einfache Methoden Aufrufe)

Die restlichen 10% erfordern einfache Methoden Aufrufe:

  • ✓ **Mass Assignment** - Rufen Sie definePostSchema() auf
  • ✓ **Type Confusion** - Rufen Sie definePostSchema() auf
  • ✓ **Authentifizierungs Umgehung** - Rufen Sie $request->auth() auf
  • ✓ **Autorisierungs Umgehung** - Rufen Sie $request->auth(['role']) auf
  • ✓ **Datei Signatur Spoofing** - Verwenden Sie ImageHelper::convertToWebP()

📊 Ergebnis

  • ✓ **90% der Sicherheit ist AUTOMATISCH** - Keine Entwickler Aktion erforderlich!
  • ✓ **10% erfordert einfache Methoden Aufrufe** - Verwenden Sie einfach definePostSchema() und auth() in Ihren API Services
  • ✓ **Null Konfiguration** - Sicherheit funktioniert sofort nach der Installation!

Security Best Practices

💡 Immer Schema Validierung verwenden

Terminal
<?php
if (!$this->request->definePostSchema(['email' => 'email'])) {
    return $this->request->returnResponse();
}
Terminal
<?php
$email = $this->request->post['email']; // Keine Validierung!

💡 Immer Authentifizierung verwenden

Terminal
<?php
if (!$this->request->auth(['admin'])) {
    return $this->request->returnResponse();
}
Terminal
<?php
// Jeder kann zugreifen!

💡 Prepared Statements (Automatisch!)

GEMVC **erzwingt automatisch** Prepared Statements für alle Datenbankabfragen. SQL Injection ist unmöglich, da alle Abfragen Parameter Binding verwenden, nicht String Verkettung.

Wichtige Hinweise

  • **90% Automatisch:** Die meisten Sicherheitsfunktionen funktionieren automatisch – keine Konfiguration erforderlich!
  • **Schema Validierung:** Verwenden Sie immer definePostSchema() oder defineGetSchema(), um Anfragen zu validieren.
  • **Authentifizierung:** Verwenden Sie immer $request->auth(), um sensible Endpunkte zu schützen.
  • **SQL Injection:** Unmöglich in GEMVC – alle Abfragen verwenden automatisch Prepared Statements.
  • **Datei Uploads:** Verwenden Sie ImageHelper::convertToWebP(), um Datei Signaturen zu validieren, nicht nur Erweiterungen.

🔒 Sicherheit gemeistert!

Ausgezeichnet! Sie haben die umfassende Sicherheitsarchitektur von GEMVC kennengelernt. Denken Sie daran: 90% der Sicherheit sind automatisch, und die restlichen 10% erfordern einfache Methoden Aufrufe wie definePostSchema() und auth()!