2011-07-29 21 views
7

Servlet API cung cấp một cách thuận tiện để thiết lập cookie:Tôi có cần phải thoát khỏi các giá trị cookie khi cài đặt từ API servlet không?

response.addCookie(new Cookie(name, value)) 

javadoc nói:

Với Version 0 cookies, các giá trị không được chứa khoảng trắng, dấu ngoặc, dấu ngoặc đơn, dấu bằng, dấu phẩy, dấu ngoặc kép, dấu gạch chéo, dấu hỏi, tại dấu, dấu hai chấm và dấu chấm phẩy. Giá trị trống có thể không hoạt động theo cùng một cách trên tất cả các trình duyệt.

Tuy nhiên, nó không cho biết điều gì sẽ xảy ra nếu các ký tự này có giá trị.

Nếu giá trị đến từ nguồn không đáng tin cậy, tôi có thể sử dụng API để đặt giá trị an toàn mà không cần xử lý trước hoặc tôi có mở cửa cho một số loại tiêm không?

+0

Bạn sẽ nhận được một ngoại lệArgumentException nếu chúng có mặt – Edd

Trả lời

6

Nếu giá trị đến từ nguồn không đáng tin cậy, tôi có thể sử dụng API để đặt giá trị an toàn mà không cần xử lý trước không?

Không, bạn có thể không. API không quan tâm đến điều này cho bạn. Điều này nếu không sẽ được xác định rõ ràng trong Javadoc. API có thể không biết trước nếu bạn đang sử dụng cookie 0 (Netscape) hoặc phiên bản 1 (RFC2965).

Tốt nhất là chỉ cần mã hóa URL tên/giá trị cookie trước để bạn có thể đảm bảo rằng bạn kết thúc bằng tên/giá trị cookie an toàn.

String safeCookieName = URLEncoder.encode(name, "UTF-8"); 
String safeCookieValue = URLEncoder.encode(value, "UTF-8"); 
response.addCookie(new Cookie(safeCookieName, safeCookieValue)); 
// ... 

Ngoài ra, bạn cũng có thể sử dụng regex để loại bỏ tất cả ký tự không hợp lệ trước đó. Chỉ cho phép các ký tự chữ cái, chữ số, dấu gạch nối, dấu gạch dưới, dấu chấm, dấu ngã và có thể thêm một vài ký tự khác (phụ thuộc vào trình duyệt!). Tất cả những người khác cần phải được tước bỏ.

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