2009-10-07 29 views
6

Java Cookie nesnesinin gerçek değerini nasıl kodlamalısınız? '=' Gibi karakterler veya ABD-ASCII dışındaki herhangi bir karakterden geçemiyorum.Kodlama java Tanımlama bilgisi

/Br JOYNES

cevap

8

Bu gerçekten önemli değil nasıl, ama genelde Base64 iyi çalışması gerekir.

Bir uyarı notu: Bir çerez olarak keyfi ayarları saklamak istediğiniz gibi

Bu duyulur. Bu genellikle iyi bir fikir değildir çünkü çerezler (tüm müşteri girdileri gibi) güvenilmezdir. Oluşturulan (rastgele!) Tanımlayıcı altındaki veri sunucusu tarafını saklamayı ve bunu çerez içine koymayı düşünün. Bu şekilde insanlar, erişim kısıtlamalarını atlatamaz veya manipüle edilmiş çerezler aracılığıyla sisteminize rastgele veriler enjekte edemez.

Bu yaklaşımı kullanamıyorsanız, çerez değerlerini güvenilir olmayan girdi olarak ele alın ve her zamanki gibi doğrulayın.

Düzenleme: Java çerezleri desteklemeyen hangi "=" kullanır olarak

Base64, uygun değildir. Bunun yerine, yalnızca çerezlere uygun karakterleri kullanan

kullanın.

+1

Bir uyarı notu not oluşturmak için bir dolgu gerektirmeyen Base64 kodlayıcı java.util.Base64.getEncoder().withoutPadding()

oluşturmak için: Size manipüle engellemek istiyorsanız çerez içeriğini şifrelemek mümkün Onları ama onları sunucuda saklamak istemiyorum. – sfussenegger

+1

Soruyla gerçekten ilgili değil, ancak bir çerezi şifrelemek, istemcinin bunları değiştirmesini engelleyemez. Şifreleme, yalnızca müşteriden çerezin gerçekte ne içerdiğini gizleyecektir. İstemcinin bir çerezin içeriğini manipüle etmesini istemiyorsanız, bir istemciden bir çerez alındığında, bu içeriği imzalamak ve sunucu tarafındaki içeriğin imzayla eşleştiğini doğrulamak zorundasınız. – jarnbjo

+1

@jambjo: Eğer istemci şifrelenmiş bir çerezin içeriğini değiştirirse, rasgele çöpün şifresini çözecektir (en azından herhangi bir şifreleme algoritması ile). Bu yüzden, istemci teknik olarak kurabiyi teknik olarak manipüle edebilir, aslında bir DOS'dan daha fazlasını başarabilirler (yine de dikkate alınması gereken bir nokta). – sleske

5

Güvenli olmayan karakterlere sahipseniz kodlamak için Base64'in onaltılık veya URL güvenli sürümünü kullanın. Normal Base64 çerez değerleri olarak kullanılamaz. Eski Tomcat, "=" gibi yasadışı karakterlere izin vermek için kullanılırdı, ancak daha yeni sürümler şimdi çerez kurallarını zorlamaya başlar.

-3

benim php çerez değeri kodlamak fonksiyonu:; Çerez çerez = new Çerez ("name", new 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

gerçekten bir soru meselesi, değil mi? – eis

+0

@eis, normal ifade anahtar – diyism

-2

i bu dize name = "Женя" gibi bir şey gerek anlamak gibi "CP1251"), "utf8")); response.addCookie (çerez);

+2

anahtarıdır. Bu yalnızca verileri bozar. – McDowell

1

Taban kodlama olmadan Base64 kodlamasını kullanarak bitti. Bu, eşit işaretleri takip etmenin anlamı atıldığından, sorun çözülür.

bir dolgu gerektirmeyen Base64 kod çözücüye java.util.Base64.getDecoder()

İlgili konular