c:aus verschachtelten innen-element-Attribut
Brütet ein c:out JSTL-Tags in einem element-Attribut eine gute Praxis oder wird mithilfe der var-Attribut von c:aus in der Regel bevorzugt? Es scheint zu funktionieren, aber ich vermute, nesting, es funktioniert möglicherweise nicht in einigen application Servern oder Versionen von JSP (und es sieht einfach falsch).
Zum Beispiel ein input-element, das seinen Wert wiederhergestellt Validierung scheitern, und mit Sonderzeichen mit Escape:
<input type="text" name="firstname" value="<c:out value="${param.firstname}"/>"/>
versus:
<c:out value="${param.firstname}" var="firstname"/>
<input type="text" name="firstname" value="${firstname}"/>
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die gängige Praxis, um zu verhindern, XSS-Angriffe im HTML-element Attribute, ohne die Wohlgeformtheit der XML-syntax durch eine verschachtelte
<c:out>
tag mitfn:escapeXml()
- Funktion statt:<c:out value="${bean.foo}" />
ist für einige Entwickler lesbarer als${fn:escapeXml(bean.foo)}
. Alternativ können Sie auch voran zu gehen mit einem MVC-framework wie JSF, so dass Sie nie brauchen, um über diese (und alle anderen wiederholt boilerplate in servlets).Normalerweise verwende ich die
${}
überall, wo ich kann. Es ist einfacher und lesbarer zu gestalten. Ich benutze<c:out>
wenn ich die zusätzliche Funktionalität, wie dieescapeXml
Funktion.In Ihrem Beispiel, Sie bekommen konnte Weg mit keine
<c:out>
:Edit: XSS-Problemen
Meine Antwort wird nicht auf die XSS-Löcher, die BalusC und StuartWakefield erwähnen. Obwohl meine Antwort ist vordergründig richtig, man sollte wirklich immer mildern XSS-Löcher. Ich benutze lieber die OWASP-taglib.
"/><script>/*xss here*/</script><img src="lolcatz.jpg"
... Einige andere Sicherheitsmaßnahme kann die Aufnahme von diesem Fall, bevor wir uns auf den input, sondern es ist denkbar, diese zu umgehen. In jedem Fall mit der code über fehlerhafte doppelten Anführungszeichen in der " firstname "break out" von dem HTML-Attribut. Sie entweichen sollte es für den Kontext sind Sie es Ausgabe, d.h. eine FunktionescapeHtmlAttribute
ideal wäre${fn:escapeXml(person.firstname)}
ist ausreichend.