Merhabalar,
Merak ettiğim bir şey var. Birçok yöntem denedim fakat sizlerin bu konuda neler yaptığını merak ediyorum.
Aynı anda çoklu kullanıcı girişini engellemek için en etkili yöntem olarak ne kullanıyorsunuz?
Son olarak Cloudflare, adobe gibi sitelerde oturum açılırken güvenli bilgisayar olarak ekle (trust) nasıl bir yol izlememiz gerekli?
Önerileriniz için şimdiden teşekkür ederim.
Çoklu oturum engelleme
- Düzenlendi
Yaptığım yöntemlerden bazıları;
1.aktif session id ile veritabanında kayıtlı olan session id karşılaştırma yöntemi.
2.SMS ile doğrulama
3.ve son olarak 2FA ile doğrulama. Fakat hedef kitlemizin internet okuryazarlığı çok iyi olmadığı için bu yöntemi uygulayamıyoruz.
Artık aklıma başka bir yöntem gelmiyor.
- Düzenlendi
Çoklu kullanıcı girişini engellemek için:
session_id değerini users tablosunda bir alanda tutun. Kullanıcı giriş yaptığında tabloyu güncelleyerek session_id değerini yazsın. Daha sonra bir tane middleware oluşturun. Mevcut session_id ile kullanıcı tablosundaki session_id eşleşiyor mu kontrol etsin. Eşleşmiyorsa kullanıcıyı çıkış yaptırsın. Başka bir yerden kullanıcı girmeye çalışırsa users tablosundaki session_id değişeceği için diğer kullanıcı ilk istek yaptığında sistemden atılacaktır.
Güvenli bilgisayar için:
trusted_devices gibi bir tablo oluşturun. İçerisinde user_id, ip ve user_agent gibi bilgileri tutsun. Aynı şekilde kullanıcı giriş yaptığında bu bilgisayarı güvenli olarak kaydetmek isterse bu tabloya kaydetsin. Daha sonra girmeye çalıştığında eğer trusted_devices tablosunda kayıt varsa ve mevcut bilgisayar ile eşleşmiyorsa kullanıcıdan giriş için ek bilgi (telefon no gibi) talep edeceksiniz.
Ekleme:
Ben yazarken zaten cevaplamışsınız.
@mgsmus Evet yaptığım yöntemlerin ne olduğunu yazmadığımı fark ettim.
Tekrar tekrar aynı şeyler yazılmasını önlemek adına yazdım, fakat biraz geç kaldım.
İlginiz için teşekkür ederim, herhalde bilinen yöntemlerden denemediğim tek bu kaldı.
En yakın sürede deneyeceğim. Tekrar teşekkürler.
- User tablosuna 1 adet kolon ekle.
- User login olunca buraya benzersiz bir random oluştur ve aynı zamanda sessiona ekle.
- her sayfa istendiğinde sessionla user tablosunun bu kolonunu karşılaştır. uymuyorsa logout yap.
- user'in ilk girdiği sessionlar ile, tablodaki benzersiz uyum sağlamaz çünkü en son loginde tablodaki benzersiz değişmiş değimiş olur.
İyi çalışmalar.
Buna ek olarak değişimi jquery ajaxla dinleyebilirsin. değiştiğinde logout yapabilir veya oturumu devralmak isteyip istemediğini sorabilirsin.
- En İyi Yanıterenilhan tarafından
Laravel için düşünüyorsak v5.6 ile bize sunulan bir özellik mevcut ben açıkcası bunu kullanıyorum.
https://laravel.com/docs/5.8/authentication#invalidating-sessions-on-other-devices
ac1919 Dokümanda bir formdan geleceği belirtilmiş.
This method requires the user to provide their current password, which your application should accept through an input form
Kısaca kullanıcı login olurken zaten şifresini aldığımız için o sırada bu işlem kullanıcının yazdığı şifre ile yaptırılabilir. Örneğin LoginController::authenticated() iyi bir yer:
/**
* The user has been authenticated.
*
* @param \Illuminate\Http\Request $request
* @param mixed $user
* @return mixed
*/
protected function authenticated(Request $request, $user)
{
$this->guard()->logoutOtherDevices($request->password);
}
ac1919 logoutOtherDevices() yönteminin yaptığı işi de söyleyeyim: Girilen şifreyi tekrar hash'leyip kullanıcıyı kaydediyor. AuthenticateSession middeware'i ise mevcut hash'i password_hash isimli oturum değişkeninden alıyor (yoksa kendi oluşturuyor) ve mevcut şifre ile eşleştiriyor. Kullanıcı başka bir cihazdan girdiğinde şifre tekrar hash'leniyor, oturumda tutulan ile veritabanındaki farklı olduğu için kullanıcı dışarı atılıyor.