Sicherheit
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)
Mehrschichtige Sicherheitsarchitektur
Sicherheitsfluss
Jede Anfrage durchläuft 8 Schichten des Sicherheitsschutzes:
Legende:
- ✅ **AUTOMATISCH** - Standardmäßig aktiviert, keine Entwickler Aktion erforderlich
- ⚙️ **Entwickler Aufrufe** - Verfügbare Methoden, die Entwickler in ihrem Code verwenden
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"
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 <script>alert('XSS')</script>
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:
<script>alert('XSS')</script>
So funktioniert es:
GEMVC verwendet FILTER_SANITIZE_FULL_SPECIAL_CHARS, um alle Sonderzeichen HTML Entity zu kodieren. Das bedeutet, dass < zu < wird, was die Skript Ausführung in Browsern verhindert.
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.
idmussintsein, nicht"1' OR '1'='1") - **Fehlende Felder:** Stellt sicher, dass erforderliche Felder vorhanden sind
- **Ungültige Formate:** Validiert E Mail, URL, Datums Formate
<?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"
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_SECRETaus.env - ✓ **Ablauf Validierung** - Prüft
exp > time() - ✓ **Rollenbasierte Zugriffskontrolle** - Unterstützung mehrerer Rollen
- ✓ **Token Erneuerung** - Integrierter Token Erneuerungsmechanismus
<?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"
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"
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.
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.
<?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()undauth()in Ihren API Services - ✓ **Null Konfiguration** - Sicherheit funktioniert sofort nach der Installation!
Security Best Practices
💡 Immer Schema Validierung verwenden
<?php
if (!$this->request->definePostSchema(['email' => 'email'])) {
return $this->request->returnResponse();
}
<?php
$email = $this->request->post['email']; // Keine Validierung!
💡 Immer Authentifizierung verwenden
<?php
if (!$this->request->auth(['admin'])) {
return $this->request->returnResponse();
}
<?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()oderdefineGetSchema(), 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()!