PHP - Ne bir oturumda saklamak için?

4 Cevap php

Ben oturumu tespit ve kaçırma ile tüm sorunlar hakkında bilmek. Benim soru gerçekten basit: PHP ile bir kimlik doğrulama sistemi oluşturmak istiyorum. Bunun için, giriş yaptıktan sonra, ben sadece oturumda kullanıcı kimliği saklamak istiyorsunuz.

Ama: Bazı insanlar her kullanıcı ve oturum için bir GUID üreten ve yerine oturumda sadece kullanıcı kimliği bu depolama gibi garip şeyler gördüm. Neden?

Bir oturumun içeriği bir istemci tarafından elde edilemez - ya da olabilir?

4 Cevap

Kısa cevap $ _SESSION safe olduğunu ve onun içeriğini bir kullanıcı veya saldırgana sızdırılmış olma konusunda endişelenmenize gerek yoktur.

Oturumun içeriği is not, normal kullanıcı için erişilebilir olması. Sen kullanıcının birincil anahtarı saklamak gerekir ve iyi olacak. Oturumu oturumu klasör / tmp, ancak bu web kök (/ var / www / tmp) için php.ini içinde değişmiş olabilir, normal bir linux sistemde, sızdırılmış olabilir ve daha sonra erişilebilir olabilir durumlar vardır . Kullanıcı eval () çağrısı kaçırma veya değişken normal olarak yazdırılan tarafından $ _SESSION süper küresel erişim elde etmek mümkün ise diğer tek yoludur.

Eğer paylaşılan bir bilgisayar üzerinde çalışan ve PHP'nin eski bir sürümünü kullanıyorsanız ve / veya sunucu / tmp / içinde depolanan bir oturum dosyayı okumak ve hatta değiştirmek için bu sistemde başka bir kullanıcı için mümkün olabilir yanlış yapılandırılmış iseniz. Ben dikkate bu saldırıyı alan tek bir uygulama bilmiyorum. Bu veritabanında bir session tablodaki bilgileri saklayabilirsiniz bir sorun olup olmadığını.

Haklısın. Müşteri sadece bir rasgele oluşturulmuş oturum kimliği belirteci görür. Orada bu belirteç (vb kaçırıldı) yanlış olabilir yolu vardır, ama üstüne bir GUID olan bir şey ekler. Buna karşılık, session.cookie_httponly (JavaScript oturum çerezi göremiyorum) gibi seçenekler session.cookie_secure, belirli saldırı senaryoları karşı korumak (Cookie sadece HTTPS üzerinden aktarılabilir).

Bazen, güvenlik için, geliştiriciler kaçırma daha da zor hale getirmek için kullanıcının oturumuna uzun bir dize atayabilirsiniz. Oturum yaratılış zamanda bu yeni dize ile bir cookie ayarlayarak, app daha iyi aslında oturum kişidir sağlamak için izleyen isteklerde doğru dize için kontrol edebilirsiniz

Bu sadece bir özenti korsanı tahmin etmek gerekir bir şey daha ekleyerek oluyor. Bu yeni çerez sağ php oturum tanımlama ile birlikte gönderilen çünkü koklama ilgili ise oturumunu korumak için az yaptığı gibi Ancak, sahte bir güvenlik duygusu olabilir. Ayrıca, oturum id (ben seni biliyorum eminim gibi, sadece çerez olarak değil, url koyun yok ama) olarak tahmin etmek çok zor.

Bu uygulama müdahalesi olmadan müşteriler tarafından elde değil yani Session bilgisi sabitdisk üzerinde saklanır.

Ben oturumları için kullanılan GUID'lerini görmedim, ama biraz daha fazla güvenlik eklerim gördüğüm ek yöntemleri bir çift vardır.

  • Kullanıcının IP saklanması - Sen yerlerde dayalı bir oturum değişikliği zorlamak gerekiyorsa (bazen GeolP şeyler yapacağız)
  • Kullanıcının HTTP_USER_AGENT başlık dize saklama. Korsanının farklı bir tarayıcı kullanarak olursa gaspına karşı güvenlik biraz sağlayabilir.

Wikipedia'da session hijacking countermeasures üzerinde büyük bir makale aslında yok.

Söyleniyor, ben oturum güvenliği kullanmak için bir oturumun parçası olarak bir GUID depolamak herkes (örneğin oturum rejenerasyon gibi) daha iyi bir çözüm görmek için başarısız olabileceğini hayal ediyorum. Ben ancak oturum güvenliği ile kullanım için, saklanacak bir GUID (belki de bir oyun için rastgele bir jeneratör parçası) için daha başka yararlar görebilirsiniz.