PHP'de session_regenerate_id()
işlevi neden ve ne zaman kullanmalıyım ? Onu kullandıktan sonra her zaman kullanmalı mıyım session_start()
? Oturumu sabitlemek için kullanmam gerektiğini okudum, tek neden bu mu?
PHP'de session_regenerate_id()
işlevi neden ve ne zaman kullanmalıyım ? Onu kullandıktan sonra her zaman kullanmalı mıyım session_start()
? Oturumu sabitlemek için kullanmam gerektiğini okudum, tek neden bu mu?
Yanıtlar:
session_regenerate_id()
?İşlev adından da anlaşılacağı gibi, mevcut oturum kimliğini yenisiyle değiştirecek ve mevcut oturum bilgilerini koruyacak bir işlevdir.
Esas olarak oturum sabitleme saldırılarını önlemeye yardımcı olur. Oturum sabitleme saldırıları, kötü niyetli bir kullanıcının başka bir kullanıcının oturum kimliğini (SID) sabitlemek (ayarlamak) için bir sistemdeki güvenlik açığından yararlanmaya çalışmasıdır. Bunu yaparak, orijinal kullanıcı olarak tam erişim elde edecekler ve aksi takdirde kimlik doğrulama gerektiren görevleri yerine getirebilecekler.
Bu tür saldırıları önlemek için, kullanıcıya session_regenerate_id()
başarılı bir şekilde oturum açtığında (veya her X isteği için) kullanarak yeni bir oturum kimliği atayın . Artık oturum kimliği yalnızca ondadır ve eski (sabitlenmiş) oturum kimliğiniz artık geçerli değildir.
session_regenerate_id()
?Symbecean'ın aşağıdaki yorumlarda işaret ettiği gibi, oturum kimliği kimlik doğrulama durumundaki herhangi bir geçişte ve yalnızca kimlik doğrulama geçişlerinde değiştirilmelidir.
Daha fazla okuma:
Oturum kaçırmayı ve oturumu sabitlemeyisession_regenerate_id()
durdurmak için kullanmalısınız .
Gönderen bu Security.SE cevap :
Oturum kaçırma, oturum çerezinin çalınması anlamına gelir. Bu, yerel bir ağı diğer bilgisayarlarla paylaşırken en kolay şekilde başarılabilir. Örneğin, Starbucks'ta. Örnek ... Y oturumuna sahip bir kullanıcı James'in Starbucks'taki web sitesinde geziniyor. Latte'imi yudumlarken ağ trafiğini dinliyorum. Kullanıcıyı, James'in web sitesi için oturum Y'nin çerezleriyle alıyorum ve tarayıcımı bunları kullanacak şekilde ayarlıyorum. Şimdi James'in sitesine, James'in sitesine girdiğimde.
Gönderen bu web sayfası :
Oturum Sabitleme, bir kullanıcının oturum kimliğini açık bir değere zorlayan bir saldırı tekniğidir. Hedef web sitesinin işlevselliğine bağlı olarak, oturum kimliği değerini "düzeltmek" için bir dizi teknik kullanılabilir. Bu teknikler, Siteler Arası Komut Dosyası istismarlarından web sitesini önceden yapılmış HTTP istekleriyle karıştırmaya kadar uzanır. Bir kullanıcının oturum kimliği düzeltildikten sonra, saldırgan bu kullanıcının oturum açmasını bekleyecektir. Kullanıcı bunu yaptığında, saldırgan aynı çevrimiçi kimliği üstlenmek için önceden tanımlanmış oturum kimliği değerini kullanır.
Ne Zaman Kullanılmalı
Kullanıcı, site güvenliğini veya gizlilik politikasını tehlikeye atabilecek bazı önemli girdileri (şifreleri, kimlik bilgilerini, unutulan şifreleri vb.) Düzenlerken / güncellerken.
Ayrıca bakınız:
Bence seans zehirlenmesi meselesi oldukça iyi ele alındı.
"Bunu ne zaman kullanmalıyım?" Kısmen geri adım atmanız ve uygulamanızın oturumda ne yaptığını düşünmeniz önemlidir. Ya da başka bir deyişle, cevaplamanız gereken temel güvenlik sorusu budur.
Birisi bu seansı ele geçirirse ne kazanır?
Yaptığınız tek şey, aksi takdirde anonim verileri izlemekse (kullanıcı siteye gelir ve ziyaretlerini izlemek için kullanırsanız), bir oturumu yeniden oluşturmak için çok az neden vardır. Bir hava korsanı, o oturumu kaparak değerli bir şey kazanmaz.
Bununla birlikte, birçok site oturum açma olanağı sunar. Bir giriş birçok şeyi değiştirir. Profilime erişebilirim. Ayarları değiştirebilirim. Bu nedenle, bir saldırgan, özellikle normal ve yönetici kullanıcıların tümü oturumları yönetmek için oturumları kullanıyorsa, hesabıma erişimimi isteyebilir. Bu yüzden insanlar siteme gelip oturum açtıklarında oturumu yeniden oluşturuyorum. Yeni giriş yapan kullanıcımın ele geçirilme olasılığının daha düşük olduğu ekstra bir güvenlik katmanı ekler.
Bir oturuma her kritik veri eklediğimizde, oturum kimliğini yeniden oluşturmayı düşünmelisiniz. Uygulamanızı sabitlemeye karşı sertleştirmeniz gerekiyorsa, rastgele bir yenileme yararlı olabilir, ancak ASLA her talepte yeniden oluşturmam. Varsayılan olarak PHP, oturumları yerel diskteki dosyalarda depolar. Nispeten küçük bir saldırı vektörünü azaltmak için çok fazla disk G / Ç ekliyorsunuz. Gerçekten daha fazla güvenliğe ihtiyacınız varsa, düzenli olarak yenileme yerine tam HTTPS'ye geçmeyi savunurum (HTTPS, sabitlemeyi kaldırmayı çok zorlaştırır).
session_regenerate_id
?Oturum sabitlenmesini önlemek için kullanmalısınız .
session_regenerate_id
?Kimlik doğrulama durumu her değiştiğinde, bu esas olarak oturum açma ve oturumu kapatma ile ilgilidir.
Bob halka açık bir bilgisayarda oturur ve stackoverflow.com'a göz atarak orada yeni bir oturum açar. Oturum kimliği bir tanımlama bilgisine kaydedilir ( httpOnly
javascript üzerinden erişimi engellemek için bayrakla). Yığın Taşması'nın HTTPS'nin her zaman etkin olduğunu ve ayrıca secure
tanımlama bilgisi için bayrağın ayarlandığını düşünelim .
Şimdi seansı nasıl çalabiliriz?
Bob, oturum kimliğini yazar. Tarayıcıyı kapatmadan bilgisayarı terk eder. Şimdi Alice bu bilgisayara geliyor ve Stack Overflow'un zaten yüklendiğini görüyor. Şimdi giriş yapıyor.
Şimdi kullanmanız gereken aşamadayız session_regenerate_id
. Oturum açma sırasında burada yeni bir oturum kimliği oluşturmazsanız, Bob, Alice'in oturumuna erişmek için yazdığı önceki oturumu kullanabilir ve şimdi Alice olarak oturum açabilir.
session_regenerate_id()
, Alice Bob hesabına erişebilir mi? bu doğru mu?
Daha iyi güvenlik için kullanabilirsiniz.
Bu şekilde tek kullanımlık oturum kimlikleri oluşturursunuz.
Kullanıcı oturum kimliğinizin = 3 olduğunu varsayalım
Bir bilgisayar korsanı, müşterinizi hackledi ve oturum kimliğini aldı. Böylece bilgisayar korsanı, oturumlarını kullanmak için bu çerezi kullanabilir.
Gibi kodunuz varsa
session_start();
session_regenerate_id();
web sitenizi her kullandıklarında oturumlarını değiştirebilirsiniz.
Şimdi hacker sessionid = 3 alıyor
ama o bunu kullandıktan sonra seansı değiştirdiniz, böylece
kullanıcı oturum kimliği = 4 // kimlik
bilgisayar korsanı oturum = 3 // boş
Ancak küçük bir nokta var diyelim ki yeniden oluşturma yöntemini kullanıyorsunuz ve müşteriniz sadece web sitesine giriş yapıp tarayıcıyı kapatın veya pasif. Müşterinizin sessionid = 4'ü var ve eğer bilgisayar korsanı o kısımda çerez alırsa aynı sessionid'e sahip olacak.
Yukarıda açıklandığı gibi, bu yolla müşterinizi veri koklamaktan tek bir şekilde koruyabilirsiniz, ancak yine de bu sorunu tamamen çözmeyecektir.
Ancak SSL enc kullanırsanız çok güvenli olacaktır.
Kötü ingilizce için özür dilerim.
Basit bir kullanım durumu:
// User visits a webshop
$shopcart = new Cart();
Bir oturum başlatılır ve veritabanına bir giriş yapılır. Kullanıcının alışveriş sepeti, oturum kimliği ile tanımlanır.
// User orders items
$shopcart->add('123', 20);
$shopcart->add('124', 18);
$shopcart->add('127', 5);
Eklenen her ürün için alışveriş sepeti tablomda kayıt yapılır. Ayrıca oturum kimliği ile tanımlanır.
// User saves cart in order to use it later
$shopcart->save();
Kullanıcı sepetini kaydetmeye karar verdi. Şimdi kullanıcı kimliğine ekleniyor.
// Regenerate session id for user to be able to make a new cart
session_regenerate_id();
Oturum kimliği yeniden oluşturulur ve kullanıcı artık başka bir alışveriş sepeti oluşturmaya başlayabilir.