IT-Sicherheit

Secure Coding – 10 Regeln um sichere Software zu bauen

Kevin KrögerIT-Sicherheit

Du brauchst nicht ein Security-Experte zu sein um sichere Code zu schreiben. Du brauchst nur 10 einfache Regeln zu followen. Wir haben sie für dich zusammengefasst.

Regel 1: Inputs validieren, IMMER

Das ist Regel Nummer Eins für einen Grund: Das ist die häufigste Ursache von Vulnerabilities. Jeder Input von außen – von einem User, einer API, einer Datei – ist potentiell malicious. Validiere ALLES: ```python # FALSCH: sql = f"SELECT * FROM users WHERE email = {user_input}" # RICHTIG: cursor.execute("SELECT * FROM users WHERE email = ?", (user_input,)) ``` Das ist die Differenz zwischen einer sicheren Applikation und einer, die gehackt werden kann.

Regel 2: Prepared Statements für Datenbank-Queries

Never string concatenation für SQL. Immer prepared statements. ```python # FALSCH – SQL Injection: query = f"DELETE FROM users WHERE id = {user_id}" # RICHTIG – Prepared Statement: cursor.execute("DELETE FROM users WHERE id = ?", (user_id,)) ``` Das schützt dich vor SQL Injection.

Regel 3: Escape Output

Wenn du daten anzeigst (in HTML, JSON, XML), escape sie: ```python # FALSCH – XSS: html = f"<h1>{user_input}</h1>" # RICHTIG – Escaped: from html import escape html = f"<h1>{escape(user_input)}</h1>" ``` Das schützt dich vor XSS.

Regel 4: Strong Cryptography

Benutze moderne Crypto-Algorithmen. Nicht MD5, nicht SHA1 – benutze SHA256 oder besser. Für Passwörter: Benutze bcrypt, scrypt, oder Argon2. Niemals plain text. ```python # FALSCH: password_hash = hashlib.md5(password).hexdigest() # RICHTIG: import bcrypt password_hash = bcrypt.hashpw(password, bcrypt.gensalt()) ```

Regel 5: Authentifizierung und Authorization

Immer Benutzer authentifizieren (wer bist du?). Und immer autorisieren (darfst du das?): ```python # RICHTIG – mit Checks: @require_login # Authentication def delete_user(user_id): current_user = get_current_user() if current_user.id != user_id and not current_user.is_admin: raise PermissionDenied() # Authorization delete(user_id) ```

Regel 6: Fehler-Messages nicht zu informativ

Gebe nicht "User nicht gefunden" zurück wenn die Email nicht existiert. Das verrät Attackern welche Emails registriert sind. ```python # FALSCH – Information Disclosure: if user_not_found: return "User nicht gefunden" # RICHTIG – Generisch: if user_not_found: return "Email oder Passwort falsch" ```

Regel 7: Logging ohne sensitive Daten

Logge Security-relevante Events. Aber logge nicht Passwörter, Kreditkarten-Nummern, oder andere sensitive Daten. ```python # FALSCH: logger.info(f"User logged in: {username}, password: {password}") # RICHTIG: logger.info(f"User logged in: {username}") ```

Regel 8: Dependencies updaten

Alte Libraries haben bekannte Vulnerabilities. Update regelmäßig. ```bash # Python: pip install --upgrade -r requirements.txt # Node.js: npm audit fix npm update ```

Regel 9: Secrets nicht im Code

Nie API Keys, Passwörter, oder Tokens im Code. Nutze Environment Variables: ```python # FALSCH – Secret im Code: db_password = "super_secret_123" # RICHTIG – Umgebungsvariable: db_password = os.getenv("DB_PASSWORD") ```

Regel 10: Security Review

Der beste sichere Code ist Code, der von jemandem anderem reviewed wurde. Peer Reviews sind essentiell. ```bash # Git Workflow: git branch feature/new-feature # Develop feature git push origin feature/new-feature # Create Pull Request # Peer review code # Another developer approves # Merge to main ```

Tools die helfen

- SAST (Static Analysis): SonarQube, Semgrep – Analyse deinen Code automatisch - Dependency Checker: Snyk, OWASP Dependency Check – Finde vulnerable Dependencies - Security Linter: Bandit (Python), ESLint mit Security Rules (JS) - WAF: ModSecurity, CloudFlare – Blockiere Attacks auf HTTP-Level

Fazit

Sichere Code zu schreiben ist nicht schwer. Es erfordert nur Discipline und Aufmerksamkeit auf diese 10 Regeln. Die meisten Vulnerabilities entstehen, weil Entwickler diese Basics ignorieren.

FAQ