Wie schütze ich mich gegen XSS-Angriffe in Attributen wie src?

9

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.

    
user1652427 07.03.2013, 20:54
quelle

3 Antworten

5

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:

  • Fehler beim Einschränken und Validieren der Eingabe
  • Ausgabe kann nicht codiert werden.
  • Vertrauenswürdige Daten, die von einer gemeinsam genutzten Datenbank abgerufen werden.

Richtlinien

Die zwei wichtigsten Gegenmaßnahmen zur Verhinderung von Cross-Site-Scripting-Angriffen sind:

  • Eingabe einschränken.
  • Ausgabe codieren.

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

How to: Cross-Site-Skripting in ASP.NET verhindern

    
Abdur Rahman 18.03.2013, 10:43
quelle
0

Etwas wie "muss gültig sein Uri entweder relativ oder absolut mit http / https Schema" ist ein guter Ausgangspunkt.

    
Alexei Levenkov 07.03.2013 21:01
quelle
0

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.

    
Freedom_Ben 12.03.2013 19:27
quelle

Tags und Links