Giriş sistemi (PHP) Çerezler ve Seanslar

6 Cevap php

Ben kurabiye / oturumları kullanarak giriş sistemi yapmak istiyorum ama güvenlik ve böyle onlarla gibi ne olduğundan emin değilim.

Oturumları ile, "giriş" Eğer "evet", bunu güvenebilirsiniz ayarlanır? Kullanıcılar döner ne değişecek yapabiliyor musunuz? Ben sadece şifreli parolayı depolamak ve her sayfada kontrol etmelisiniz?

Kurabiye, ben mysql enjeksiyonlar gibi şeyler kontrol etmek gerekir?

Bu acemi şeyler gibi gelebilir, ama birisi benim için açıklamak eğer gerçekten yardımcı olacaktır. Herhangi bir yanıt için şimdiden teşekkürler!

6 Cevap

Eğer bir oturum değişkeni ayarlarsanız başka bir oturum çerezi kaçırmak sürece, kullanıcı doğrudan değiştiremezsiniz.

Ne ağırlıklı olarak izlemek zorunda barındırma paylaşılan, sizin oturum verileri (genellikle diğer siteler bunu görebilirsiniz) güvenli değildir.

Ayrıca çerez veri ya da güvenli olmadığını belirtmekte yarar var. Bu veriler (olursa olsun ne söyler istemci doğrulama) güvenerek edilmemelidir oluşturmak aynı şekilde güvenerek edilmemelidir.

Şifreleri ile en iyi uygulamalar şunlardır:

  1. Tercihen SHA1 (ilk seçenek) veya MD5 (ikinci seçenek), bir karma formda veritabanındaki şifreyi saklamak;
  2. Eğer kullanıcının şifresini aldığınızda, şifrelemek ve veritabanında saklanan ne karşı kontrol edin;
  3. Kullanıcı oturumunda adınızı yapman Set;
  4. Yerine onu sonsuza dek sahip daha (hatta gün bile) belli bir süre sonra çerez sona erecek; ve
  5. (HTTPS değil HTTP) mümkünse güvenli bir bağlantı kullanın. SSL sertifikaları ucuz.

Burada birkaç kişi de belirtildiği gibi, kullanıcı girişi güvenmiyorum - Hiç. Lütfen giriş sterilize ederek, özellikle kullanıcı adı ve şifre alanları SQL Injection saldırılarını önlemek için yardımcı olur.

Iyi ve olduğunu tüm Kutsal kurabiyelere kullanıcı adlarını ve şifreleri saklamak yok, onlar geri gönderdi ve konum ileri her istek ve akışı izliyor herkes bu verileri kapamaz üzerinde sunucuya ... o zaman büyük belada.

Sadece SHA1 parolalarınızı karma veya MD5 yeterli değildir, onlar daha güçlü olduğuna çok tuzluyorlar - Burada oturumları, güvenlik ve karma okumalısınız bir kaç makaleleri bulunuyor. Aşılmaz güvenlik diye bir şey yoktur - HER ŞEY yapmak bile doğru birileri bunu kırabilir - bu kaçınılmaz. İşiniz mümkün olduğunca yararlanmak / kırmak için zor gibi şeyler yapmaktır.

Sitenize girmesini dahil daha fazla iş, daha değerli içerik çabaya değer olmak zorundadır. İşiniz kötü niyetli kullanıcıların vazgeçirmek için.

Bu makalede, ziyaretçiler için eşsiz parmak izi oluşturma hakkında bazı güzel bilgiler var, oturum kaçırma daha zor hale getirmeye yardımcı olur - PHP Security Guide: Sessions

Bu makale, temel şifre karma & fırsatlar tuzlama teknikleri - Password Hashing

Bu hiçbir şekilde bir uç bütün & olduğunu Tüm olacağız - güvenlik ve benzeri yapıyor kariyer yapabilir, ama onlar iyi bir başlangıç ​​noktası demektir. Burada birisi muhtemelen daha iyi / daha gelişmiş makaleleri işaret edebilir, ama ben şahsen benim kod payanda bu yararlı buldum.

Temel kural: kullanıcı girişi güvenmiyorum. Çerezler kullanıcı girişi vardır, kurabiye saklanan oturum kimlikleri kullanıcı girişi vardır, http başlıkları kullanıcı girişi vardır - bunlar üçlü mümkün olan her şey için kontrol edilmelidir. Oturum verileri, diğer taraftan, sunucuda saklanan, bu nedenle / tmp kayıtlı değilse daha fazla ya da daha az güvenli olduğunu.

Oturum izni için en popüler kurulumları biri şudur: session id tanımlama içinde saklanan ve parola dahil her şey oturumda saklanır. Bir çerez gelen kimliği dayalı bir oturum başladıktan sonra, oturum verileri kullanıcı kimliği almak ve şifre saklanan hala geçerli olup olmadığını o zaman kontrol etmelisiniz.

Kullanmak için iyi bir uygulama 3 değişkenleri saklandığı sahip olmaktır. Bir onlar, kendi kullanıcı adı için bir ve rasgele oluşturulmuş bir karma (onlar giriş oluşturulan ve diğer kullanıcı bilgileri ile birlikte bir veri tabanında saklanır) için bir giriş yaptıysanız. Bu şekilde, onların çerezleri saklanabilir kendi kullanıcı adı değiştirirseniz, onlar oturum açtığında kullanıcı için oluşturulan bir maç olmayacak

Example: Cookie data could be: logged_in = true; user = 'admin'; sessionid = [randomly generated id (I usually just md5 a randomly generated word that I create)]

Her yeni bir oturumkimliği da kendi alanında üretilen ve veritabanında saklanır, giriş. Şimdi benim çerez bilgilerini değiştirmek ve (onlar hi-jack için çalışıyor olabilir başka bir kullanıcı olurdu) 'kullanıcı' demek için kullanıcı değişkeni değiştirmek olsaydı. Oturumkimliği artık ikinci kullanıcı için birine kadar maç olacak ve giriş engellendi olacaktır.

İşte ben bir kaç hafta önce üzerinde çalıştığı bir CI projeden çaldı hızlı bir örnek:

    function logged(){
$logged_in = $this->session->userdata('logged_in');
if($logged_in){
  $userid = $this->session->userdata('userid');
  $sessionhash = $this->session->userdata('hash');

  $this->db->where('id', $userid);
  $this->db->where('hash', $sessionhash);
  $query = $this->db->get('members');

  if($query->num_rows == 1){
    return TRUE;
  }else{
    return FALSE;
  }
}
}

Herhangi ve tüm kullanıcı girişi dini, bu GET ve POST veri, çerez veri olabilir incelenip ve dezenfekte edilmesi gerekiyor ..

Bir oturumda var açma durumunu saklamak güvenli olup olmadığını soruyu cevaplamak için, cevabı evet. Sadece kullanıcı olursa olsun olması gerekiyordu ne kadar güvenli, sizi gönderir herşeyi sterilize hatırlıyorum.

This login system öğrenmek için büyük bir tanesidir.