Oturumu yerine imzalı çerezleri İpuçları

2 Cevap php

Ben onlar hakkında çok iyi duydum beri (Flickr bunları kullanır, PHP'nin $_SESSION (bazı dil agnostik lezzet eklemek için, yani sunucu tarafı oturumu işleme,) hendek açılması ve yerine imzalı çerezleri kullanarak düşünüyor yaşıyorum , bu yüzden) da benim için yeterince iyi olmalı.

Ben tekniğin temel bağlamını anlamak: Kullanım çerezleri serbestçe istemci sunucu anahtar-değer çiftleri geçmek ve değerleri tahrif olmadığından emin olmak için bunları imzalamak için.

Ama ne imza kısmını uygulamak için iyi bir yol olurdu? Ayrıca; trafik, muhtemelen HTTP olacağından çerez çalan ve / veya kurcalama karşı çalışırken, bu yöntem ile (örneğin bir kullanıcının parola gibi) hassas veri göndermek için iyi bir yol var mı?

2 Cevap

Why bother?

Ben hassas veriler için bu tekniği kullanmak olmaz. Bu olsa düzenli bir oturumda birlikte yararlı olabilir - istemci normal oturum kimliği ile bir çerez vermek değil, aynı zamanda uygulama her sayfada ihtiyacı olan tüm bu anahtar / değer çiftlerini içerebilir. Bu şekilde, her sayfa isteği için oturum depolama isabet önleyebilirsiniz.

Bunu her isteği ile gönderilecektir beri oldukça sıkı veri miktarını tutmak için hedeflemelidir.

Aklınızda ile, itibaren ...

Signing data with a hash

Veri duyarlı değilse, size anahtar / değer çiftleri ve paylaşılan bir sır bir arada yapılmış sha1 karma ile değerlerini oturum açabilirsiniz. örneğin

$values=array(
  'user_id'=>1,
  'foo'=>'bar'
);
$secret='MySecretSalt';

$plain="";
foreach($values as $key=>$value)
{
    $plain.=$key.'|'.$value.'|';
}
$plain.=$secret;
$hash=sha1($plain);

Şimdi tüm değerleri ve karma ile istemci bir çerez verir. Cookie sunulduğunda Sen karma kontrol edebilirsiniz. Eğer müşteri tarafından sunulan değerleri hesaplamak karma beklenen karma uymuyorsa, siz değerleri tahrif edilmiştir biliyorum.

Encrypting sensitive data

Hassas veriler için, değerleri şifrelemek gerekir. Kriptografik fonksiyonları bir sürü sunuyor mcrypt uzantısını kontrol edin.

Cookie theft

Eğer bir tanımlama içine kullanıcı kimlik bilgilerini koyarak ve güvenen eğer çerez hırsızlığı ile ilgili olarak, daha sonra çerez parola kadar bu kullanıcıyı taklit edebilir ki edinir birisi değiştirilir. İyi bir uygulama, bir kullanıcının kimlik doğrulamasını nasıl hatırlıyorum, ve sadece e-posta adresi gibi kendi hesap bilgilerini değiştirmek değil kullanıcı açıkça Örneğin oturum eğer birisi yazı izin olabilecek bir forum için, belirli yetkileri vermek, ama etmektir.

Bu tür çerezleri sadece bir kez kullanılmasına izin bir belirteç değer veren içeren çerezleri "autologin" için başka teknikler vardır. Here's a good article bu tekniği.

Ayrıca imzalı bir çerez, istemci IP dahil bakmak olabilir ve çerez sunma IP eşleşmiyor ise, onları tekrar giriş olsun. Bu, daha fazla koruma sağlar, ama kimin belirgin bir IP adresi sürekli değişiyor insanlar için çalışmaz. Bunu isteğe bağlı bir özelliktir yapmak ve kullanıcı çıkmak için bir yol verebilir. Sadece bir boşta düşünce, ben pratikte yapılan görmedim :)

Böyle bir ek imza olarak User-Agent başlığını kullanarak denemek için birkaç teknikler sunuyor oturum hırsızlık, kaçırma ve tespit görmüyeli Sessions and Cookies açıklayan güzel bir yazı için.

Tam olarak bu amaç için CookieStorage yaptı. Tüm saklı değerler güvenli RIPEMD160 karma (ve zamanla tuzlu) aracılığıyla özel anahtar ile imzalanmış, ve isteğe bağlı RIJNDAEL256 ile şifrelenir.

Her değer alınabilir olan zaman damgası ile saklanır.

Signed example.
Encrypted example.

Eğer tercih ederseniz, sizin seçtiğiniz işlevlerini şifresini / karma / şifrelemek kullanabilirsiniz.