2013-07-29 39 views
15

tôi hiển thị chuỗi trong JSP của tôi theo cách này:thoát tất cả các chuỗi trong JSP/Spring MVC

${someString} 

chuỗi này có thể, tất nhiên, chứa các ký tự html đặc biệt. Hiện tại, bạn có thể chèn HTML mã độc hại (ví dụ: nếu someString là một javascript bao gồm - <script src...>).

Làm cách nào để đảm bảo rằng tất cả các chuỗi được thoát trước khi in?

Tôi đang sử dụng Spring MVC và JSP.

+0

Are u muốn thực hiện thẻ hoặc xóa thẻ? – newuser

+0

Có thể trùng lặp: http: //stackoverflow.com/questions/4948532/where-should-i-escape-html-strings-jsp-page-or-servlets –

+0

@newuser Tôi muốn thoát khỏi nó, vì vậy người dùng nhìn thấy '< script' dưới dạng văn bản trong trang. –

Trả lời

22

Bạn có thể sử dụng JSTL core:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 

Sử dụng <c:out value="${someString}"/> tag để hiển thị Strings. <c:out> thoát các ký tự HTML để bạn có thể tránh việc tạo mã cross-site, bạn có thể chỉ định bằng cách đặt thuộc tính escapeXml=true. Một lợi thế khác là bạn cũng có thể cung cấp giá trị mặc định trong trường hợp value đánh giá là null.

Bạn cũng có thể sử dụng chức năng fn:escapeXml() EL. Bạn cần phải bao gồm JSTL functions cho điều đó.

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> 

Một cách khác có thể, sẽ xây dựng một tùy chỉnh ELResolver.

Bật tùy chỉnh hành vi phân giải thuộc tính và biến đối với đánh giá biểu thức EL.

This blog cung cấp ví dụ làm việc về cách thực hiện.


Đối với toàn bộ ứng dụng Spring MVC, bạn có thể chỉ định thoát trong web.xml:

<context-param> 
    <param-name>defaultHtmlEscape</param-name> 
    <param-value>true</param-value> 
</context-param> 

Nhưng sau đó thoát chỉ áp dụng cho spring thẻ, như:

<form:input path="formField" htmlEscape="true" /> 

Cuối cùng, bạn có thể thử thư viện của bên thứ ba XSSFilter.

+1

điều này là tốt, nhưng tôi phải quét tất cả các kết quả đầu ra trong các JSP của tôi. Hơn nữa một người mới có thể không biết rằng đây là cách thích hợp.Bất kỳ giải pháp tự động/toàn cầu nào? –

+0

@JoshuaMN Đã cập nhật câu trả lời! – NINCOMPOOP

+0

Tôi đã cố gắng đặt 'htmlEscape =" true "' trên biểu mẫu của tôi nhưng nó không thoát khỏi thẻ script, bất kỳ ý tưởng nào tại sao? –

0

Bạn cũng có thể kiểm soát hành vi này ở cấp độ trang sử dụng <spring:htmlEscape defaultHtmlEscape="true" />

+0

Xem câu trả lời của NINCOMPOOP. "Nhưng sau đó thoát chỉ áp dụng cho các thẻ mùa xuân." – Alex78191

+0

Nó không hoạt động với cú pháp SpEL '$ {variable}'. – Alex78191

0

Trong JSP/Java Bạn nên sử dụng mã này:

Trong JSP/HTML:

<c:out value="TR tag </tr> Script Tag <script>alert("hello Rahul")</script>" escapeXml="true" /> 
+0

Tùy chỉnh ELResolver là giải pháp tốt nhất! – Alex78191

Các vấn đề liên quan