PHP oturum değişkenleri nasıl güvenlidir?

4 Cevap php

Ben bir 'kullanıcı' tablosundaki verilere karşı bir kullanıcı adı / parola doğrular bir oturum açma komut dosyası var. Ayrıca, ben belirli bir kullanıcının erişim düzeyini belirleyen bir 'roller' tablo var. Ben kullanıcının yetki seviyesini keşfetmek için 'roller' tablo karşısında, başarılı bir girişten sonra, sadece ek bir sorgu yerine herhangi bir güvenlik delikleri vardır, güvenli oturum açma komut dosyalarını kullanarak bir oturum değişkeni içine bu depolamak.Bu varsayarsak? Fikir daha sonra karışık yetki ile herhangi bir sayfada, ben sadece kullanıcının yetki seviyesi kaydedilir keşfetmek için oturum değişkeni sorgu olabilir olacaktır.

Teşekkürler.

4 Cevap

Oturum çerezleri, diyelim ki, önemli ölçüde daha güvenlidir. Ama bir oturum çalmak ve böylece korsan o oturumda ne olursa olsun toplam erişebilir hala mümkündür. Bunu önlemek için bazı yollar IP kontrolü vardır (oldukça iyi çalışıyor, ama çok düşük fi ve kendi nedenle güvenilir olmayan) ve bir seferlik kullanarak. Geçen sayfanın Nonce saklandığı ne maçlar her sayfası denetimleri böylece tipik bir seferlik ile, bir sayfa başına "belirteç" var.

Güvenlik kontrol birinde, kullanılabilirlik bir kaybı var. Eğer IP kontrolünü yapmak ve kullanıcı bu kullanıcı için sabit bir IP tutmaz bir intranet güvenlik duvarı (ya da bu neden başka herhangi bir durumda) arkasında ise, onlar kendi IP kaybetmek her zaman yeniden kimlik doğrulaması gerekir. Bir seferlik ile, "geri tıklamak Bu sayfayı kırılmasına neden olur" her zaman eğlenceli bir durum olsun.

Ama bir çerez, bir hacker sadece oldukça basit XSS tekniklerini kullanarak oturumu çalabilir. Eğer bir çerez olarak kullanıcının oturum kimliğini saklamak durumunda, onlar da bu açıktır. Oturum (sunucu güvenli ise, ayrıcalık miktar çok daha sofistike yöntemler ve genellikle gerektiren) bir sunucu düzeyinde hack yapabilirim birisi sadece delinebilir olsa bile Yani, hala doğrulama bazı ekstra düzeyde ihtiyacımız olacak Her komut istek üzerine. Bu çerez çalınırsa bunun biraz daha kolay tamamen şehre gitmek için yapar gibi ajax istekleri her istek üzerine güvenlik kontrolleri alamayabilirsiniz gibi, birlikte kurabiye ve AJAX kullanmak gerekir. Sayfa bir seferlik kullanır, ancak sayfa yeniden asla Örneğin, komut sadece bu maç için kontrol edilebilir. Çerez kimlik doğrulama yöntemini tutan Ve eğer, ben şimdi çalıntı çerez ve AJAX deliği kullanarak benim kötülüğünü yapıyor şehre gidebilirsiniz.

Sunucu üzerinde yürütme, sadece komut _SESSION dizi erişebilirsiniz. Eğer oturum çerezinin kapsamını tanımlamak, hatta belirli bir dizine kısıtlayabilirsiniz. Birisi size yanı sıra, oturum verileri alabilir tek yolu sayfalardan birine bazı PHP kodu enjekte etmektir.

Kullanmakta olduğunuz sistem için olduğu gibi, kabul edilebilir olduğunu ve veritabanı aramaları kaydetmek, ancak oturumu ve herhangi bir yetki değişiklikleri uygulamak için yeniden oturum için kullanıcı gerektiren aklınızda tutmak için iyi bir yoldur. Eğer bir hesap kilitlemek istedi ve bu kullanıcı zaten oturum Yani, sen yapamazsın.

Bu Apache PHP $ _SESSION VirtualHosts genelinde erişilebilir olduğu unutulmamalıdır. Bu senaryoyu düşünün:

  • Sunucu iki etki, example.com ve instance.org ev sahipliği yapıyor. PHP oturumları etki sınırlıdır çerezler saklanır.
  • Bir kullanıcı example.com için günlükleri ve bir oturum kimliği alır. Example.com (değil çerez sunucuda depolanan,) bazı oturum değişkenleri ayarlar.
  • Bir üçüncü taraf iletimi sırasında çerez yakaladığını ve instance.org geçirir. Instance.org şimdi example.com oturum değişkenleri erişimi vardır.

Eğer sunucu üzerindeki tüm sanal sunucu kontrol Bu böyle büyük bir anlaşma değil, paylaşılan bir makinede ise, bu sorunlu.

Eğer rolleri belirlemek için bir oturum değişkeni içinde saklanan bir değer güveniyor, o zaman DB değerini değiştirmek ve kullanıcının geçerli oturumda karşı yansıyan sahip yeteneğini kaybeder. Zend Framework bakarsanız, orada kimlik doğrulama ve yetkilendirme arasında net bir ayrım var ve kılavuzda güçlü ifadeli uyarılar sadece (yani oturumda veri az miktarda depolamak için "Evet, o kullanıcı # 37 var ve o günlüğe" .)

Bildiğim kadarıyla 'güvenlik' gider gibi - Paylaşılan konak üzerinde olmadıkça, endişelenecek bir şey yok. Düzgün yapılandırılmış bir paylaşılan barındırma, onlar da, nispeten güvenli olmalıdır.