Firefox Sicherheitsrichtlinien
Zweck
Dieses Dokument skizziert eine Reihe von Sicherheitsrichtlinien, die allgemein für alle Client-Anwendungen wie Firefox und Thunderbird gelten.
Sichere Programmierprinzipien
Stellen Sie sicher, dass die Anwendung den OWASP Secure Coding Principles folgt:
- Minimieren der Angriffsfläche
 - Etablieren von sicheren Standardwerten
 - Prinzip der minimalen Rechte
 - Prinzip der Tiefenverteidigung
 - Sicheres Scheitern
 - Dienstleistungen nicht vertrauen
 - Sicherheit einfach halten
 - Sicherheitsprobleme korrekt beheben
 
Eingabeverifizierung
- 
Akzeptiert die Anwendung Benutzereingaben?
- Überprüfen Sie eine Auswahl an Eingabestellen, um sicherzustellen, dass vernünftige Maximalwerte bei der Annahme von Benutzerdaten vorhanden sind
 - Überprüfen Sie eine Auswahl an Eingabestellen, um sicherzustellen, dass die Anwendung nur eine definierte Menge akzeptabler Zeichen zulässt
 - Stellen Sie sicher, dass das Allowlisting anstelle des Denylisting verwendet wird
 
 - 
Akzeptiert die Anwendung Benutzereingaben, die auf irgendeine Weise angezeigt werden?
- Überprüfen Sie eine Auswahl an Eingabe- und Ausgabestellen, um sicherzustellen, dass vom Benutzer bereitgestellte Inhalte korrekt im Antwortinhalt kodiert sind
 
 
Chrome JS - Gefährliche Funktionen
Werden eine der folgenden Funktionen verwendet?
Falls ja, stellen Sie sicher, dass sie sicher sind und keine besseren Alternativen zur Verfügung stehen.
| Name | Risikostufe | Problem | Lösung | 
|---|---|---|---|
| eval | Sehr Hoch | Ruft den JavaScript-Parser auf - gefährlich bei unzuverlässigen Eingaben | Vermeiden Sie eval wenn möglich. | 
| setTimeout(string, time) | Sehr Hoch | Handelt wie eval | Verwenden Sie setTimeout(function, time, param1, param2, …) | 
C++ - Gefährliche Funktionen
Werden eine der folgenden Funktionen verwendet?
Falls ja, stellen Sie sicher, dass sie sicher sind und keine besseren Alternativen zur Verfügung stehen.
| Name | Risikostufe | Problem | Lösung | 
|---|---|---|---|
| gets | Sehr Hoch | Keine Grenzenprüfung | Verwenden Sie nicht gets. Nutzen Sie stattdessen fgets. | 
| strcpy | Sehr Hoch | Keine Grenzenprüfung | strcpy ist nur sicher, wenn der Quellstring konstant ist und das Ziel groß genug ist, um ihn aufzunehmen. Andernfalls nutzen Sie strncpy. | 
| sprintf | Sehr Hoch | Keine Grenzenprüfung, Format-String-Angriffe | sprintf ist sehr schwer sicher zu verwenden. Nutzen Sie snprintf stattdessen. | 
| scanf, sscanf | Hoch | Möglicherweise keine Grenzenprüfung, Format-String-Angriffe | Stellen Sie sicher, dass alle %-Direktiven den entsprechenden Argumenttypen entsprechen. Verwenden Sie keine '%s'-Direktiven ohne Grenzenprüfung. Nutzen Sie '%xs', wobei x die Puffergröße des entsprechenden Arguments ist. Verwenden Sie keine unzuverlässigen, ungeprüften Daten im Format-String. | 
| strcat | Hoch | Keine Grenzenprüfung | Wenn die Eingabegrößen nicht wohlbekannt und festgelegt sind, verwenden Sie strncat stattdessen. | 
| printf, fprintf, snprintf, vfprintf, vsprintf, syslog | Hoch | Format-String-Angriffe | Verwenden Sie keine unzuverlässigen, ungeprüften Daten im Format-String. Falls der Format-String durch Webinhalt oder Benutzereingaben beeinflusst werden kann, validieren Sie ihn auf die richtige Anzahl und Typ der %-Direktiven, bevor Sie diese Funktionen aufrufen. Stellen Sie sicher, dass die Puffergrößen korrekt sind. | 
| strncpy, fgets, strncat | Niedrig | Möglicherweise keine Null-Terminierung | Stellen Sie immer explizit sicher, dass der Zielpuffer null-terminiert wird. Stellen Sie sicher, dass das Größenargument korrekt ist. Achten Sie darauf, im Zielpuffer Platz für das Null-Zeichen zu lassen! | 
URLs
- 
Verwendet die Anwendung unzuverlässige Daten, um URLs zu konstruieren?
- Stellen Sie sicher, dass solche Daten vor der Verwendung ausreichend bereinigt und kodiert werden.
 - Stellen Sie sicher, dass Daten, die aus diesen URLs abgeleitet werden, vor der Verwendung oder Speicherung geprüft werden.
 
 - 
Folgt die Anwendung Weiterleitungen?
- Stellen Sie sicher, dass Sicherheitsprüfungen sowohl bei Weiterleitungen als auch bei der ursprünglichen Anfrage-URI durchgeführt werden.
 
 
Sicherheitskontrollen
- Implementiert die Anwendung geeignete Berechtigungsprüfungen?
- Stellen Sie sicher, dass die korrekten APIs genutzt werden, wenn verfügbar (z.B. shouldLoad, etc.)
 - Stellen Sie sicher, dass die Anwendung sicher scheitert.
 
 
Zugriffe auf entfernte Systeme
- Greift die Anwendung auf irgendwelche entfernten Systeme zu?
 
- Stellen Sie sicher, dass TLS verwendet wird, es sei denn, es gibt einen sehr guten Grund dagegen.
 - Stellen Sie sicher, dass keine Benutzerinformationen ohne die Zustimmung des Benutzers übertragen werden.
 
Informationsspeicherung
- 
Dateispeicherung
- 
Stellen Sie sicher, dass die Anwendung überprüft, dass alle erstellten Dateien unter erlaubten Pfaden gespeichert werden
 - 
Werden Dateinamen aus unzuverlässigen Daten generiert?
- Stellen Sie sicher, dass die Daten geeignet kodiert sind
 
 - 
Überprüfen Sie, dass Dateien von einem akzeptablen Typ sind
 - 
Überprüfen Sie, dass Dateien vernünftige Größenlimits nicht überschreiten
 
 - 
 - 
Datenbankspeicherung
- Stellen Sie sicher, dass alle an die Datenbank gesendeten, unzuverlässigen Informationen ausreichend bereinigt werden
 - Wenn möglich, verwenden Sie typsichere Parametrisierung zur Vermeidung von Injection-Angriffen
 
 - 
Sensible Informationen
- Stellen Sie sicher, dass alle sicherheitsrelevanten oder personenbezogenen Informationen ausreichend geschützt sind (siehe Abschnitt Verschlüsselung)
 - Besondere Vorsicht ist bei Anmeldedaten (Passwörter etc.) geboten - Wenn Sie mit solchen Informationen arbeiten und unsicher sind, was zu tun ist, lohnt es sich immer nachzufragen
 
 - 
Protokollierung
- Vergessen Sie nicht, dass die obigen Regeln auch für Protokolle sowie Ihre üblichen Anwendungsdaten gelten
 
 
Verschlüsselung
- Verwendet die Anwendung irgendeine Form von Verschlüsselung?
 - Sind die verwendeten Algorithmen anerkannte Standards?
 
Denial of Service
- Stellen Sie sicher, dass die Anwendung gegen die Erschöpfung von:
- Systemspeicher
 - Speicherplatz
 
 
Sicherheitswarnungen
- 
Präsentiert die Anwendung dem Benutzer irgendwelche Sicherheitswarnungen?
 - 
Sind sie klar verständlich und angemessen?
 - 
Kann unzuverlässige Daten die Bedeutung von Nachrichten für den Benutzer ändern?
- Kann Benutzereingaben die Bedeutung von Nachrichten ändern?
 - Kann Benutzereingaben Systemnachrichten außerhalb des sichtbaren Bildschirms erzwingen?
 - Kann Benutzereingaben Sonderzeichen enthalten, die die Bedeutung von Nachrichten ändern können (z.B. Unicode-Rechts-nach-Links-Override U+202E)
 
 - 
Kann ein Angreifer das Timing von Dialogen verwenden, um den Benutzer zu täuschen, sodass er auf etwas klickt, was er nicht beabsichtigt hat?
 
Informationsweitergabe
- Gibt die Anwendung Informationen weiter, die den Benutzer gefährden könnten?
 - Gibt die Anwendung Informationen weiter, die sie nicht muss?
 - Gibt die Anwendung etwas weiter, das den Benutzer überraschen oder verärgern könnte?
 
Front-End
- 
Werden sichere Mechanismen verwendet, um XUL- und HTML-UI-Elemente zu erstellen?
- Zum Beispiel verwenden Sie createTextNode anstelle von innerHTML oder ähnlichem
 
 - 
Erstellt die Anwendung eigene Docshells (Tabs, iframes)?
- Stellen Sie sicher, dass Sie ausdrücklich den Typ dieser angeben, z.B. iframe.setAttribute("type", "content")