Ne olursa olsun kullanıcı oturum açma girişimleri sınırlandırılması?

5 Cevap php

Ben bir kullanıcı adı ve parola gerektiren bir giriş sistemi vardır. Ben başarısız oturum açma girişimleri belirli bir süre sonra bir captcha görüntülemek istiyorum. Bunu uygulamak için doğru yolu nedir? Bu sitede etrafında okudum ve bazı çözümler 'başarısız girişimleri sayımı' olan kullanıcıların tabloya eklenir öneririz. Yani ben Captcha olursa olsun girilen kullanıcı adı sistemde var olup olmadığı görüntülenir olmak istiyorum - Ancak, belirli bir kullanıcıya bağlı olması değil başarısız girişimleri gerekir. Bir oturum değişkeni bu depolama (PHP kullanıyorum) Tamam olur? Eğer öyleyse, oturum değişkenleri içine gerektiği gibi sadece veri atma için hiçbir dezavantajı var? Zaten herhangi bir sitede (günlüğe ya da değil) her ziyaretçi için bir oturum kimliği var bu yüzden en iyi / en güvenli yaklaşım ne herhangi bir fikir ... Bu session id için giriş-girişimlerini ilgili bir tablo oluşturabilir? Teşekkürler.

Oturum kimliği iyi bir fikir değil gibi Update: şimdiye kadar cevaplardan, öyle görünüyor beri korsan olabilir basitçe net onun / cache (ama bu gerçekten bir sorun olduğunu wouldnt bu yavaş, çünkü yeterli kaba kuvvet saldırısı aşağı yararsız render?). Diğer seçenek IP tarafından ... ama ben bir intranet veya başarısız girişimleri ortak olacak beri vekaleten altındaki kullanıcılar için tereddüt am .... Ben gerçekten başka yöntemler düşünemiyorum .. olabilir mi?

5 Cevap

Bir oturum kimliğini kullanarak tehlike bir kaba kuvvet saldırısı yazıyor birisi sadece her girişimi ile yaptığı çerezleri temizlemek ve böylece ona yeni bir oturum vererek olmasıdır.

Otomatik bir kaba kuvvet saldırısı her istek için gönderilen çerezleri manipüle verebilecek bir tarayıcı dışında bir betik dili ile yazılmış olabilir unutmayın.

Bunu yapmanın bir başka yolu kullanıcı kaynak IP adlı bir tablo oluşturun ve orada sayaç eklemek olacaktır. Bu olsa bir proxy sunucusu kullanarak kullanıcılara rahatsızlık. Ama en azından aynı yerden defalarca tahminim şifreleri deneyen çekecektir.

GÜNCELLEME: arda kaba kuvvet girişimleri sırasında çerezleri temizlemek zorunda bu işlem otomatik olacak gibi saldırıyı yavaşlatmak ve neredeyse anında ne olmaz. Saldırıların bu tür çerez manipülasyon oldukça yaygındır. Bir çerez değiştirme (bu dosyalar bir demet silmek gerekiyor, çünkü genellikle bir süre alır) tarayıcınızın önbelleğini temizleyerek olarak aynı değildir. Tüm saldırganın yapması gereken gönderilen bir çerez önlemek olduğunu.

Korsan onun tarayıcıyı kapatır ve onu her deneyin açılıyor eğer oturum yaklaşım işe yaramaz, bu yüzden diyelim ki bir saat geçti ise sıfırlamak böylece başarısız girişimleri ve son girişimi (zamanının sayıda saklama bir tablo böylece kontrol edebilirsiniz kullanıcı başına sayacı) güvenli yol olacaktır.

Bir IP ve Zaman ile tüm başarısız girişimleri giriş yapabilirsiniz. Eski girişimleri belirli bir süre sonra silinir olsun başarısız ve varsa daha sonra belirli bir IP için başarısız girişimleri belirli bir miktar captcha'yı görüntüler.

APC http://www.php.net/apc veya memcache (d) http://www.php.net/memcache buraya http://www.php.net/memcached (memcache da yüklü olması için bir memcached sunucu ihtiyacı, burada gördüğünüz http://www.danga.com/memcached/ yükleyin ), sonra vb ..) ne suit (5 dakikalık bir zaman aşımı süresi, 30 dakika ile bir IP adresinden gelen kötü oturum açma girişimi için uygun artış komutları kullanın. Bu hızlı bir şekilde kaba kuvvet denemesi oluyor if (yarış koşulları endişeleri olmaksızın) belirlemek ve otomatik olarak bir zaman belirli bir süre sonra blok sona sağlayacaktır.

APC örnek:

$max_attempts = 5;  // max attempts before captcha
$attempts = apc_fetch('login_attempts_'.$ip));
if($attempts and $attempts>$max_attempts){
    // block code here or redirect, captcha etc... also suggest a short sleep time to delay answer, slow down bot
}else{
    // check login here, run next code if login fails
    if($login_failed){
        if(!$attempts){
            apc_store('login_attempts_'.$ip,1,$timeout);
        }else{
            // function NOT currently documented on php.net, increments number stored in key
            apc_inc('login_attempts_'.$ip);
        }
    }
}

tabii ki çok kaba bir örnek ... ama fikir olsun

Alabileceğiniz en doğru bilgiler kendi IP adresidir. Eğer doğru olmasını istiyorsanız kullanıcı sadece (kıvrılmasını kullanarak yani), oturum çerezi görmezden gelebilir beri Dont'bilmek, oturum çerezleri kullanın. Paylaşılan IP'lere endişe Ama eğer aksi alamıyorsanız diğer bilgileri geri geçmek için böyle bir tarayıcı ajan veya kullanımı ajax gibi ek bilgiler eklemeyi deneyebilirsiniz. Ancak, IP adresi dışında başka bir şeyi (o zaman bile, yakınlık kullanabilirsiniz) sahte olabilir.