PHP Session Güvenlik

oy
125

PHP ile sorumlu oturumu güvenliğini sağlamak için bazı kurallar nelerdir? Orada bilgiler tüm web üzerinden ve o hepsi tek bir yerde indi zaman meselesi!

Oluştur 02/08/2008 saat 03:41
kaynak kullanıcı
Diğer dillerde...                            


13 cevaplar

oy
88

Güvenli Oturumunuza tutmak için yapılacak şeylerin bir çift vardır:

  1. kullanıcıları doğrulamak veya hassas işlemleri yaparken SSL kullanın.
  2. session id yeniden oluştur zaman (örneğin giriş gibi) güvenlik düzeyi değişir. İsterseniz hatta her istek session id yeniden oluşturabilirsiniz.
  3. dışarı oturumları vakit geçir
  4. globalsi kayıt kullanmayın
  5. sunucuda sakla kimlik doğrulama ayrıntıları. Yani, bu tür çerez olarak kullanıcı adı gibi ayrıntıları göndermeyin.
  6. Kontrol $_SERVER['HTTP_USER_AGENT']. Bu oturum çalınma olasılığına küçük bir bariyer ekler. Ayrıca IP adresini kontrol edebilirsiniz. Ama bu (çevremiz burada durumda) çoklu internet bağlantıları vb dengeleme yük nedeniyle IP adresini değiştirme kullanıcılar için sorunlara neden olmaktadır.
  7. dosya sisteminde oturumlarına erişimini kilitleyebilir veya özel oturum yönetimini kullanmak
  8. Hassas operasyonlar yine kendi authenication ayrıntıları sağlamak kullanıcılar giriş zorunlu kılmayı düşünün için
Cevap 11/08/2008 saat 03:38
kaynak kullanıcı

oy
15

Bir kılavuz çağırmaktır session_regenerate_id her zaman bir oturumun güvenlik düzeyi değişir. Bu oturum saldırılarını önlemeye yardımcı olur.

Cevap 02/08/2008 saat 03:43
kaynak kullanıcı

oy
11

Benim iki (veya daha fazla) sent:

  • Kimseye güvenme
  • giriş, kaçış çıkışını Filtre (çerez, oturum verileri giriş çok vardır)
  • XSS (iyi oluşturulmuş HTML tutmak bakmak kaçının PHPTAL veya HTMLPurifier )
  • Derinlemesine savunma
  • Verileri maruz bırakmayın

Bu konuyla ilgili bir küçük ama iyi kitap var Chris Shiflett tarafından Esansiyel PHP Güvenlik .

Temel PHP Güvenlik http://shiflett.org/images/essential-php-security-small.png

Kitabın ana sayfada kod örnekleri ve örnek bölümler bazı ilginç bulacaksınız.

Burada anlatılan (IP & UserAgent) Yukarıda belirtilen tekniği kullanabilir: Nasıl kimlik hırsızlığı önlemek için

Cevap 06/04/2010 saat 17:05
kaynak kullanıcı

oy
11

Ben (PHP 6'da ele alınmaktadır) register_globals'in olduğu önemli sorunlardan biri olduğunu düşünüyorum. Şu anda önlemek için kullanılan standart yöntemlerden biri register_globalskullanmaktır $_REQUEST, $_GETya $_POSTdiziler.

"Doğru" yol (biraz arabası olmamasına karşın 5.2 olarak değil, 6 olarak istikrarlı, çok yakında olan) bunu geçer için filtreler .

Bunu yerine:

$username = $_POST["username"];

yapardın:

$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);

hatta sadece:

$username = filter_input(INPUT_POST, 'username');
Cevap 02/08/2008 saat 03:55
kaynak kullanıcı

oy
9

Bu oturum sabitleme kağıt saldırı gelebilir çok iyi işaretçileri vardır. Ayrıca bkz Wikipedia'da oturum belirleme sayfasını .

Cevap 05/03/2009 saat 23:33
kaynak kullanıcı

oy
5

IP adresinin kullanılması gerçekten benim durumumda iyi bir fikir değildir. Örneğin; ofisimin yüke bağlı alışması iki IP adresi vardır ve sürekli IP adreslerini kullanarak sorunları çalıştırmak.

Bunun yerine, benim sunucularda alan adları için ayrı bir veritabanında oturumları saklamak için tercih ettik. Bu şekilde dosya sisteminde kimse o oturumda bilgi erişimi vardır. Bu 3.0'dan eski phpBB ile gerçekten yararlı oldu (onlar beri bu çözdüm) ama yine de bence iyi bir fikirdir.

Cevap 06/08/2008 saat 21:44
kaynak kullanıcı

oy
3

php.ini

session.cookie_httponly = 1
change session name from default PHPSESSID

eşdeğer Apache başlık ekleyin:

X-XSS-Protection    1
Cevap 13/10/2011 saat 03:40
kaynak kullanıcı

oy
3

Ben bu- gibi benim oturumları kurmak

sayfasında günlüğüne tarih:

$_SESSION['fingerprint'] = md5($_SERVER['HTTP_USER_AGENT'] . PHRASE . $_SERVER['REMOTE_ADDR']);

(Deyim bir yapılandırma sayfasında tanımlanan)

Daha sonra sitenin geri kalanı boyunca olduğu başlığındaki:

session_start();
if ($_SESSION['fingerprint'] != md5($_SERVER['HTTP_USER_AGENT'] . PHRASE . $_SERVER['REMOTE_ADDR'])) {       
    session_destroy();
    header('Location: http://website login page/');
    exit();     
}
Cevap 19/07/2011 saat 22:40
kaynak kullanıcı

oy
3

PHP oturumlar ve (oturum ele yanı sıra) güvenlik ile ana problem de ne çevre ile gelir. Varsayılan PHP mağazalarında By oturum verilerini OS'nin geçici dizinde bir dosyada. Herhangi bir özel düşünce veya planlama olmadan bu oturumda tüm bilgileri sunucuya erişimi olan tüm kamu böylece bir dünya okunabilir dizindir.

birden fazla sunucu üzerinde oturumları korumak gelince. Bu noktada o oturum verileri (, güncelleme oluşturmak, okuma silme) o CRUD için sağlanan işlevleri çağıran kullanıcının ele oturumlarına PHP geçmek için daha iyi olurdu. tüm uygulama sunucuları verilere erişim, böylece o noktada çözüm gibi bir veritabanı veya memcache oturum bilgilerini saklamak olabilir.

Paylaşılan bir sunucu üzerinde ise o size çoğu kez o zaman dosya sistemi üzerinde daha fazla kontrole sahip veritabanında saklamak izin verecek, çünkü kendi oturumları saklanması da avantajlı olabilir.

Cevap 03/08/2008 saat 14:14
kaynak kullanıcı

oy
3

Bu oldukça önemsiz ve açıktır, ama mutlaka session_destroy her kullanımdan sonra. Bir zamanlayıcı Bunu yapmak için ayarlanabilir böylece kullanıcı, açıkça oturumu yoksa bu uygulamak zor olabilir.

İşte iyi bir öğretici SetTimer'ın () ve clearTimer () üzerine.

Cevap 02/08/2008 saat 04:16
kaynak kullanıcı

oy
2

Sen oturum verileri güvenli olduğundan emin olmak gerekir. php.ini'nize bakarak veya phpinfo kullanarak () size oturum ayarları bulabilirsiniz. onlar nereye kaydedildiğini _session.save_path_ anlatır.

klasörün ve ebeveynlerin iznini kontrol edin. Bu genel olması (/ tmp) ya da paylaşılan bir sunucuda diğer web siteleri tarafından erişilebilir olmamalıdır.

Hala php oturumu kullanmak istiyorum varsayarsak, sen _session.save_handler_ değiştirerek veritabanındaki verileri _session.save_path_ değiştirerek bir başka klasörü kullanın veya kaydetmek için php ayarlayabilirsiniz.

Sitenizin kök klasöründe bir .htaccess dosyasında, apache + mod_php için ya da (bazı sağlayıcılar buna izin) php.ini _session.save_path_ ayarlamak mümkün olabilir: php_value session.save_path "/home/example.com/html/session". Ayrıca _ _session_save_path () ile çalışma zamanında ayarlayabilirsiniz.

Kontrol Chris Shiflett en öğretici veya Zend_Session_SaveHandler_DbTable ayarlamak ve alternatif oturum yönetimini.

Cevap 18/08/2008 saat 18:12
kaynak kullanıcı

oy
2

Eğer kullanırsanız session_set_save_handler () Kendi oturum yönetimini ayarlayabilirsiniz. Örneğin veritabanında oturumları depolayabilir. Bir veritabanı oturumu işleyici örnekleri için php.net yorumlarla bakın.

Eğer her web sunucusu oturumları yazma / okuma aynı dosya sistemine erişimi vardı emin olmak gerekir dosya tabanlı oturumları kullanırken aksi takdirde birden çok sunucu varsa DB seansları da iyidir.

Cevap 09/08/2008 saat 04:28
kaynak kullanıcı

oy
2

Onlar değiştirmek olmadığını görmek için IP ve Kullanıcı Ajanı hem kontrol ediyorum

if ($_SESSION['user_agent'] != $_SERVER['HTTP_USER_AGENT']
    || $_SESSION['user_ip'] != $_SERVER['REMOTE_ADDR'])
{
    //Something fishy is going on here?
}
Cevap 04/08/2008 saat 22:38
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more