2011-07-29 25 views
7

Servlet API proporciona una manera conveniente de establecer cookies:¿Debo escapar los valores de las cookies cuando configuro desde la API de servlet?

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

JavaDoc le dice:

con la versión 0 cookies, los valores no deben contener espacios en blanco, corchetes, paréntesis, signos de igualdad, comas, comillas dobles, barras inclinadas, signos de interrogación, en signos, dos puntos y punto y coma. Los valores vacíos no pueden comportarse de la misma manera en todos los navegadores.

Sin embargo, no dice qué sucede si estos caracteres están presentes en el valor.

Si el valor proviene de una fuente que no es de confianza, ¿puedo usar la API para establecer el valor de manera segura sin preprocesamiento adicional o abro la puerta para algún tipo de inyección?

+0

Obtendrá una excepción de objeto ilegal si están presentes – Edd

Respuesta

6

Si el valor proviene de la fuente no confiable, ¿puedo usar la API para establecer el valor sin pre-procesamiento adicional de forma segura?

No, no es posible. La API no se ocupa de esto por ti. De lo contrario, esto se especificará explícitamente en el Javadoc. La API puede no saber de antemano si está utilizando las cookies de la versión 0 (Netscape) o la versión 1 (RFC2965).

Lo mejor sería simplemente codificar en URL el nombre/valor de la cookie de antemano para que pueda asegurarse de que termina con un nombre/valor de cookie seguro.

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

Alternativamente, también podría usar regex para quitar todos los caracteres ilegales de antemano. Solo se permiten caracteres alfabéticos, dígitos, guiones, guiones bajos, puntos, tildes y, probablemente, algunos más (¡depende del navegador!). Todos los demás deben ser eliminados.

Cuestiones relacionadas