Firefox Sicherheitsrichtlinien
Zweck
Dieses Dokument skizziert eine Reihe von Sicherheitsrichtlinien, die im Allgemeinen für alle Client-Anwendungen gelten, wie zum Beispiel Firefox und Thunderbird.
Grundsätze des sicheren Codierens
Stellen Sie sicher, dass die Anwendung den OWASP Secure Coding Principles folgt:
- Minimierung der Angriffsfläche
- Sichere Standardeinstellungen etablieren
- Prinzip der geringsten Rechte
- Prinzip der Tiefe Verteidigung
- Sicheres Scheitern
- Vertraue nicht auf Dienste
- Halten Sie die Sicherheit einfach
- Sicherheitsprobleme korrekt beheben
Eingabevalidierung
-
Akzeptiert die Anwendung Benutzereingaben?
- Überprüfen Sie eine Stichprobe von Eingabeorten, um sicherzustellen, dass vernünftige Maximalwerte festgelegt sind, wenn Benutzerdaten akzeptiert werden
- Überprüfen Sie eine Stichprobe von Eingabeorten, um sicherzustellen, dass die Anwendung nur eine definierte Menge von akzeptablen Zeichen zulässt
- Sicherstellen, dass eine Positivliste statt einer Negativliste verwendet wird
-
Akzeptiert die Anwendung Benutzereingaben, die in irgendeiner Weise angezeigt werden?
- Überprüfen Sie eine Stichprobe von Ein- und Ausgabeorten, um sicherzustellen, dass vom Benutzer bereitgestellte Inhalte in der Antwort richtig kodiert sind
Chrome JS - Gefährliche Funktionen
Werden eine der folgenden Funktionen verwendet?
Falls ja, stellen Sie sicher, dass sie sicher sind und dass keine besseren Alternativen verfügbar sind.
Name | Risikostufe | Problem | Lösung |
---|---|---|---|
eval | Sehr hoch | Ruft den JavaScript-Parser auf - gefährlich, wenn mit unzuverlässiger Eingabe verwendet | Vermeiden Sie eval, wenn möglich. |
setTimeout(string, time) | Sehr hoch | Wirkt 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 dass keine besseren Alternativen verfügbar sind.
Name | Risikostufe | Problem | Lösung |
---|---|---|---|
gets | Sehr hoch | Keine Grenzenprüfung | Verwenden Sie gets nicht. Verwenden Sie stattdessen fgets. |
strcpy | Sehr hoch | Keine Grenzenprüfung | strcpy ist nur sicher, wenn die Quellzeichenfolge eine Konstante ist und das Ziel groß genug ist, um sie aufzunehmen. Andernfalls verwenden Sie strncpy. |
sprintf | Sehr hoch | Keine Grenzenprüfung, Format-String-Angriffe | sprintf ist sehr schwer sicher zu verwenden. Verwenden Sie stattdessen snprintf. |
scanf, sscanf | Hoch | Möglicherweise keine Grenzenprüfung, Format-String-Angriffe | Stellen Sie sicher, dass alle %-Direktiven mit den entsprechenden Argumenttypen übereinstimmen. Verwenden Sie keine '%s'-Direktiven ohne Grenzenprüfung. Verwenden Sie '%xs', wobei x die Puffergröße des entsprechenden Arguments ist. Verwenden Sie keine unzuverlässigen, nicht validierten Daten im Format-String. |
strcat | Hoch | Keine Grenzenprüfung | Wenn die Eingabegrößen nicht gut bekannt und festgelegt sind, verwenden Sie strncat stattdessen. |
printf, fprintf, snprintf, vfprintf, vsprintf, syslog | Hoch | Format-String-Angriffe | Verwenden Sie keine unzuverlässigen, nicht validierten Daten im Format-String. Wenn der Format-String durch Web-Inhalte oder Benutzereingaben beeinflusst werden kann, validieren Sie ihn für die richtige Anzahl und Art der %-Direktiven vor dem Aufrufen dieser Funktionen. Stellen Sie sicher, dass die Zielgrößenargumente korrekt sind. |
strncpy, fgets, strncat | Niedrig | Kann möglicherweise nicht null-terminiert werden | Behandeln Sie immer explizit die Null-Terminierung des Zielpuffers. Stellen Sie sicher, dass das Größenargument korrekt ist. Achten Sie darauf, im Zielpuffer Platz für das Hinzufügen des Nullzeichens zu lassen! |
URLs
-
Verwendet die Anwendung unzuverlässige Daten zur Konstruktion von URLs?
- Stellen Sie sicher, dass solche Daten vor der Verwendung angemessen bereinigt und kodiert sind.
- Stellen Sie sicher, dass alle Daten, die von diesen URLs stammen, vor der Verwendung oder Speicherung überprüft werden.
-
Folgt die Anwendung Weiterleitungen?
- Stellen Sie sicher, dass Sicherheitsüberprüfungen bei Weiterleitungen sowie bei der ursprünglichen Anforderungs-URI durchgeführt werden.
Sicherheitskontrollen
-
Implementiert die Anwendung geeignete Berechtigungsprüfungen?
- Stellen Sie sicher, dass die richtigen APIs verwendet werden, wo verfügbar (z.B., shouldLoad, etc.)
- Stellen Sie sicher, dass die Anwendung sicher scheitert.
Zugriff 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, dies nicht zu tun.
- Stellen Sie sicher, dass keine Benutzerdaten ohne Einwilligung des Benutzers übertragen werden.
Informationsspeicherung
-
Dateispeicherung
-
Stellen Sie sicher, dass die Anwendung überprüft, dass alle erstellten Dateien unter erlaubten Pfaden liegen
-
Werden Dateinamen aus unzuverlässigen Daten generiert?
- Stellen Sie sicher, dass die Daten entsprechend kodiert sind
-
Überprüfen Sie, ob die Dateien von einem akzeptablen Typ sind
-
Überprüfen Sie, ob Dateien keine vernünftigen Größenlimits überschreiten können
-
-
Datenbankspeicherung
- Stellen Sie sicher, dass alle unzuverlässigen Informationen, die an die Datenbank gesendet werden, angemessen bereinigt sind
- Wenn möglich, verwenden Sie typsichere Parametrisierung, um Injection-Angriffe zu verhindern
-
Sensible Informationen
- Stellen Sie sicher, dass alle sicherheitssensitiven oder persönlichen Informationen angemessen geschützt sind (siehe Abschnitt Verschlüsselung)
- Besondere Vorsicht ist bei Anmeldedaten (Passwörter, etc.) geboten - Wenn Sie mit solchen Informationen arbeiten und nicht sicher sind, was zu tun ist, lohnt es sich immer, zu fragen
-
Protokollierung
- Vergessen Sie nicht, dass die oben genannten Regeln auch für Protokolle sowie Ihre üblichen Anwendungsdaten gelten
Verschlüsselung
- Verwendet die Anwendung irgendeine Form der Verschlüsselung?
- Sind die verwendeten Algorithmen anerkannte Standards?
Denial of Service
-
Stellen Sie sicher, dass die Anwendung gegen Erschöpfung von:
- Systemspeicher
- Speicherplatz
Sicherheitswarnungen
-
Präsentiert die Anwendung dem Benutzer irgendwelche Sicherheitswarnungen?
-
Sind diese 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?
- Können Benutzereingaben Systemnachrichten vom sichtbaren Bildschirm verdrängen?
- Können Benutzereingaben Sonderzeichen enthalten, die die Bedeutung von Nachrichten ändern können (z.B., Unicode-Rechts-nach-links-Umkehrung U+202E)
-
Kann ein Angreifer das Timing von Dialogen nutzen, um den Benutzer dazu zu verleiten, auf etwas zu klicken, das nicht beabsichtigt war?
Informationsoffenlegung
- Gibt die Anwendung Informationen preis, die den Benutzer kompromittieren könnten?
- Gibt die Anwendung irgendwelche Informationen preis, die sie nicht muss?
- Gibt die Anwendung irgendetwas preis, das den Benutzer überraschen oder verärgern könnte?
Frontend
-
Werden sichere Mechanismen zur Erstellung von XUL- und HTML-Benutzeroberflächenelementen verwendet?
- z.B., verwenden Sie createTextNode anstelle von innerHTML oder Ähnlichem
-
Erstellt die Anwendung ihre eigenen Docshells (Tabs, iframes)?
- Stellen Sie sicher, dass Sie explizit den Typ dieser angeben, z.B., iframe.setAttribute("type", "content")