2011-02-09 12 views
16

Byłbym wdzięczny za dostarczenie zestawu jasnych wytycznych lub decyzji dotyczących obsługi uciekających łańcuchów. Tym, czego używam do tworzenia łańcuchów znaków, jest biblioteka apache commons-lang-x.x.jar. W szczególności metoda StringEscapeUtils.escapeHtml(String toEscape).Gdzie powinienem uciec z ciągów HTML, strony JSP lub serwletów?

muszę wiedzieć:

(1) Gdzie jest to lepiej uciec ciągi, na stronie JSP lub w Servlet?

(2) Co polecacie StringEscapeUtils.escapeHtml (..) lub < c: out > z JSTL

(3) Obsługa multilinii struny, która jest lepsza, użyj <br> bezpośrednio w struny,

String strError = "Invalid username.\nPlease try again.";

lub

String strError = "Invalid username.<br>Please try again.";

012: a nl2br() metoda lub \ n i

(4) Jak pójdę ucieczki ciągi, które otrzymują dzikie karty, przykład:

String strError = "Invalid user [%s].<br>Please specify another user."

(5) Ponieważ javascript Znaki ewakuacyjne są różne. Co powinienem użyć, aby uciec ciągi Java, które mają być renderowane wewnątrz sekcji javascript strony JSP (np. var name = "<%=javaStringHoldingName%>").

Odpowiedz

15

Trzeba tylko uciec z niego dokładnie tam, gdzie może zaszkodzić. W tym konkretnym przypadku jest to w widoku. Kontrolowany przez użytkownika kod HTML może zaszkodzić, gdy zostanie włączony do całego kodu HTML w widoku. To jest źródło dla XSS.

W dobrze zaprojektowanej strony JSP (czytaj: niescriptlets), JSTL oferuje funkcję <c:out> tag i fn:escapeXml() ucieczki HTML/XML.

<c:out value="${param.foo}" /> 
<input type="text" name="foo" value="${fn:escapeXml(param.foo)}" /> 
+0

Co z przypadkami, w których mam ciąg szablonu typu "Nieprawidłowy zakres [% s].
Powinien zawierać tylko alfanumeryczny . ". Powiedzmy, że wartość to "1 .. <5". W jaki sposób ucieknie się przed tym? Należy pamiętać, że ciąg szablonu zawiera znak
, ponieważ ma być wyświetlany w dwóch wierszach. –

+0

W podstawowej usłudze JSP zwykle używa się JSTL ''. Lub gdy korzystasz z (MVC) na podstawie JSP, takich jak Spring, JSF, itp., Mają one wszystkie własne tagi formatu wiadomości. Zobacz także to pokrewne pytanie, które odpowiedziałem przypadkowo: http://stackoverflow.com/questions/4961558/best-practice-for-translations – BalusC

+0

tak, żebyś wiedział, działa również przy użyciu 'StringEscapeUtils.escapeHtml (" lala ") ; 'wydrukowane w jsp. – Vince

2

Dla dwóch pytania:

1) Ucieczka ciągi dla celów wyświetlania - uważam to widok z problemem. Twoja strona JSP mogłaby sobie z tym poradzić, jeśli używasz strony JSP jako widoku.

3) Komunikaty o błędach z modelu/warstwy logiki biznesowej nie powinny zawierać formatowania, takiego jak znaki nowej linii. Pozwól swojemu widokowi określić sposób formatowania komunikatów o błędach. W przypadku HTML użycie znacznika div o odpowiedniej szerokości może na przykład wyeliminować konieczność stosowania tagów br.

+0

Czy możesz edytować swoją odpowiedź, aby podać przykład trzeciego punktu? Nawiasem mówiąc, gdzie jest drugi punkt :) Przeczytaj przykład w sekcji komentarzy pierwszej odpowiedzi w odpowiedzi na BalusC –

2

to pewnie nie przejdzie obiekt String, ale zamiast po prostu przekazać obiekt błędu do widzenia i niech JSP zrobić co chce

w kontrolerze:

errorObj.name = "invalid login"; 
errorObj.description = "try again"; 

W widoku:

<c:out value="${errorObj.name}" /><br /><c:out value="${errorObj.description}" /> 

Naprawdę niezwiązane z twoim pytaniem, ale jest również dobre przećwicz użycie komunikatu "nieważna próba zalogowania się", niezależnie od tego, na czym polega błąd logowania.Podawana wiadomość "Niepoprawna nazwa użytkownika" pozwala komuś, kto chce włamać się na twoje konta, wiedzieć, czy ma dobrą nazwę użytkownika, za pomocą której może następnie zaatakować hasło. Jeśli zostanie to ujawnione publicznie, może to być mały, ale bardzo realny problem.

Powiązane problemy