2009-10-07 7 views
6

Java 쿠키 개체의 실제 값을 어떻게 인코딩해야합니까? 나는 US-ASCII 밖에있는 '='또는 어떤 문자와도 같이 할 수 없습니다.인코딩 java 쿠키 값

/브롬 joynes

답변

8

그것은하지 않습니다 정말 아무리하지만, 일반적으로 Base64 잘 작동합니다.

경계의주의 사항 : 당신이 쿠키에 임의의 설정을 저장할 같은

이 들린다. 쿠키는 모든 클라이언트 입력과 마찬가지로 신뢰할 수 없기 때문에 일반적으로 좋은 방법이 아닙니다. 생성 된 (임의!) 식별자 아래에 데이터 서버 측을 저장하고이를 쿠키에 넣는 것을 고려하십시오. 그렇게하면 사람들은 액세스 제한을 우회하거나 조작 된 쿠키를 통해 임의의 데이터를 시스템에 주입 할 수 없습니다.

이 방법을 사용할 수없는 경우 쿠키 값을 신뢰할 수없는 입력으로 처리하고 평소대로 확인하십시오.

편집 : 그것은 자바 쿠키를 지원하지 않는 "="사용으로

는 Base64로는 적합하지 않습니다. 오히려 사용하십시오

java.net.URLEncoder.encode 

쿠키에만 적합한 문자를 사용합니다.

+1

경계의 노트 메모를 생성하기 위해 패딩이없는 Base64로 인코더 java.util.Base64.getEncoder().withoutPadding()

를 만들려면 : 그것은 당신이 조작하는 사람을 방지하려면 쿠키의 내용을 암호화하는 것이 가능 하지만 서버에 저장하고 싶지는 않습니다. – sfussenegger

+1

질문과 관련이 없지만 쿠키를 암호화해도 클라이언트가 쿠키를 조작하지 못하게 할 수는 없습니다. 암호화는 쿠키가 실제로 무엇을 포함하는지 클라이언트로부터 만 숨 깁니다. 클라이언트가 쿠키의 내용을 조작 할 수없는 경우 클라이언트에서 쿠키를 수신하면 쿠키에 내용을 서명하고 서버 측에서 해당 내용이 서명과 일치하는지 확인해야합니다. – jarnbjo

+1

@jambjo : 클라이언트가 암호화 된 쿠키의 내용을 조작하면, 적어도 적절한 암호화 알고리즘을 사용하여 임의의 가비지를 해독합니다. 따라서 클라이언트가 쿠키를 기술적으로 조작 할 수는 있지만 실제로는 DOS 이상을 달성 할 수는 없습니다 (아직 고려해야 할 사항). – sleske

5

안전하지 않은 문자가있는 경우 16 진수 또는 URL 안전 버전의 Base64를 사용하여 인코딩하십시오. 일반 Base64는 쿠키 값으로 사용할 수 없습니다. 오래된 Tomcat은 "="처럼 불법 문자를 허용했지만 최근 버전에서는 쿠키 규칙을 시행하기 시작합니다.

-3

내 PHP는 쿠키 값 인코딩 기능 :; 쿠키 쿠키 = 새로운 쿠키 ("이름", 새로운 String (name.getBytes (

<? 
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

정말 자바 질문에 유효하지 않습니까? – eis

+0

@eis, 정규 표현식이 – diyism

-2

난 당신이 문자열 이름 = "Женя"와 같은 뭔가가 필요 이해 "cp1251"), "utf8")); response.addCookie (cookie);

+2

키입니다. 그러면 데이터가 손상됩니다. – McDowell

1

패딩없이 Base64 인코딩을 사용하게되었습니다. 이것은 후행 등호가 생략되어 문제가 해결되었음을 의미합니다.

는 패딩이없는 Base64로 디코더에게 java.util.Base64.getDecoder()