2009-10-07 13 views

Respuesta

8

Realmente no importa cómo, pero por lo general Base64 debería funcionar bien.

Una nota de advertencia:

esto suena como usted desea almacenar los ajustes arbitrarios en una cookie. En general, esto no es una buena idea, ya que las cookies (como todas las entradas del cliente) no son de confianza. Considere almacenar el lado del servidor de datos bajo algún identificador generado (¡aleatorio!) Y ponerlo en la cookie. De esta forma, las personas no pueden eludir las restricciones de acceso ni inyectar datos arbitrarios en su sistema a través de cookies manipuladas.

Si no puede utilizar este enfoque, trate los valores de las cookies como entradas no confiables y verifíquelas como de costumbre.

Editar:

base 64 no es adecuada, ya que utiliza "=", que las cookies de Java no son compatibles. Más bien utilice

java.net.URLEncoder.encode 

que solo utiliza caracteres apropiados para las cookies.

+1

Una nota nota de advertencia: Es posible cifrar el contenido de las cookies si desea evitar que la gente de manipular ellos pero no quieren almacenarlos en el servidor. – sfussenegger

+1

No está realmente relacionado con la pregunta, pero el cifrado de una cookie no puede evitar que el cliente los manipule. El cifrado solo ocultará al cliente lo que contiene realmente la cookie. Si requiere que el cliente no pueda manipular el contenido de una cookie, deberá _significarlo y verificar que el contenido coincida con la firma del servidor cuando se recibe una cookie de un cliente. – jarnbjo

+1

@jambjo: Bueno, si el cliente manipula el contenido de una cookie cifrada, se descifrará en basura aleatoria (al menos con cualquier algoritmo de encriptación decente). Entonces, si bien es cierto que el cliente puede manipular técnicamente la cookie, es poco probable que realmente pueda lograr más de un DOS (aún un punto a considerar). – sleske

5

Utilice la versión hexadecimal o URL segura de Base64 para codificarla si tiene caracteres inseguros. Regular Base64 no se puede usar como valores de cookies. Older Tomcat solía permitir caracteres ilegales en él como "=" pero las versiones más nuevas comienzan a hacer cumplir las reglas de cookies ahora.

-3

mi php función de valor de la cookie de codificación:

<? 
function encode_cookie_value($value) 
     {return strtr($value, 
         array_combine(str_split($tmp=",; \t\r\n\013\014"), 
            array_map('rawurlencode', str_split($tmp)) 
            ) 
        ); 
     } 
setrawcookie('kk', encode_cookie_value('jk=jk?jk-/":jk;jk jk,jk')); 
?> 
+0

no es realmente válido para una pregunta de Java, ¿verdad? – eis

+0

@eis, la expresión regular es la clave – diyism

-2

lo que tengo entendido que necesita algo como esto String name = "Женя"; la galleta = nueva cookie ("nombre", nueva cadena (name.getBytes ("cp1251"), "utf8")); response.addCookie (cookie);

+2

Esto simplemente dañará los datos. – McDowell

1

Terminé usando la codificación Base64 sin el relleno. Esto significa que se omiten los signos iguales al final, por lo que el problema se resuelve.

Para crear un codificador de base 64 sin acolchado java.util.Base64.getEncoder().withoutPadding()

Para crear una base 64 decodificador sin acolchado java.util.Base64.getDecoder()