Benim PHP komut herhangi bir oturum güvenlik boşlukları var mı?

3 Cevap php

Ben kullanıcı giriş bilgilerini doğrulamak sonra, ben onlar için bu oturumu oluşturmak:

 $_SESSION['username']= $userName;

Sonra, ben bu gibi onları yönlendirmek:

header('Location:www.domain.com/profile/' . $_SESSION['username'];

Benim web sitesi bir güzellik URL olmasını istiyorsanız, gibi bir şey: www.domain.com/profile/userName

Böylece, bütün yönlendirme linkleri (HTML <a> etiketi veya PHP header() function) olarak, ben kullanmak olacaktır:

"www.domain.com/album/" . $_SESSION['username'];

Herhangi bir güvenlik boşluklar vardır?

Edit:

Ben kullanarak ilk session id oluşturmanız gerekiyor session_id()?

Yani, kontrol etmek için:

if(!isset($_SESSION['id']){
   //redirect to login page
}

3 Cevap

Normalde Oturumları kullanırken biz de farkında olmak gerekir: -

Session Hijacking , Session Fixation

Kullanıcı oturum değişkeni adı da bir oturum değişkeni gibi User Agent gibi bir daha benzersiz değerini saklamak mağaza açmış sonra kodunuzda öneririz. her sayfa bizim, ister aynı kullanıcı aracısı ve OTURUM kimliği kontrol edebilirsiniz kullanıcı ziyaret var ki bu çok daha güvenli olur. Hackerlar bunu çoğaltmak olamaz böylece çok daha güvenli bir kullanıcı arayüzüne MD% gibi şifreleme yapmak.

PHP Güvenlik Kılavuzu alıntı

<?php

session_start();

if (isset($_SESSION['HTTP_USER_AGENT']))
{
    if ($_SESSION['HTTP_USER_AGENT'] != md5($_SERVER['HTTP_USER_AGENT']))
    {
        /* Prompt for password */
        exit;
    }
}
else
{
    $_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']);
}

?>

Refer :
PHP Security Guide on Session
Another Thread on Session security

What are you protecting? What are you doing to verify that they have authorization? kendi profilini korumak ve oturum anahtarı var çünkü yetki var doğrulayarak mı? You don't ever mention checking that they have a session variable.

Hatta oturum kimliğini bilmeniz gerekmez. Yani onlar kullanıyor olması gereken oturum bilgilerini gösterir sadece mekanizma, kullanıcı kimlik doğrulaması aldı olmadığını saklamak için önemsizdir.

Kullanıcı oturum açtığında, gibi bir şey saklamak istiyorum

$_SESSION['authed_user'] = true;

Ve sonra, bilgileri düzenlemek için sonraki girişimler yapmanız:

if ($_SESSION['authed_user']) {
  // do something authed users can do
}

Ve doğal olarak, gerçekten muhtemelen yetki düzeyleri çeşit isteyeceksiniz. Sana SimpleAuth gibi bir şey kullanarak düşünün tavsiye ...

Kullanıcı kendi profilini düzenlemek için izin sayfada yetki gerekir. Onlar http://www.domain.com/profile/[username] sayfada düzenleme olacak, o zaman onların $_SESSION['username'] onlar üzerinde profil sayfasına eşit olup olmadığını kontrol etmeniz gerekir.

Aksi halde herkes (temelde bir profil numarası veya adı sanırım) URL'sini yazmanız mümkün olacak ve düzenlemek olacaktır.

Onlar AT ALL giriş yaptıktan Ama evet, önce kontrol etmelisiniz:

if (IsSet($_SESSION['username'])) {
// Logged in
} else {
// Not logged in
}