- 8 Ocak 2011
- 103
- 46
Merhaba,
Öncelikle şunu söyleyeyim gece gece çok uğraşmak istemedim ama foruma konu da açmak istedim o yüzden çok basic bi proje bunun farkındayım.
bazı şeyler eklenebilir mesela blocked.php sayfasını sadece engellenen ip adreslerinin görmesi gibi vs vs
neyse kodlara gelelim ;
index.php : bu sayfada kullanıcının ip adresi tespit ediliyor ve ipinfo servisi aracılığıyla ip ile ilgili detaylar gösteriliyor. 1 dakika aynı ip adresi 5'ten fazla istek gönderirse o ip adresi 5 dakika boyunca engelleniyor. bu "time" adında çerez ile kontrol ediliyor ve süre dolunca ya da kullanıcı çerezleri temizlediğinde kullanıcı index.php ye erişmeye devam edebilyor.
Öncelikle şunu söyleyeyim gece gece çok uğraşmak istemedim ama foruma konu da açmak istedim o yüzden çok basic bi proje bunun farkındayım.
bazı şeyler eklenebilir mesela blocked.php sayfasını sadece engellenen ip adreslerinin görmesi gibi vs vs
neyse kodlara gelelim ;
index.php : bu sayfada kullanıcının ip adresi tespit ediliyor ve ipinfo servisi aracılığıyla ip ile ilgili detaylar gösteriliyor. 1 dakika aynı ip adresi 5'ten fazla istek gönderirse o ip adresi 5 dakika boyunca engelleniyor. bu "time" adında çerez ile kontrol ediliyor ve süre dolunca ya da kullanıcı çerezleri temizlediğinde kullanıcı index.php ye erişmeye devam edebilyor.
PHP:
<?php
session_start();
if (!isset($_SESSION['blocked_ips'])) {
$_SESSION['blocked_ips'] = [];
}
if (in_array(getUserIP(), $_SESSION['blocked_ips'])) {
if(isset($_COOKIE['unblock_time']) && time() < $_COOKIE['unblock_time']){
header("Location: blocked.php");
exit();
} else {
unset($_SESSION['blocked_ips'][array_search(getUserIP(), $_SESSION['blocked_ips'])]);
header("Location: index.php");
exit();
}
}
function getUserIP() {
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
$ip_info = file_get_contents('https://ipinfo.io/json');
$ip_data = json_decode($ip_info);
$user_ip = $ip_data->ip;
if (!isset($_SESSION['request_count'])) {
$_SESSION['request_count'] = [];
}
if (!isset($_SESSION['request_count'][$user_ip])) {
$_SESSION['request_count'][$user_ip] = 0;
}
$_SESSION['request_count'][$user_ip]++;
$max_requests = 5;
$request_time_window = 10;
if ($_SESSION['request_count'][$user_ip] > $max_requests) {
$_SESSION['blocked_ips'][] = $user_ip;
$unblock_time = time() + 300;
setcookie('unblock_time', $unblock_time, time() + 300, '/');
header("Location: blocked.php");
exit();
}
echo "<h1>Kullanıcının Dış IP Adresi ve Detayları</h1>";
echo "<p><strong>IP Adresi:</strong> " . $user_ip . "</p>";
echo "<p><strong>Hostname:</strong> " . $ip_data->hostname . "</p>";
echo "<p><strong>Şehir:</strong> " . $ip_data->city . "</p>";
echo "<p><strong>Bölge:</strong> " . $ip_data->region . "</p>";
echo "<p><strong>Ülke:</strong> " . $ip_data->country . "</p>";
echo "<p><strong>Posta Kodu:</strong> " . $ip_data->postal . "</p>";
echo "<p><strong>Zaman Dilimi:</strong> " . $ip_data->timezone . "</p>";
echo "<p><strong>ASN:</strong> " . $ip_data->org . "</p>";
?>
blocked.php : bu sayfaya engellenen ip adresleri 5 dakika boyunca yönlendiriliyor ama dediğim gibi basic düzeyde kodladım foruma konu açmadan pc yi kapatmak istemedim. Mesela tekrar söyleyeyim blocked.php sayfasını sadece engellenen ip adreslerinin görmesi gibi özellikler eklenebilir elbette. eğer isterseniz daha gelişmiş şekilde kodlayıp konusunu açarım.
PHP:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Engellendi</title>
<style>
body {
font-family: Arial, sans-serif;
background-color: #f4f4f4;
margin: 0;
padding: 0;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
}
.container {
background-color: #fff;
border-radius: 10px;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
padding: 20px;
max-width: 400px;
width: 100%;
text-align: center;
}
h1 {
color: #333;
}
p {
color: #666;
line-height: 1.6;
}
</style>
</head>
<body>
<div class="container">
<h1>Engellendiniz!</h1>
<p>Bir süre boyunca çok fazla istek yaptığınız için engellendiniz. Lütfen birkaç dakika sonra tekrar deneyin.</p>
</div>
</body>
</html>