$ _SESSION Dizi Güvenliği

6 Cevap php

Benim web uygulaması içine düşük ayrıcalıklı bir yönetici olmayan kullanıcı günlükleri başarıyla, ben $_SESSION dizideki aşağıdaki verileri depolamak olduğum zaman:

$_SESSION = array(
    'user_id'     => 2343,  // whatever their user_id number is from the DB
    'allow_admin' => false, // don't give them access to admin tools
    'allow_edit'  => false, // don't let them edit stuff
    );

Onlar ayrı bir şekilde /tmp olarak oturum dosyaları düzenlemesini, onlara Yönetici veya Düzenleme erişimi vermek için $_SESSION dizi manipüle verebilecek herhangi bir yolu var mı? (Yukarıdaki kod bu öğeler eklenir tek yerdir $_SESSION)

6 Cevap

Oturumun içeriği sunucu tarafında görülebilir ve değiştirilebilir vardır.

Uygulama veya sunucu bazı güvenlik açığı varsa onlar sadece "izinsiz" şekilde modifiye edilebilir.

Ayrıca, bir saldırganın şüphelenmeyen bir kullanıcının üzerine bir oturum id zorlar nerede, session fixation attacks gibi şeylerin farkında olmak, kim ne zaman bir saldırganın bu oturumu paylaşmak için izin bu oturumun ayrıcalıkları ve yükseltir günlükleri. Gerekir

Eğer oturumun ayrıcalık düzeylerini değiştirseniz bu hafifletici bir yaklaşım regenerate the session id etmektir.

Ayrıca bu soruya bakın:

Eğer çerezleri ve orta saldırılarda adam okuma javascript kaçınmak istiyorsanız, https ile bir sunucu kullanmak ve sadece https üzerinden taşınacak oturum tanımlama ayarlamanız gerekir.

session.cookie_secure çerezler sadece güvenli bağlantılar üzerinden gönderilmesi gerektiğini belirtir. Kapalı varsayılan. Bu ayar, PHP 4.0.4 eklendi. Ayrıca bakınız session_get_cookie_params () ve session_set_cookie_params ().

Etkin olduğu sadece HTTP protokolü üzerinden erişilebilir olarak çerez işaretler. Bu çerez, JavaScript gibi betik dilleri tarafından erişilebilir olması anlamına gelir. Bu ayar, (tüm tarayıcılar tarafından desteklenmiyor olsa da) XSS saldırılarıyla kimlik hırsızlığı azaltmak için yardımcı olabilir.

Birisi bir kaç dakika boyunca savunmasız onun bilgisayarını bırakarak daha iyi yönetici ayrıcalıklarını korumak için, son (admin) giriş bir zamanlayıcı olmalıdır. O zaman o x timeunits uzakta daha fazla ise, kullanıcı yönetici haklarını kullanmak için yeniden giriş vardır.

Kısa oturumları sonra da uzun olanlar daha güvenlidir.

Server

Sessions sunucuda saklanır. Onlar oturumları depolandığı dizine doğrudan erişim varsa, bir kullanıcı oturum verilerini değiştirebilir. Buna bir çözüm dizini sağlamaktır. Ve sen User_id bir $ _POST veya $ _GET tarafından belirlenen izin senin php kodunda bir delik yok emin olun.

Client

Ancak istemci tarafında oturumlarını manipüle possible ile hijacking birileri session_id olduğunu. Bu korsanının bu kullanıcı olarak poz izin verir. Ve onların adına isteği gönderebilirsiniz.

Orada da Cross-Site Request Forgery. Bu olduğu zaman bir hacker hileler istekleri göndererek bir kullanıcı him. Yaparak onu örneğin bir linke tıklayın. Sen belirteçleri ile mücadele olabilir. Bir simge bir alan gizli olarak $ _SESSION dizi ve her HTML biçiminde koymak oluşturulan bir dizedir. Kullanıcı form gönderdiğinde değerleri birbirlerine karşı kontrol edilir. Ve her zaman kullanıcı yeni bir sayfa belirteç değişiklikleri ister. Bu şekilde, bir saldırganın oldukça zor belirteci yapmak nasıl bağlıdır belirteci, tahmin etmek denemek gerekir.

Bağlantıları da bu saldırılara örnekler gösterecektir.

Eğer komut böyle erişimi sağlamak yoksa kadar kullanıcıların bu konuda yapabileceğimiz bir şey yok. Yani oturum verileri oldukça güvenli olmalıdır. Kullanıcı yapabileceği tek şey, oturum çerezi veya URL geçti session id manipüle etmektir ama o başka bir kullanıcı Varolan session id bulmak olası değil.

(Örneğin, kullanıcılar bir şekilde $ _SESSION verileri değiştirmek / eklemek için izin gibi) bir yerde bir güvenlik delik bıraktım değil sürece.

Bildiğim kadarıyla, hayır, kullanıcı session id tahmin ve çerezleri değiştirir sürece. Bunu önlemek, en azından sunucu tarafı ek IP-kontrol eklemek gerekir.