Firefox Sicherheitsrichtlinien
Zweck
Dieses Dokument skizziert eine Reihe von Sicherheitsrichtlinien, die im Allgemeinen für alle Client-Anwendungen wie Firefox und Thunderbird gelten.
Grundsätze des sicheren Programmierens
Stellen Sie sicher, dass die Anwendung den OWASP Secure Coding Principles folgt:
- Minimieren der Angriffsfläche
- Festlegen sicherer Standardwerte
- Prinzip der geringsten Privilegien
- Prinzip der tiefengestaffelten Abwehr
- Sichere Fehlerbehandlung
- Diensten nicht vertrauen
- Sicherheit einfach halten
- Sicherheitsprobleme korrekt beheben
Eingabevalidierung
-
Akzeptiert die Anwendung Benutzereingaben?
- Überprüfen Sie eine Auswahl von Eingabestellen, um sicherzustellen, dass beim Akzeptieren von Benutzerdaten angemessene Maximalwerte festgelegt sind
- Überprüfen Sie eine Auswahl von Eingabestellen, um sicherzustellen, dass die Anwendung nur eine definierte Menge akzeptabler Zeichen zulässt
- Stellen Sie sicher, dass eine Positivliste anstelle einer Negativliste verwendet wird
-
Akzeptiert die Anwendung Benutzereingaben, die in irgendeiner Weise angezeigt werden?
- Überprüfen Sie eine Auswahl von Ein- und Ausgabestellen, um sicherzustellen, dass vom Benutzer bereitgestellte Inhalte in der Antwort korrekt 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 verfügbar sind.
Name | Risikoniveau | Problem | Lösung |
---|---|---|---|
eval | Sehr Hoch | Ruft den JavaScript-Parser auf - gefährlich bei Verwendung mit unzuverlässigen Eingaben | 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 keine besseren Alternativen verfügbar sind.
Name | Risikoniveau | Problem | Lösung |
---|---|---|---|
gets | Sehr Hoch | Keine Prüfung der Grenzen | Verwenden Sie gets nicht. Verwenden Sie stattdessen fgets. |
strcpy | Sehr Hoch | Keine Prüfung der Grenzen | strcpy ist nur sicher, wenn der Quellstring eine Konstante ist und das Ziel groß genug ist, um ihn zu halten. Andernfalls verwenden Sie strncpy. |
sprintf | Sehr Hoch | Keine Prüfung der Grenzen, Format-String-Angriffe | sprintf ist sehr schwer sicher zu verwenden. Verwenden Sie stattdessen snprintf. |
scanf, sscanf | Hoch | Möglicherweise keine Prüfung der Grenzen, Format-String-Angriffe | Stellen Sie sicher, dass alle %-Direktiven mit den entsprechenden Argumenttypen übereinstimmen. Verwenden Sie keine '%s'-Direktiven ohne Begrenzungsprü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 Prüfung der Grenzen | Wenn Eingabegrößen nicht gut bekannt und festgelegt sind, verwenden Sie strncat. |
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 auf die richtige Anzahl und Typen von %-Direktiven, bevor Sie diese Funktionen aufrufen. Stellen Sie sicher, dass Zielgrößenargumente korrekt sind. |
strncpy, fgets, strncat | Niedrig | Möglicherweise keine Nullterminierung | Terminate immer explizit den Zielpuffer. Stellen Sie sicher, dass das Größenargument korrekt ist. Stellen Sie sicher, dass im Zielpuffer Platz für das Nullzeichen bleibt! |
URLs
-
Verwendet die Anwendung unzuverlässige Daten, um URLs zu erstellen?
- Stellen Sie sicher, dass solche Daten vor der Verwendung ausreichend gereinigt und kodiert werden.
- Stellen Sie sicher, dass alle aus diesen URLs bezogenen Daten vor der Verwendung oder Speicherung überprüft werden.
-
Folgt die Anwendung Umleitungen?
- Stellen Sie sicher, dass Sicherheitsüberprüfungen sowohl bei Umleitungen als auch bei der ursprünglichen Anfrage-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 ausfällt.
Fernzugriff auf Systeme
- Greift die Anwendung auf entfernte 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 Zustimmung des Benutzers übermittelt werden.
Informationsspeicherung
-
Dateispeicherung
-
Stellen Sie sicher, dass die Anwendung überprüft, ob erstellte Dateien unter erlaubten Pfaden liegen
-
Werden Dateinamen aus unzuverlässigen Daten generiert?
- Stellen Sie sicher, dass die Daten geeignet kodiert werden
-
Überprüfen Sie, ob Dateien von einem akzeptablen Typ sind
-
Überprüfen Sie, ob Dateien vernünftige Größenbeschränkungen nicht überschreiten können
-
-
Datenbankspeicherung
- Stellen Sie sicher, dass alle unzuverlässigen Informationen, die an die Datenbank gesendet werden, ausreichend gereinigt werden
- Verwenden Sie nach Möglichkeit typsichere Parametrisierung, um Injektionsangriffe zu verhindern
-
Sensible Informationen
- Stellen Sie sicher, dass alle sicherheitskritischen oder persönlichen Informationen ausreichend geschützt sind (siehe Verschlüsselungsabschnitt)
- Besondere Vorsicht ist bei Anmeldedaten (Passwörter, etc.) geboten - Wenn Sie mit Informationen dieser Art arbeiten und unsicher sind, was zu tun ist, lohnt es sich immer, zu fragen
-
Protokollierung
- Vergessen Sie nicht, dass die obigen 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
-
Gibt die Anwendung dem Benutzer Sicherheitswarnungen aus?
-
Sind diese klar verständlich und angemessen?
-
Kann unzuverlässige Daten die Bedeutung von Nachrichten an den Benutzer ändern?
- Kann Benutzereingaben die Bedeutung von Nachrichten ändern?
- Kann Benutzereingaben systemeigene Nachrichten vom sichtbaren Bildschirm verdrängen?
- 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 nutzen, um den Benutzer dazu zu verleiten, auf etwas zu klicken, das er nicht wollte?
Informationsoffenlegung
- Gibt die Anwendung Informationen preis, die den Benutzer gefährden könnten?
- Gibt die Anwendung Informationen preis, die sie nicht benötigt?
- Gibt die Anwendung etwas preis, das den Benutzer überraschen oder verärgern könnte?
Front-End
-
Werden sichere Mechanismen zum Erstellen von XUL- und HTML-UI-Elementen verwendet?
- z.B. verwenden Sie
createTextNode
anstelle voninnerHTML
oder ähnlichem
- z.B. verwenden Sie
-
Erstellt die Anwendung ihre eigenen
docshells
(Tabs, iframes)?- Stellen Sie sicher, dass Sie den Typ dieser explizit angeben, z.B.
iframe.setAttribute("type", "content")
- Stellen Sie sicher, dass Sie den Typ dieser explizit angeben, z.B.