PHP Rate Limiting ve HoneyPot Koruması
session_start();
$ip = $_SERVER['REMOTE_ADDR'];
$time = time();
$limit = 5; // 60 saniyede en fazla 5 kayıt denemesi
$blockTime = 900; // 15 dakika ban süresi
// Oturumda kayıtlı deneme sayısını kontrol et
if (!isset($_SESSION['register_attempts'])) {
$_SESSION['register_attempts'] = [];
}
// Eski girişleri temizle
$_SESSION['register_attempts'] = array_filter($_SESSION['register_attempts'], function ($attempt) use ($time) {
return $attempt > ($time - 60);
});
// Eğer limit aşılırsa IP'yi engelle
if (count($_SESSION['register_attempts']) >= $limit) {
file_put_contents('blocked_ips.txt', "$ip|" . ($time + $blockTime) . "\n", FILE_APPEND);
die("Çok fazla kayıt denemesi yapıldı. Lütfen daha sonra tekrar deneyin.");
}
// Engellenen IP'leri kontrol et
$blocked_ips = file('blocked_ips.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach ($blocked_ips as $blocked) {
list($blocked_ip, $unblock_time) = explode('|', $blocked);
if ($blocked_ip == $ip) {
if ($time < $unblock_time) {
die("Bu IP geçici olarak engellendi. Lütfen bekleyin.");
}
}
}
// HoneyPot (Gizli Tuzak Alanı) Kullanımı
if (!empty($_POST['honeypot'])) {
die("Bot tespit edildi!");
}
// Yeni denemeyi kaydet
$_SESSION['register_attempts'][] = $time;
// Kullanıcının kayıt işlemi burada devam edebilir...
echo "Kayıt başarılı!"; Nasıl Çalışır?
- Rate Limiting (Hız Sınırlama):
- 60 saniyede 5ten fazla kayıt denemesi yapan IP'yi 15 dakika boyunca engeller.
- Engellenen IPleri blocked_ips.txt dosyasına yazar.
- HoneyPot (Bot Tuzak Alanı):
- Formda görünmez bir alan (honeypot) eklenir. Eğer bir bot bu alanı doldurursa, otomatik olarak engellenir.
- HTML Formuna HoneyPot Alanı Ekleyin:
<form action="register.php" method="post"> <input type="text" name="username" placeholder="Kullanıcı Adı" required>
<input type="password" name="password" placeholder="Şifre" required>
<!-- HoneyPot Alanı (CSS ile Gizlenir) -->
<input type="text" name="honeypot" style="display:none;">
<button type="submit">Kayıt Ol</button>
</form>