Buffl

Lernkontrollfragen

IM
by Isaac M.

Defensive Coding Guidelines (Richtlinien für defensives Programmieren)

Diese Strategien helfen dir, Code von Anfang an robuster gegen Angriffe zu machen:


Know your APIs: Du solltest APIs und Bibliotheken nur in ihrem vorgesehenen Kontext nutzen und ihre Dokumentation genau kennen, da du nichts absichern kannst, was du nicht verstehst

Attack Surface (Angriffsfläche minimieren): Reduziere die Anzahl der Eingabepunkte (Formularfelder, Uploads etc.) auf das absolute Minimum, um Angreifern weniger Gelegenheiten zu bieten

Complexity (Komplexität reduzieren): Da Komplexität der Feind der Sicherheit ist, solltest du strukturelle und kognitive Komplexität aktiv verringern, um Fehlerquellen zu vermeiden

Input Validation (Eingabevalidierung): Schreibe niemals eigene Sanitzer oder Validierer, sondern nutze spezialisierte Bibliotheken, um jeden potenziellen Einstiegspunkt zu prüfen

Character Conversion: Verwende durchgehend standardisierte Kodierungen wie UTF-8 oder UTF-16 und führe keine Normalisierungen nach einer Validierung durch

Concurrency Awareness: Behandle parallele Prozesse mit Misstrauen, um Race Conditions (DoS) oder den Zugriff auf gemeinsam genutzten Speicher (Information Disclosure) zu verhindern

Unencrypted Storage: Alle Daten, die auf Festplatten geschrieben werden, sollten verschlüsselt und authentifiziert werden, da Root-Exploits sonst Zugriff auf den gesamten Speicher gewähren

Immutability (Unveränderlichkeit): Nutze unveränderliche Attribute und Schlüsselwörter wie final (in Java), damit bösartige Unterklassen keine sensiblen Methoden überschreiben können

Config & Install: Überprüfe Konfigurationsdateien (z. B. auf zu kleine Log-Größen oder hartkodierte Credentials) und vermeide veraltete Abhängigkeiten bei der Installation

HTTP-GET: Verwende HTTP-Methoden nur für ihren vorgesehenen Zweck (z. B. GET nur zum Abrufen, nicht zum Senden sensibler Daten)

Name and explain all Common Vulnerabilities leaned

Diese Fehler treten in der Praxis immer wieder auf und sollten gezielt vermieden werden:

Hardcoded Credentials: Passwörter oder Schlüssel werden direkt im Quellcode gespeichert und sind so in Binärdateien auslesbar

Hashing without Salt: Das Speichern von Hashes ohne Salt macht Passwörter anfällig für Wörterbuch- oder Brute-Force-Angriffe

Integer Overflow: Fehlende Plausibilitätsprüfungen bei Zahlenwerten können dazu führen, dass Werte „umkippen“ (z. B. negative Kontostände)

Buffer Overflow: Wenn ohne Bereichsprüfung über Puffergrenzen hinaus geschrieben wird, kann dies das Programm korrumpieren

Format String Corruption: Benutzereingaben werden direkt als Format-String (z. B. in printf) verwendet, was Speicherzugriffe ermöglicht

Log Neutralization: Fehlende Bereinigung von Eingaben vor dem Loggen erlaubt es Angreifern, Log-Einträge zu fälschen

Log Overflow: Ein Angreifer flutet das System mit Log-Daten, um Beweise zu überschreiben oder einen Absturz zu provozieren

Open Redirect: Nutzer werden über URL-Parameter unkontrolliert auf externe Phishing-Seiten weitergeleitet

Path Traversal: Durch Sequenzen wie ../ greifen Angreifer auf Dateien außerhalb des vorgesehenen Verzeichnisses zu

Insecure PRNGs: Die Nutzung nicht-kryptographischer Zufallszahlengeneratoren für Sicherheitszwecke macht kryptographische Werte vorhersagbar

Reflection Abuse: Über die Java-Reflection-API können private oder finale Variablen unbefugt geändert werden

SQL Injection: Schadcode in Eingabefeldern manipuliert Datenbankabfragen

XML Embedded DTD (XXE): Durch Dokumenttyp-Definitionen können lokale Dateien referenziert oder das System angegriffen werden

NoSQL Injection: Ähnlich wie bei SQL werden hier NoSQL-Abfragen (z. B. MongoDB) durch präparierte Eingaben manipuliert

Cross-Site Scripting (XSS): Bösartige Skripte werden in Webseiten eingeschleust und im Browser anderer Nutzer ausgeführt



Author

Isaac M.

Information

Last changed