Tartaros adlı üyeden alıntı: mesajı görüntüle
apiye post gönderdiğimiz bi veri var, sonuç geliyor vs.
şimdi şöyle bi güvenlik önlemi istiyorum.
örneğin bi ip üzerinde saatlik x adet post gönderebilsin. daha fazla veri çekmek, bilgi almak istediğinde uyarı versin ve x dakika işlem yapamazsın, lütfen x dakika sonra tekrar dene. gibi bi uyarı istiyorum.
kabaca

kişi farklı isimlerle sisteme giriş yapabilir,
1. veriyi çeker, 5 çeker 10. çeker,
11. veri çekmek istediğinde bi uyarı olarak "çok hızlı gidiyorsun, 15 dakika sonra tekrar dene"
gibi birşey.
nasıl yapabilirim, herhangi bi örneğine rastlamadım.

+ olarak ip adresi yerine nasıl bi garanti önlem alabiliriz?
İp adresi dışında alternatif çözümler arasında cookie,session gibi çerez verileri devreye girebilir. Ama bunlar ( cookie ) manipule edilebilir. Ayrıca apiye uzaktan bağlantı yapan kişininde ilgili bağlantı başlığında bunları iletmesi gerekir.

IP taraflı yapacağınız iş aşağıdaki şekilde olur. Veritabanına gerek yok disktede yapılır.

Api dosyanız ( Örnek index.php )

<?php
function get_ip()
{
		 if(getenv("HTTP_CLIENT_IP")) {
		 $ip = getenv("HTTP_CLIENT_IP");
		 } elseif(getenv("HTTP_X_FORWARDED_FOR")) {
		 $ip = getenv("HTTP_X_FORWARDED_FOR");
		 if (strstr($ip, ',')) {
		 $tmp = explode (',', $ip);
		 $ip = trim($tmp[0]);
		 }
		 } else {
		 $ip = getenv("REMOTE_ADDR");
		 }
		 return $ip;
}


function ip_counter($limit=5)
{
	$result = array();
	$result['status'] = false;
	$ip = get_ip();
	$list = file_get_contents('list.html');
	$time = time();
	preg_match_all('@<ip value="(.*?)" time="(.*?)"></ip>@si',$list,$ips);
	$check_already = array_search($ip, $ips[1]);
	if($check_already)
	{
		$last_time = $ips[2][$check_already];
		$difference = $time-$last_time;
		if($difference>=5)
		{
			$replace_line = preg_replace('@<ip value="'.$ip.'" time="(.*?)"></ip>@si','<ip value="'.$ip.'" time="'.$time.'"></ip>',$list);
			file_put_contents('list.html',$replace_line);
			
			$result['status'] = true;
			$result['ip_next_time'] = $limit;
		}
		else
		{
			$result['status'] = false;
			$result['ip_next_time'] = $limit-$difference;
		}
	}
	else
	{
		$add_line = PHP_EOL.'<ip value="'.$ip.'" time="'.$time.'"></ip>';
		file_put_contents('list.html',$add_line, FILE_APPEND);
		$result['status'] = true;
		$result['ip_next_time'] = $limit;
	}
	return $result;
}



$ip_counter = ip_counter(5);
$ip_next_time = $ip_counter['ip_next_time'];
if($ip_counter['status'])
{
	// Burada başarılı api isteğine karşı kodlarınız

	echo 'İstek Başarılı!<br>';
	echo 'Sonraki İstek İçin Beklenmesi Gereken Süre: '.$ip_next_time.' Sn';
}
else
{
	// Rate Limit
	
	echo 'İstek Başarısız!<br>';
	echo 'Sonraki İstek İçin Beklenmesi Gereken Süre: '.$ip_next_time.' Sn';
}

?>

Loglar list.html dosyasında tutulur.