PHP Giriş Sistemi

6 Cevap php

Ben PHP kullanarak bir web uygulaması için bir giriş sistemi oluşturma. Benim soru, yalnızca geçerli oturumda kullanıcı giriş bilgilerini saklamak için güvenli mi? Örneğin John adında bir kullanıcı siteme başarıyla oturum açtığında, ben sadece ['Kullanıcı Adı'] $ _SESSION saklayabilirsiniz = 'John' ve $ _SESSION ['LoggedIn'] = 1 sonra kontrol etmenizi $ _SESSION ['LoggedIn'] Her sayfada 1'e eşit kullanıcı aslında kaydedilir doğrulamak için mi? Veya bunu yapmak için daha iyi bir yolu var mı? Bu benim başın üst kapalı neden olabilecek herhangi bir sorunlarının farkında değilim, ama emin ben yolda sorunlara neden olur Sitemde büyük bir delik bırakarak değil yapmak istedim.

Bu endişelenecek bir daha az şey böylece Ayrıca, ben onların gerçek dize şifre, veritabanındaki kullanıcının parolasını + tuzu bir md5 hash depolamak.

Bu açık değilse daha fazla bilgiye ihtiyacınız veya varsa bana bildirin. Teşekkürler!

6 Cevap

Bu bir mükemmel makul bir yaklaşım. Sizin ziyaretçi (sunucu kendisini güvensiz olduğu sürece bu durumda bir şey adil oyun içinde), yani oturumda bir LoggedIn = 1 değeri mükemmel güvenli sunucu üzerinde oturum verilerini düzenlemek mümkün olmayacak.

Ancak akılda bir ziyaretçi (oturum anahtarını çalarak) başka oturumu hijacks riskini tutuyoruz. Bu karşı korunmasına yardımcı olmak için bir yolu da oturumunda ziyaretçinin IP adresi ($_SERVER['REMOTE_ADDR'] den) depolamak ve daha sonra istekleri o değişmedi olduğunu teyit etmektir.

Yerine MD5 SHA1 ya da güçlü bir karma düşünün. Eğer olsa, bu iyi, bunu tuzlama ediyoruz.

Sorunuza geri: evet, bu iyi. Ancak, kesin oturumları kaçırıldı değildir yapmak önlemlerin uygulanması. Wikipedia actually has a fairly good article on it.

Ben yazdım sistemlerin çoğunda, ben uzak IP değişmedi doğrulamak için mantık dahil ettik. Oturum vars kullanıcı (sadece oturum kimliği) geçti alamadım beri de, oturumda bu saklayabilirsiniz. User-agent ve ne değildir - Eğer gerçekten yaratıcı almak istiyorsanız, diğer kontrolleri ekleyebilirsiniz.

Ayrıca oturum saldırılarından hesaba sahip. Yönlendirmeleri kontrol edin. Eğer bir felaket operasyon varsa, şunu DeleteMyAccount bir POST diyelim, ben kullanıcının bilgisi mevcut olması bu oturumda sayma, alakasız bir sitede bir forum sonrası DeleteMyAccount vurmak için bir form gönderme artı javascript yazabilirsiniz.

Dikkate riskler vardır:

  1. Birisi kullanıcının çerez çaldı ve onları olduğu izlenimini burada Session hijacking: bu. Bazıları bu karşı ama bu garip yan etkileri olabilir IP filtreleme önerecektir. İnsanlar iş, evde ve wifi noktaları kullanılan mobil cihazlardan veya dizüstü bilgisayarlarda Siteleri kullanımı ve IP adresleri değişebilir başka durumlar vardır. Yani benim tavsiyem sadece highly duyarlı siteleri (örneğin, çevrimiçi bankacılık) için bu yapmaktır;
  2. Oturumunda kimlik bilgilerini saklamak hiçbir ekstra risk yani Your Site is Compromised: Bu durumda kullanıcı zaten veritabanına erişebilir. Onlar gibi kolayca onlar veritabanına UPDATE ifadeleri yayımlayarak kim değiştirebilir;
  3. A Co-Hosted Site is Compromised: paylaşılan hosting kullanabilirsiniz eğer sitelerinin bir demet tüm aynı Apache örneği üzerinde çalışan çünkü, tamamen ilgisiz bir site (veya bu düzeni olmadan) riski sizi koyabilirsiniz ve böylece (birbirlerinin dosyalarına erişebilir o) ait oldukları hangi site anlamaya zor olabilir ancak. Yani duymadım bir site hacklenmiş ise sitenizi etkileyebilir;
  4. A Co-Hosted Site is Malicious: 'e benzer (3) dışında bir tehdit, ancak başka türlü iç benzer.

Bu yüzden ((2) tabi) ince derim ama sadece risklerin farkında olmak. En az, bu en iyi uygulamalara, izleyin:

  1. Şifrelenmemiş şifrelerinizi saklamak asla;
  2. Güçlü bir karma algoritma (SHA1 tercih ya da en azından MD5) kullanın;
  3. Emin kimlik tanımlama noktada sona olun. Ne kadar sitenizde bağlıdır. Bir veya iki hafta veya işlem ya da her ikisinin bir veya iki saat olabilir.

Tamam Sesler; Bir zaman aşımı süresini ayarlama hakkında düşünmek isteyebilirsiniz (yani birisi uzaklaşır ve açık tarayıcı bırakır eğer too kadar tehlikede değiliz).

Genel olarak, doğru yolda kesinlikle vardır. Ben kimlikleri içinde senin kod iyi bir benzersiz bir referans olarak yerine kullanıcı adı daha oturumda kullanıcılar için kimlikleri kullanmanızı tavsiye ederim.

Karma için bu kadar çok hızlı ve gerçek bir kullanıcı sadece bunu yapmak gerekir iken bir saldırganın (tekrar tekrar çalıştırmak için ihtiyaç duyacağı bir çek istemiyorum: Ayrıca, md5 artık karma şifre yeterince güçlü olmadığı düşünülen bir defa). Ben başvuru bulmak isterdim, ama öncü bilgelik sha512 gibi bir öncü karma algoritması mermi, çok yapmaktır.

Sen COOKIE yerine OTURUM değişken kullanabilirsiniz. Eğer izleyerek COOKIE ayarlayabilirsiniz

setcookie ('ID', $ değişken, time () +8 * 60 * 60);

SQL Injection hakkında haberdar olmak zorunda. Eğer kullanıcı textbox SQL Injection hakkında haberdar olmak lütfen ilgilidir veritabanı ekleme veya güncelleştirme zaman. Htmlentities () fonksiyonu tarafından değerlerini güncelleyin / yerleştirin.