2008-10-27 5 views
6

Ich habe einen Rich-Text-Editor auf meiner Website, die ich versuche, gegen XSS-Angriffe zu schützen. Ich denke, ich habe so ziemlich alles gehandhabt, aber ich bin mir immer noch nicht sicher, was ich mit Bildern anfangen soll. Im Moment bin ich mit dem folgenden regex Bild-URLs zu überprüfen, die ich gehe davon wird Inline-Block javascript XSS-Angriffe:Cross-Site-Skripting von einem Bild

"https?://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+" 

Was ich bin mir nicht sicher ist, wie offen das lässt mich XSS-Angriffe aus das entfernte Bild. Ist die Verknüpfung mit einem externen Image eine ernsthafte Sicherheitsbedrohung?

Das einzige, was ich denken kann, ist, dass die eingegebene URL auf eine Ressource verweist, die "text/javascript" als MIME-Typ anstelle von irgendeiner Art von Bild zurückgibt, und dass Javascript ausgeführt wird.

Ist das möglich? Gibt es eine andere Sicherheitsbedrohung, die ich in Betracht ziehen sollte?

+2

ich empfehle auch den ha.ckers.org Spickzettel: ha.ckers.org/xss.html –

Antwort

4

Eine weitere Sache, um die Sie sich sorgen müssen, ist, dass Sie PHP-Code einfach in ein Bild einbetten und die meiste Zeit hochladen können. Das einzige, was ein Angriff dann tun müssen würde, ist einen Weg zu finden, das Bild aufzunehmen. (Nur der PHP-Code wird ausgeführt, der Rest wird nur wiederholt). Überprüfen Sie, ob der MIME-Typ Ihnen dabei hilft, da der Angreifer einfach ein Bild mit den korrekten ersten paar Bytes hochladen kann, gefolgt von beliebigem PHP-Code. (Das Gleiche gilt für HTML- und Javascript-Code).

+0

ich bin nicht im Stich gelassen Benutzer Bilder hochladen. Nutzer dürfen nur aus Gründen wie dem, was Sie genannt haben, auf andere Websites verweisen. –

+0

Würde dies nicht durch einen einfachen Dateinamenfilter verhindert? – AaronSieb

+0

@AaronSieb, nein, weil Sie beispielsweise PHP-Code in eine GIF-Palette einbetten und ein perfekt gültiges GIF-Bild mit dem richtigen Dateityp und Mime-Typ hochladen können. Problem ist, solange ich die Website manipulieren kann, um include ("my_uploaded_gif.gif") zu machen, bist du in Schwierigkeiten. Auch die Uhr die% 00 Sache. –

1

In diesem Fall, schauen Sie sich den Kontext um: liefern Benutzer nur eine URL? In diesem Fall ist es in Ordnung, die URL-Semantik und den MIME-Typ zu validieren. Wenn der Benutzer auch Tags einer Art eingeben kann, müssen Sie sicherstellen, dass sie nicht manipulierbar sind, um etwas anderes als Bilder anzuzeigen.

2

Wenn sich der End-Viewer in einem kennwortgeschützten Bereich befindet und Ihre App URLs enthält, die Aktionen basierend auf GET-Anforderungen initiieren, können Sie im Auftrag des Benutzers eine Anfrage stellen.

Beispiele:

  • src = "http://yoursite.com/deleteuser.xxx?userid=1234"
  • src = "http://yoursite.com/user/delete/1234 "
  • src =" http://yoursite.com/dosomethingdangerous“
+0

Wäre ich wirklich dafür anfällig? My Regex erlaubt nur http/https am Anfang der URL, also sollte Javascript (oder irgendeine Kodierung davon) nicht durchkommen, oder liege ich falsch? –

+0

Hoppla, vergaß die "https"?: // '. Ich werde meine Antwort bearbeiten. –

+0

Von REST schreiben wir nie etwas mit GET ... – inf3rno