Sicherheit im Web

Websites enthalten verschiedene Arten von Informationen. Einige davon sind nicht sensibel, zum Beispiel der Text, der auf den öffentlichen Seiten angezeigt wird. Andere sind sensibel, wie zum Beispiel Benutzernamen, Passwörter und Bankinformationen von Kunden oder interne Algorithmen und vertrauliche Produktinformationen.

Sensible Informationen müssen geschützt werden, und darauf liegt der Schwerpunkt der Websicherheit. Wenn diese Informationen in die falschen Hände geraten, könnten sie genutzt werden, um:

  • Unternehmen durch die Weitergabe ihrer Informationen an Wettbewerber einen Wettbewerbsnachteil zu verschaffen.
  • Ihre Dienste zu deaktivieren oder zu kapern, was zu ernsthaften Betriebsproblemen führt.
  • Die Privatsphäre ihrer Kunden zu gefährden und sie dadurch anfällig für Profiling, gezielte Angriffe, Datenverlust, Identitätsdiebstahl oder sogar finanzielle Verluste zu machen.

Moderne Browser verfügen bereits über mehrere Funktionen zum Schutz der Sicherheit der Benutzer im Web. Entwickler müssen jedoch auch beste Praktiken anwenden und sorgfältig programmieren, um sicherzustellen, dass ihre Websites sicher sind. Selbst einfache Fehler im Code können zu Schwachstellen führen, die von Angreifern ausgenutzt werden können, um Daten zu stehlen und unbefugte Kontrolle über Dienste zu erlangen.

Dieser Artikel bietet eine Einführung in die Websicherheit, einschließlich konzeptioneller Informationen, die Ihnen helfen, Website-Schwachstellen zu verstehen, und praktischen Leitfäden zur Sicherung dieser Schwachstellen.

Beziehung zwischen Sicherheit und Privatsphäre

Sicherheit und Privatsphäre sind unterschiedliche, aber eng miteinander verbundene Themen. Es lohnt sich, die Unterschiede zwischen den beiden zu kennen und zu verstehen, wie sie zusammenhängen.

  • Sicherheit ist der Akt, private Daten und Systeme vor unbefugtem Zugriff zu schützen. Dies umfasst sowohl Unternehmensdaten (interne) als auch Benutzer- und Partnerdaten (externe).

  • Privatsphäre bezieht sich darauf, den Benutzern Kontrolle darüber zu geben, wie ihre Daten gesammelt, gespeichert und verwendet werden, während gleichzeitig sichergestellt wird, dass sie nicht unverantwortlich genutzt werden. Zum Beispiel sollten Sie Ihre Benutzer darüber informieren, welche Daten Sie von ihnen sammeln, mit welchen Parteien diese Daten geteilt werden und wie sie verwendet werden. Benutzer müssen die Möglichkeit haben, Ihrer Datenschutzrichtlinie zuzustimmen, Zugriff auf ihre gespeicherten Daten zu erhalten und sie bei Bedarf zu löschen.

Gute Sicherheit ist wesentlich für gute Privatsphäre. Sie könnten alle Ratschläge in unserem Privatsphäre im Web Leitfaden befolgen, aber Integrität zeigen und eine robuste Datenschutzrichtlinie haben, bringt wenig, wenn Ihre Website nicht sicher ist und Angreifer Daten einfach stehlen können.

Sicherheitsfunktionen, die von Browsern bereitgestellt werden

Webbrowser befolgen ein striktes Sicherheitsmodell, das eine starke Sicherheit für Inhalte, Verbindungen zwischen Browser und Server und den Datentransport durchsetzt. Dieser Abschnitt befasst sich mit den Funktionen, die diesem Modell zugrunde liegen.

Same-origin policy und CORS

Die Same-origin policy ist ein grundlegender Sicherheitsmechanismus des Webs, der einschränkt, wie ein Dokument oder Skript, das von einer Herkunft geladen wurde, mit einer Ressource von einer anderen Herkunft interagieren kann. Er hilft, potenziell schädliche Dokumente zu isolieren und mögliche Angriffspunkte zu reduzieren.

Im Allgemeinen können Dokumente von einer Herkunft keine Anfragen an andere Herkünfte stellen. Dies ist sinnvoll, da Sie nicht möchten, dass Websites miteinander interagieren und unbefugten Zugriff auf Daten erhalten.

In einigen Fällen möchten Sie diese Einschränkung jedoch lockern. Wenn Sie beispielsweise mehrere Websites haben, die miteinander interagieren, können Sie ihnen erlauben, Ressourcen voneinander anzufordern, indem Sie fetch() verwenden. Dies kann durch Cross-Origin Resource Sharing (CORS) ermöglicht werden, einem auf HTTP-Headern basierenden Mechanismus, der einem Server ermöglicht, alle Herkünfte (Domain, Schema oder Port) anzugeben, von denen ein Browser das Laden von Ressourcen zulassen soll.

HTTP-Modell für die Kommunikation

Das HTTP Protokoll wird von Webbrowsern und Servern verwendet, um miteinander zu kommunizieren, Ressourcen anzufordern, Antworten bereitzustellen (zum Beispiel eine angeforderte Ressource oder eine Erklärung, warum eine Anforderung fehlgeschlagen ist) und Sicherheitsfunktionen für diese Kommunikation bereitzustellen.

Die Transport Layer Security (TLS) bietet Sicherheit und Privatsphäre, indem sie Daten während des Transports über das Netzwerk verschlüsselt und ist die Technik hinter dem HTTPS Protokoll. TLS ist gut für die Privatsphäre, da es Dritte daran hindert, übertragene Daten abzufangen und böswillig zu verwenden.

Alle Browser bewegen sich in Richtung der Notwendigkeit von HTTPS als Standard; dies ist praktisch bereits der Fall, da im Web kaum etwas ohne dieses Protokoll erledigt werden kann.

Verwandte Themen:

Transport Layer Security (TLS)

Das TLS-Protokoll ist der Standard, der es zwei vernetzten Anwendungen oder Geräten ermöglicht, Informationen privat und robust auszutauschen. Anwendungen, die TLS verwenden, können ihre Sicherheitsparameter auswählen, was erhebliche Auswirkungen auf die Sicherheit und Zuverlässigkeit von Daten haben kann.

HTTP Strict-Transport-Security

Der Strict-Transport-Security HTTP Header ermöglicht es einer Website, anzugeben, dass sie nur über HTTPS zugänglich sein darf.

Certificate Transparency

Certificate Transparency (CT) ist ein offenes Framework, das dazu entwickelt wurde, Zertifikatsfehlvergabe zu überwachen und zu schützen. Neu ausgegebene Zertifikate werden in öffentlich geführte, häufig unabhängige CT-Logs 'geloggt'. Diese bieten kryptografisch gesicherte, unveränderbare Protokolle der ausgestellten TLS-Zertifikate.

Mischinhalte

Eine HTTPS-Seite, die Inhalte enthält, die mit Klartext HTTP abgerufen wurden, wird als Mischinhalte-Seite bezeichnet. Seiten wie diese sind nur teilweise verschlüsselt, wodurch die unverschlüsselten Inhalte für Abhörer und Man-in-the-Middle-Angreifer zugänglich sind.

Schwache Signaturalgorithmen

Die Stärke des Hash-Algorithmus, der bei der Signierung eines digitalen Zertifikats verwendet wird, ist ein kritisches Element der Sicherheit des Zertifikats. Einige Signaturalgorithmen sind dafür bekannt, schwach zu sein und sollten, wenn möglich, vermieden werden.

Sichere Kontexte und Funktionsberechtigungen

Browser kontrollieren die Nutzung "mächtiger Funktionen" auf unterschiedliche Weise. Diese "mächtigen Funktionen" umfassen das Generieren von Systembenachrichtigungen auf einer Website, die Nutzung der Kamera eines Benutzers, um Zugriff auf einen Medienstream zu erhalten, die Manipulation der System-GPU und die Verwendung von Webzahlungen. Wenn eine Seite diese APIs, die solche Funktionen steuern, uneingeschränkt nutzen könnte, könnten böswillige Entwickler Folgendes versuchen:

  • Nutzer mit unnötigen Benachrichtigungen und anderen UI-Funktionen belästigen.
  • Ihre Webcam ohne Vorwarnung einschalten, um sie auszuspionieren.
  • Ihren Browser/Ihr System verstopfen, um Denial of Service (DoS)-Angriffe zu starten.
  • Daten oder Geld stehlen.

Diese "mächtigen Funktionen" werden auf folgende Weise kontrolliert:

  • Die Nutzung solcher Funktionen ist nur in sicheren Kontexten gestattet. Ein sicherer Kontext ist ein window oder ein worker, für das eine angemessene Sicherheit besteht, dass die Inhalte sicher (via HTTPS/TLS) geliefert wurden. In einem sicheren Kontext ist das Potenzial für die Kommunikation mit Kontexten, die nicht sicher sind, begrenzt. Sichere Kontexte helfen auch, Man-in-the-Middle-Angreifer vom Zugriff auf mächtige Funktionen abzuhalten.

    Eine Liste der Webplattform-Funktionen, die nur in sicheren Kontexten verfügbar sind, finden Sie unter Funktionen, die auf sichere Kontexte beschränkt sind.

  • Die Nutzung dieser Funktionen wird durch ein System von Benutzerberechtigungen gesteuert: Benutzer müssen ausdrücklich zustimmen, den Zugriff auf solche Funktionen zu gewähren, was bedeutet, dass sie nicht automatisch genutzt werden können. Benutzerberechtigungsanfragen passieren automatisch, und Sie können den Status einer API-Berechtigung mithilfe der Permissions API abfragen.

  • Einige andere Browserfunktionen können nur als Reaktion auf eine Benutzeraktion wie das Klicken auf einen Button verwendet werden, was bedeutet, dass sie innerhalb eines entsprechenden Ereignishandlers aufgerufen werden müssen. Dies wird als transiente Aktivierung bezeichnet. Weitere Informationen finden Sie unter Funktionen, die von Benutzeraktivierungen abhängen.

Sicherheitsüberlegungen auf hoher Ebene

Es gibt viele Aspekte der Websicherheit, die sowohl auf der Server- als auch auf der Client-Seite berücksichtigt werden müssen. Dieser Abschnitt konzentriert sich hauptsächlich auf Client-seitige Sicherheitsüberlegungen. Eine nützliche Zusammenfassung der Sicherheitsaspekte aus Server-Sicht, die auch Beschreibungen häufiger Angriffe enthält, finden Sie unter Website-Sicherheit (Teil unseres Serverseitigen Website-Programmierung Lernmoduls).

Verantwortungsbewusste Speicherung von Client-seitigen Daten

Der verantwortungsvolle Umgang mit Daten betrifft hauptsächlich die Reduktion der Verwendung von Third-Party-Cookies und die Vorsicht bei den Daten, die Sie speichern und mit Dritten teilen. Traditionell haben Webentwickler Cookies verwendet, um alle möglichen Daten zu speichern, und es war für Angreifer einfach, diese Tendenz auszunutzen. Als Ergebnis haben Browser begonnen, zu begrenzen, was Sie mit Cross-Site-Cookies tun können, mit dem Ziel, den Zugriff auf sie in Zukunft vollständig zu entfernen.

Sie sollten sich auf die Entfernung von Cross-Site-Cookies vorbereiten, indem Sie die Menge an Tracking-Aktivitäten, auf die Sie sich verlassen, begrenzen und/oder die Persistenz der gewünschten Informationen auf andere Weise umsetzen. Weitere Informationen finden Sie unter Übergang von Third-Party-Cookies und Ersatz für Third-Party-Cookies.

Schutz der Benutzeridentität und Verwaltung von Logins

Bei der Implementierung einer sicheren Lösung, die Datenerfassung beinhaltet, insbesondere wenn es sich um sensible Daten wie Anmeldedaten handelt, macht es Sinn, eine seriöse Lösung zu verwenden. Jede respektable serverseitige Framework-Lösung wird über eingebaute Funktionen verfügen, um gegen häufige Schwachstellen zu schützen. Sie könnten auch ein spezialisiertes Produkt für Ihren Zweck einsetzen, zum Beispiel eine Identitätsanbieter-Lösung oder einen sicheren Online-Umfrage-Anbieter.

Wenn Sie Ihre eigene Lösung zur Datenerfassung entwickeln möchten, stellen Sie sicher, dass Sie alle Aspekte und Anforderungen verstanden haben. Stellen Sie einen erfahrenen serverseitigen Entwickler und/oder Sicherheitstechniker ein, um das System zu implementieren, und sorgen Sie dafür, dass es gründlich getestet wird. Verwenden Sie Multi-Faktor-Authentifizierung (MFA) für besseren Schutz. Erwägen Sie die Nutzung einer dedizierten API wie Web Authentication oder Federated Credential Management, um den Client-Teil der App zu vereinfachen.

Hier sind einige weitere Tipps für sichere Logins:

  • Erzwingen Sie beim Sammeln von Benutzeranmeldedaten starke Passwörter, damit die Kontodaten Ihrer Benutzer nicht leicht erraten werden können. Schwache Passwörter sind eine der häufigsten Ursachen für Sicherheitsverletzungen. Außerdem sollten Sie Ihre Benutzer ermutigen, einen Passwortmanager zu verwenden, damit sie komplexere Passwörter verwenden können, sich nicht darum kümmern müssen, sie zu merken, und kein Sicherheitsrisiko eingehen, indem sie sie aufschreiben. Siehe auch unseren Artikel über Unsichere Passwörter.

  • Sie sollten Ihre Benutzer auch über Phishing aufklären. Phishing ist der Vorgang, bei dem eine Nachricht an einen Benutzer gesendet wird (zum Beispiel eine E-Mail oder eine SMS), die einen Link zu einer Site enthält, die aussieht wie eine Site, die sie täglich nutzen, aber nicht ist. Der Link wird von einer Nachricht begleitet, die den Benutzer dazu verleiten soll, seinen Benutzernamen und sein Passwort auf der Site einzugeben, damit sie gestohlen und dann von einem Angreifer für böswillige Zwecke verwendet werden können.

    Hinweis: Einige Phishing-Sites können sehr raffiniert sein und schwer von einer echten Website zu unterscheiden. Daher sollten Sie Ihre Benutzer aufklären, zufälligen Links in E-Mails und SMS-Nachrichten nicht zu vertrauen. Wenn sie eine Nachricht erhalten, die in etwa lautet "Dringend, Sie müssen sich jetzt anmelden, um ein Problem zu lösen", sollten sie die Seite direkt in einem neuen Tab aufrufen und versuchen, sich direkt einzuloggen, anstatt auf den Link in der Nachricht zu klicken. Oder sie könnten Sie anrufen oder Ihnen eine E-Mail senden, um die erhaltene Nachricht zu besprechen.

  • Schützen Sie sich gegen Brute-Force-Angriffe auf Anmeldeseiten mit Rate Limiting, Kontosperrungen nach einer bestimmten Anzahl fehlgeschlagener Versuche und CAPTCHA-Herausforderungen.

  • Verwalten Sie Benutzer-Login-Sitzungen mit eindeutigen Session-IDs und melden Sie Benutzer automatisch ab, nachdem sie eine Zeit lang inaktiv waren.

Keine sensiblen Daten in URL-Query-Strings einschließen

Als allgemeine Regel sollten Sie keine sensiblen Daten in URL-Query-Strings einschließen, denn wenn eine dritte Partei die URL abfängt (zum Beispiel über den Referer HTTP-Header), könnte sie diese Informationen stehlen. Noch schwerwiegender ist die Tatsache, dass diese URLs von öffentlichen Web-Crawlern, HTTP-Proxies und Archivierungstools wie dem Internet Archive indiziert werden können, was bedeutet, dass Ihre sensiblen Daten in öffentlich zugänglichen Ressourcen bestehen bleiben könnten.

Verwenden Sie POST-Anfragen anstelle von GET-Anfragen, um diese Probleme zu vermeiden. Unser Artikel Referer-Header-Richtlinien: Datenschutz- und Sicherheitsbedenken beschreibt die Datenschutz- und Sicherheitsrisiken im Zusammenhang mit dem Referer-Header ausführlicher und bietet Ratschläge zur Minderung dieser Risiken.

Hinweis: Das Vermeiden der Übertragung sensibler Daten in URLs über GET-Anfragen kann auch beim Schutz gegen Cross-Site-Request-Forgery und Replay-Angriffe helfen.

Verwendung von Richtlinien durchsetzen

Erwägen Sie den Einsatz von Webplattform-Funktionen wie Content Security Policy (CSP) und Permissions Policy, um ein Set von Nutzungsregeln für Funktionen und Ressourcen auf Ihrer Website durchzusetzen, das es erschwert, Schwachstellen einzuführen.

CSP ermöglicht es Ihnen, eine Sicherheitsschicht hinzuzufügen, indem Sie zum Beispiel nur erlauben, dass Bilder oder Skripte von bestimmten vertrauenswürdigen Herkünften geladen werden. Dies hilft, bestimmte Arten von Angriffen zu erkennen und zu mindern, einschließlich Cross-Site-Scripting (XSS) und Dateninjektions-Angriffen. Diese Angriffe beinhalten eine Reihe von böswilligen Aktivitäten, einschließlich Datendiebstahl, Webseitenverunstaltung und Verbreitung von Malware.

Die Berechtigungsrichtlinie funktioniert auf ähnliche Weise, ist jedoch mehr darauf ausgerichtet, den Zugang zu bestimmten "mächtigen Funktionen" wie bereits erwähnt zu erlauben oder zu blockieren.

Hinweis: Solche Richtlinien sind sehr nützlich, um Websites sicher zu halten, insbesondere wenn Sie auf Ihrer Site eine Menge Drittanbieter-Code verwenden. Beachten Sie jedoch, dass Sie möglicherweise die Funktion Ihrer Website zerstören, wenn Sie die Nutzung einer Funktion blockieren, auf die ein Drittanbieter-Skript angewiesen ist.

Datenintegrität aufrechterhalten

Fortsetzend aus dem vorherigen Abschnitt, wenn Sie auf Ihrer Site die Nutzung von Funktionen und Ressourcen erlauben, sollten Sie versuchen sicherzustellen, dass Ressourcen nicht manipuliert wurden.

Verwandte Themen:

Subresource Integrity

Subresource Integrity (SRI) ist eine Sicherheitsfunktion, die es Browsern ermöglicht zu überprüfen, ob Ressourcen, die sie abrufen (zum Beispiel von einem CDN), ohne unerwartete Manipulation geliefert werden. Sie funktioniert, indem Sie einen kryptografischen Hash bereitstellen, der mit einer abgerufenen Ressource übereinstimmen muss.

HTTP Access-Control-Allow-Origin

Der Access-Control-Allow-Origin Antwortheader gibt an, ob die Antwort mit anforderndem Code von der gegebenen Herkunft geteilt werden kann.

HTTP X-Content-Type-Options

Der X-Content-Type-Options Antwortheader ist ein Marker, der vom Server verwendet wird, um anzugeben, dass die MIME-Typen, die in den Content-Type Headers beworben werden, nicht geändert werden sollten und eingehalten werden müssen. Dieser Header ist ein Weg, um auf MIME-Typ-Sniffing zu verzichten, oder mit anderen Worten, um anzugeben, dass die MIME-Typen bewusst konfiguriert sind.

Formulareingaben bereinigen

Als allgemeine Regel gilt: Vertrauen Sie nicht auf die Eingaben, die Benutzer in Formulare machen. Das Ausfüllen von Formularen online ist kompliziert und mühsam, und es ist leicht für Benutzer, falsche Daten oder Daten im falschen Format einzugeben. Darüber hinaus sind böswillige Personen im Umgang mit der Eingabe bestimmter ausführbarer Codesequenzen in Formularexperten (zum Beispiel SQL oder JavaScript). Wenn Sie beim Umgang mit solchen Eingaben nicht vorsichtig sind, könnten sie entweder schädlichen Code auf Ihrer Website ausführen oder Ihre Datenbanken löschen. Siehe SQL-Injektion für ein gutes Beispiel, wie dies geschehen könnte.

Um sich dagegen zu schützen, sollten Sie die in Ihre Formulare eingegebenen Daten gründlich bereinigen:

  • Implementieren Sie eine Client-seitige Validierung, um Benutzer darauf hinzuweisen, wenn sie Daten im falschen Format eingegeben haben. Sie können dies mit eingebauten HTML-Formularvalidierungsfunktionen tun oder Ihren eigenen Validierungscode schreiben. Weitere Informationen finden Sie unter Client-seitige Formularvalidierung.
  • Sie sollten eine Ausgabe-Codierung verwenden, wenn Sie Benutzereingaben in einer Anwendungs-UI anzeigen, um Daten sicher genau so anzuzeigen, wie ein Benutzer sie eingegeben hat, und zu vermeiden, dass sie als Code ausgeführt werden. Weitere Informationen finden Sie unter Ausgabe-Codierung.

Sie können sich nicht allein auf Client-seitige Validierung für die Sicherheit verlassen — sie sollte mit einer Server-seitigen Validierung kombiniert werden. Die Client-seitige Validierung verbessert die Benutzererfahrung, indem sie sofortiges Validierungsfeedback bietet, ohne auf eine Rückmeldung vom Server warten zu müssen. Client-seitige Validierung ist jedoch für böswillige Parteien leicht zu umgehen (zum Beispiel durch das Ausschalten von JavaScript im Browser, um JavaScript-basierte Validierung zu umgehen).

Jede seriöse Server-seitige Framework-Lösung wird Funktionalitäten zur Validierung von Formulareinsendungen bieten. Zudem ist es eine bewährte Praxis, alle Sonderzeichen, die Teil einer ausführbaren Syntax sind, zu maskieren, damit eingegebener Code nicht mehr ausführbar ist und als Klartext behandelt wird.

Schutz gegen Clickjacking

Bei einem Clickjacking Angriff wird ein Benutzer dazu verleitet, auf ein UI-Element zu klicken, das eine andere Aktion ausführt als die, die der Benutzer erwartet, oft mit dem Ergebnis, dass vertrauliche Informationen des Benutzers an einen bösartigen Dritten weitergegeben werden. Dieses Risiko ist inhärent in eingebetteten Inhalten von Drittparteien, also stellen Sie sicher, dass Sie dem, was in Ihre Site eingebettet wird, vertrauen. Beachten Sie auch, dass Clickjacking mit Phishing-Techniken kombiniert werden kann. Sie können die Informationen zum Thema Phishing im vorherigen Abschnitt Schutz der Benutzeridentität und Verwaltung von Logins nachlesen.

Die folgenden Funktionen können helfen, sich gegen Clickjacking zu schützen:

HTTP X-Frame-Options

Der X-Frame-Options HTTP Antwortheader kann verwendet werden, um anzugeben, ob ein Browser erlaubt sein soll, eine Seite in einem <frame>, <iframe>, <embed> oder <object> zu rendern. Sites können dies verwenden, um Clickjacking-Angriffe zu vermeiden, indem sie sicherstellen, dass ihr Inhalt nicht in andere Seiten eingebettet wird.

CSP: frame-ancestors

Die HTTP Content-Security-Policy (CSP) frame-ancestors Direktive spezifiziert gültige Eltern, die eine Seite mit <frame>, <iframe>, <object>, oder <embed> einbetten dürfen.

Praktische Anleitungen zur Sicherheitsimplementierung

Um umfassende Anweisungen zur effektiven Implementierung von Sicherheitsfunktionen auf Websites zu erhalten und sicherzustellen, dass Sie den besten Praktiken folgen, sehen Sie sich unser Set von Praktischen Anleitungen zur Sicherheitsimplementierung an.

Einige dieser Leitfäden stehen in direktem Zusammenhang mit dem HTTP Observatory Tool. Observatory führt Sicherheitsüberprüfungen auf einer Website durch und liefert eine Bewertung und Punktzahl zusammen mit Empfehlungen zur Behebung der gefundenen Sicherheitsprobleme. Diese Leitfäden erklären, wie man Probleme löst, die bei den MDN Observatory-Tests gefunden wurden: Das Tool verlinkt zu den relevanten Leitfäden für jedes Problem, um Sie auf einen effektiven Lösungsweg zu führen. Interessanterweise verwenden Mozillas interne Entwicklerteams diese Anleitungen bei der Implementierung von Websites, um sicherzustellen, dass die besten Sicherheitspraktiken angewendet werden.

Siehe auch