Also habe ich einen C # html-Desinfektor mit HTML Agility mit einer weißen Liste erstellt. Es funktioniert gut, außer für Fälle wie diese:
%Vor%Ich möchte das src-Attribut erlauben, nur nicht bösartiges Zeug in ihm offensichtlich. All die Sachen, die ich nachgeschlagen habe, hat gerade eine Whitelist für Tags und ihre Attribute empfohlen. Wie würdest du mit so etwas umgehen? Ich weiß, dass dies in keinem neueren Browser funktionieren wird, aber ich bin mit der Sicherheit nicht sehr vertraut und ich bin mir sicher, dass es noch andere schlaue Dinge gibt, die Angreifer tun könnten.
Bei Cross-Site-Scripting-Angriffen (XSS) werden Schwachstellen in der Webseitenvalidierung ausgenutzt, indem clientseitiger Skriptcode eingefügt wird. Zu den häufigen Sicherheitsrisiken, die Ihre Webanwendungen anfällig für Cross-Site-Scripting-Angriffe machen, gehören die fehlerhafte Überprüfung der Eingabe, die fehlende Codierung der Ausgabe und das Vertrauen in die aus einer gemeinsam genutzten Datenbank abgerufenen Daten. Um Ihre Anwendung vor Cross-Site-Scripting-Angriffen zu schützen, gehen Sie davon aus, dass alle Eingaben bösartig sind. Beschränkt und validiert alle Eingaben. Kodieren Sie alle Ausgaben, die möglicherweise HTML-Zeichen enthalten könnten. Dies beinhaltet auch das Lesen von Daten aus Dateien und Datenbanken.
Eines der gravierendsten Beispiele für einen Cross-Site-Scripting-Angriff tritt auf, wenn ein Angreifer ein Skript zum Abrufen des Authentifizierungscookies schreibt, das den Zugriff auf eine vertrauenswürdige Site ermöglicht, und das Cookie anschließend an eine dem Angreifer bekannte Webadresse sendet. Dadurch kann der Angreifer die Identität des legitimen Benutzers fälschen und unerlaubten Zugriff auf die Website erhalten.
Häufige Sicherheitsrisiken, die Ihre Webanwendung für Cross-Site-Scripting-Angriffe anfällig machen, sind:
Richtlinien
Die zwei wichtigsten Gegenmaßnahmen zur Verhinderung von Cross-Site-Scripting-Angriffen sind:
Zusammenfassung der Schritte
Führen Sie die folgenden Schritte aus, um Cross-Site-Skripting zu verhindern:
Schritt 1. Überprüfen Sie, ob die Validierung von ASP.NET-Anfragen aktiviert ist.
Schritt 2. Überprüfen Sie den ASP.NET-Code, der HTML-Ausgabe generiert.
Schritt 3. Bestimmen Sie, ob die HTML-Ausgabe Eingabeparameter enthält.
Schritt 4 . Überprüfen Sie möglicherweise gefährliche HTML-Tags und Attribute.
Schritt 5 . Bewerten Sie Gegenmaßnahmen.
Einzelheiten finden Sie in der 2. Referenz.
Referenzen:
Cross-Site-Scripting erklärt : So verhindern Sie XSS-Angriffe
Etwas wie "muss gültig sein Uri entweder relativ oder absolut mit http / https Schema" ist ein guter Ausgangspunkt.
Sie können das src-Attribut sicher zulassen, vorausgesetzt, dass Sie die Eingabe ordnungsgemäß bereinigen und verarbeiten. Um dies zu tun, sollten Sie es zunächst über eine Whitelist mit gültigen URL-Zeichen, canonicalize, bereinigen es , und überprüfen Sie dann, dass es auf ein gültiges Bild zeigt.
Die von Ihnen erwähnte Whitelist ist der erste Schritt (und ein wichtiger Schritt dazu). Um die Whitelist zu implementieren, entfernen Sie einfach alle Zeichen, die für eine URL nicht gültig sind. Stellen Sie außerdem sicher, dass die URL ordnungsgemäß erstellt wurde. Dies bedeutet, dass sie auf eine gültige Ressource verweist, auf die der Benutzer zugreifen können soll. Zum Beispiel sollte der Benutzer nicht auf eine lokale Datei auf dem Server zugreifen, indem er file://sensitive.txt
oder etwas übergibt. Wenn http oder https die einzigen Protokolle sind, die verwendet werden sollten, prüfen Sie, ob die URL mit diesen beginnt. Wenn Sie extra paranoid sind, können Sie die Anfrage komplett ablehnen, da es offensichtlich ist, dass sie manipuliert wurde. Whitelisting ist wichtig, aber Whitelisting alleine wird jedoch nicht die Funktion sicher halten.
Die Kanonisierung ist wichtig, da viele Angriffe von der Übermittlung von URLs abhängig sind, die Sie letztendlich an einen bestimmten Ort bringen. Sie können jedoch den angeborenen Denkmangel des Computers ausnutzen, um Dinge zu erreichen, die er nicht tun sollte. Dies wird auch dazu beitragen, doppelte Pfade zu derselben Ressource zu eliminieren, was die Leistung verbessern kann (oder zumindest die Leistung verbessern kann, indem eine bekannte Datei, die seit der letzten Überprüfung nicht geändert wurde, nicht erneut geprüft wird Es ist möglich, ein Datum der letzten Änderung zu fälschen, so dass ein Angreifer eine schädliche Datei austauschen kann, nachdem Sie sie bereits "überprüft und darauf vertraut" haben.
Um zu überprüfen, ob Sie auf ein gültiges Bild zeigen, öffnen Sie die Datei und lesen Sie die ersten paar Bytes ein. Vertrauen Sie nicht einfach der Dateierweiterung an, überprüfen Sie sie jedoch zuerst, bevor Sie die Datei öffnen (für Leistung und Sicherheit). Jedes Bildformat hat ein bestimmtes Muster von Bytes, die Sie überprüfen können. Ein guter Blick zuerst ist JPEG . Es kann immer noch für einen böswilligen Benutzer möglich sein, Shellcode oder anderen Angriffscode in eine Bilddatei zu schreiben, die enthält die richtigen Header, aber es ist viel schwieriger zu tun. Dies wird zu einem Leistungsengpass, also planen Sie entsprechend, wenn Sie dies implementieren.
Tags und Links c# security xss html-agility-pack