Artikel

Symfony-Projekte absichern: Best Practices & Composer-Audit

LinuxSymfony

​Hier ist ein kleiner Leitfaden zur Absicherung deiner Symfony-Projekte, basierend auf bewährten Sicherheitspraktiken und der Nutzung von Composer zur Überprüfung auf bekannte Sicherheitslücken.

1. Symfony-spezifische Sicherheitsmaßnahmen

a) Symfony Profiler deaktivieren

Der Symfony Profiler sollte niemals in Produktionsumgebungen aktiviert sein, da er sensible Informationen preisgeben kann, wie z. B. Passwörter oder geheime Konfigurationsdaten

Maßnahme:

  • Stelle sicher, dass der Profiler nur in Entwicklungsumgebungen aktiviert ist

b) Zugriffskontrolle und Rollenverwaltung

Nutze Symfony’s Sicherheitskomponenten, um den Zugriff auf Ressourcen basierend auf Benutzerrollen zu steuern

Beispiel:

$this->denyAccessUnlessGranted('ROLE_ADMIN');

c) Schutz vor Cross-Site Scripting (XSS)

Twig, das Template-System von Symfony, schützt standardmäßig vor XSS, indem es Ausgaben automatisch escaped.

Achte darauf:

  • Vermeide die Verwendung des |raw Filters, es sei denn, du bist sicher, dass der Inhalt sicher ist.

d) Schutz vor Cross-Site Request Forgery (CSRF)

Symfony bietet integrierten Schutz gegen CSRF-Angriffe durch die Verwendung von CSRF-Tokens in Formularen.​

$form = $this->createForm(MyFormType::class, $entity, [
    'csrf_protection' => true,
]);

e) Vermeidung von Insecure Direct Object References (IDOR)

Stelle sicher, dass Benutzer nur auf Ressourcen zugreifen können, für die sie berechtigt sind.​

Beispiel:

if ($order->getUser() !== $this->getUser()) {
    throw $this->createAccessDeniedException();
}

2. Composer-Audit: Sicherheitslücken in Abhängigkeiten erkennen

Composer 2.4 führt das composer audit Kommando ein, mit dem du deine Projektabhängigkeiten auf bekannte Sicherheitslücken überprüfen kannst.

a) Composer-Version überprüfen

Stelle sicher, dass du Composer in Version 2.4 oder höher verwendest:

composer --version

Falls erforderlich, aktualisiere Composer:

composer self-update

b) Sicherheitsüberprüfung durchführen

Führe das Audit-Kommando aus, um Sicherheitslücken zu identifizieren:

composer audit --format=table

Weitere Ausgabeformate sind verfügbar: plain, json, summary.​

c) Integration in CI/CD-Pipelines

Integriere composer audit in deine CI/CD-Pipeline, um bei bekannten Sicherheitslücken den Build zu stoppen:​

composer audit
if [ $? -ne 0 ]; then
    echo "Sicherheitslücken gefunden. Build abgebrochen."
    exit 1
fi

d) Verwendung von Roave/SecurityAdvisories

Das Paket roave/security-advisories verhindert die Installation von Paketen mit bekannten Sicherheitslücken:​

composer require --dev roave/security-advisories:dev-latest

3. Automatisierte Sicherheitsüberwachung mit GitHub Dependabot

GitHub bietet mit Dependabot ein Tool, das deine Projektabhängigkeiten kontinuierlich auf Sicherheitslücken überprüft und bei Bedarf automatisch Pull Requests zur Aktualisierung erstellt.

a) Dependabot aktivieren

Um Dependabot für dein Repository zu aktivieren:

  1. Navigiere zu deinem Repository auf GitHub.
  2. Gehe zu Einstellungen > Sicherheit > Erweiterte Sicherheit.
  3. Aktiviere die Optionen für:
    • Dependabot alerts
    • Dependabot security updates
    • Dependabot version updates

Weitere Informationen findest du in der Schnellstartanleitung für Dependabot.

b) Dependabot konfigurieren

Erstelle eine .github/dependabot.yml Datei in deinem Repository, um Dependabot nach deinen Anforderungen zu konfigurieren.​

Beispielkonfiguration für Composer:

version: 2
updates:
  - package-ecosystem: "composer"
    directory: "/"
    schedule:
      interval: "daily"

Diese Konfiguration überprüft täglich auf Updates für deine Composer-Abhängigkeiten.

c) Benachrichtigungen und Pull Requests

Dependabot erstellt automatisch Pull Requests, wenn Sicherheitslücken in deinen Abhängigkeiten erkannt werden. Du kannst diese PRs überprüfen und mergen, um deine Abhängigkeiten auf sichere Versionen zu aktualisieren.​

4. Weitere Empfehlungen

  • Regelmäßige Updates: Halte Symfony und alle Abhängigkeiten stets auf dem neuesten Stand.​
  • Verwendung von HTTPS: Stelle sicher, dass deine Anwendung über HTTPS erreichbar ist, um Datenverschlüsselung zu gewährleisten.​
  • Sicherheitsheader setzen: Nutze HTTP-Sicherheitsheader wie Content-Security-Policy, X-Content-Type-Options und Strict-Transport-Security.​
  • Fehlermeldungen in Produktion deaktivieren: Vermeide die Anzeige von detaillierten Fehlermeldungen in der Produktionsumgebung, um keine sensiblen Informationen preiszugeben.​

0 Kommentare