Kodlar düzeltilebilir ve geliştirilebilir. Geliştiren arkadaşlar bizimle paylaşırsa seviniriz.
<?php
// Konfigürasyon Ayarları
$config = [
'block_time' => 10, // Ban süresi (saniye)
'max_requests' => 20, // Maksimum istek sayısı
'file' => 'requests.json',
'whitelist' => ['127.0.0.1', '::1'], // Whitelist'e alınacak IP'ler
'blacklist' => [], // Manuel blacklist
'log_file' => 'access.log',
'enable_rate_limiting' => true,
'enable_logging' => true
];
// Hata Yönetimi
error_reporting(E_ALL);
ini_set('display_errors', 0); // Üretim ortamında hataları gösterme
ini_set('log_errors', 1);
ini_set('error_log', 'error.log');
// IP Doğrulama Fonksiyonu
function validateIp($ip) {
return filter_var($ip, FILTER_VALIDATE_IP) !== false;
}
function logAccess($ip, $status, $config) {
if (!$config['enable_logging']) return;
$timestamp = date('Y-m-d H:i:s');
$logEntry = "[$timestamp] IP: $ip, Status: $status\n";
file_put_contents($config['log_file'], $logEntry, FILE_APPEND);
}
try {
$ip = $_SERVER['REMOTE_ADDR'];
// ip Doğrulama
if (!validateIp($ip)) {
http_response_code(400);
exit("Geçersiz IP adresi");
}
// whitelist kontrol
if (in_array($ip, $config['whitelist'])) {
echo "Erişim başarılı. IP Adresiniz: $ip (Whitelist)";
logAccess($ip, 'Whitelist Access', $config);
exit;
}
// blacklist kontrol
if (in_array($ip, $config['blacklist'])) {
http_response_code(403);
logAccess($ip, 'Blacklist Blocked', $config);
exit("403 - Erişim Engellendi. IP Adresiniz kalıcı olarak engellenmiştir.");
}
if (!$config['enable_rate_limiting']) {
echo "Erişim başarılı. IP Adresiniz: $ip";
logAccess($ip, 'Direct Access (Rate Limiting Disabled)', $config);
exit;
}
$requests = [];
if (file_exists($config['file'])) {
$content = file_get_contents($config['file']);
$requests = json_decode($content, true) ?: [];
}
// süresi dolan kayıtları temizle
foreach ($requests as $key => $value) {
if (isset($value['expires']) && $value['expires'] < time()) {
unset($requests[$key]);
}
}
// istek sayısını kontrol et
if (isset($requests[$ip])) {
$requests[$ip]['count']++;
if ($requests[$ip]['count'] > $config['max_requests']) {
http_response_code(429);
$remaining_time = $requests[$ip]['expires'] - time();
logAccess($ip, 'Rate Limit Blocked', $config);
exit("429 - Çok fazla istek IP Adresiniz: $ip. lütfen $remaining_time saniye sonra tekrar deneyiniz.");
}
} else {
$requests[$ip] = [
'count' => 1,
'expires' => time() + $config['block_time'],
'ip' => $ip,
'first_access' => time()
];
}
// Verileri Kaydet
file_put_contents(
$config['file'],
json_encode($requests, JSON_PRETTY_PRINT | JSON_FORCE_OBJECT),
LOCK_EX // Dosya kilitleme
);
echo "Erişim başarılı. IP Adresiniz: $ip";
logAccess($ip, 'Successful Access', $config);
} catch (Exception $e) {
// Hata durumunda
http_response_code(500);
error_log("IP Kontrol Hatası: " . $e->getMessage());
exit("500 - Sunucu Hatası lütfen daha sonra tekrar deneyiniz.");
}
?>



