2016-07-29 22 views
-1

Meine Anwendung ist eine Spring MVC-Anwendung, verwendet keine Anmerkungen (es ist eine ziemlich alte Anwendung, obwohl es Feder 3.1.1 verwendet).HTML-Codierung der Anfrage-Parameter

Ich habe eine JSP-Seite, die über ein Tool wie Curl oder direkt von der URL des Webbrowsers aufgerufen werden kann. Die URL akzeptiert einen Anforderungsparameter Standort genannt

http://localhost:8080/testdomain/registeruser.do?mylocation=fr 

auf der oben genannten URL aufgerufen wird, nenne ich eine Implementierung von SimpleFormController, der die Anforderung Parameter „mylocation“

liest Wie HTML ich die Anfrageparameter „mylocation“ kodieren . Bevor ich den Parameter aus der Anfrage [request.getParameter ("mylocation")] in meinem Controller lese, wäre es ausreichend, wenn ich HtmlUtils.htmlEscape (request.getParameter ("mylocation")) anrufe

Bitte beachten Sie, dass es kein Formular gibt Wenn ich den Input-Parameter für mylocation unterstütze, könnte ich das wie oben erwähnt von einem Kommandozeilen-Tool oder einer Browser-URL aus aufrufen.

+0

Warum möchten Sie etwas kodieren? Erhalten Sie korrekte Werte für Mylocation-Parameter? In der Regel müssen Sie nichts flüchten/nicht entzippen, wenn dies nur ein alphanumerischer Wert ist. – Damian

+0

Es könnte eine Bedrohung von XSS geben, man kann Skripte mit böswilliger Absicht weitergeben. Ich bin zu verstehen, HTML-Codierung wird Skript spezielle Zeichen in seine codierte Form konvertieren. – megan

+0

Was machst du mit diesem Parameter? Wenn Sie die Daten innerhalb einer js-Variable ausgeben, reicht HTML Escaping nicht aus. Wenn Sie jedoch nur einen einzigen nicht vertrauenswürdigen Parameter haben, können Sie dies auf einfachere Weise überprüfen. Überprüfen Sie beispielsweise, ob der Wert von myLocation in einem Enum-Typ vor dem Generieren der Ausgabe vorhanden ist: MyAllowedLocations.valueOf (myLocation); –

Antwort

0

Es gibt zwei verschiedene Dinge:

1) URL-Codierung/Decodierung - es ist nur an den Server GET Parameter übergeben zu lassen ist. Die Codierung ist erforderlich, da der Server einige Sonderzeichen "?" , "&" in Abfragezeichenfolge. Es wird normalerweise von Webserver wie Tomcat behandelt.

2) Und um XSS zu verhindern, können Sie Jsoup verwenden. Es wird nur benötigt, wenn Sie den Wert von Parameter auf der Webseite darstellen.

Einige Frameworks wie JSF können XSS automatisch verhindern. Sie können HTML umgehen, wenn es auf der Webseite angezeigt wird.

+0

Ist die URL-Codierung identisch mit der HTML-Codierung? Zweitens stimme ich nicht zu, dass XSS nur erforderlich ist, wenn der Wert des Parameters auf der Webseite angezeigt wird. Es kann Szenarien geben, z. B. die Verwendung eines iframe oder innerHTML, die mit dem Anforderungsparameter verknüpft werden und XSS-Angriffe verursachen können. Danke für den Hinweis auf JSoup, ich werde weiter darauf eingehen. – megan

+0

Nein, um XSS zu verhindern, benötigen Sie nur HTML-Codierung. Skripts werden nicht in der Adressleiste des Browsers ausgeführt. Sie müssen daher keine URL codieren/dekodieren, um XSS zu verhindern. – Damian

+0

Warum kann ich das Skript-Tag (Java-Script-Tag) nicht als Anforderungsparameter von der Browser-URL übergeben oder einen Curl-Befehl sagen ?. Was ist, wenn dieses Skript nicht codiert ist und intern innerhalb des Codes ausgeführt werden kann? Es muss nicht auf der Seite gerendert werden, die ausgeführt werden soll. Siehe auch diesen Link, es hat einige interessante Beispiele, https://developer.salesforce.com/page/Secure_Coding_Cross_Site_Scripting#Sample_vulnerability – megan