Site İçi Flood Engelleme

0
Onaylı Üye
Üye
Katılım
4 Kasım 2010
Mesajlar
514
Tepki puanı
5
Konum
Diyarbakır
Merhaba arkadaşlar,
Bu script eğer bir sitedeki bir ip dakikada 40 link açıyorsa onu direk belirlediğiniz sayfaya yönlendiyor yada belirlediğiniz bir yazı ona çıkıyor :hihi: Sözü fazla uzatmadan kodlara dökersek

PHP:
<?php

$a = (int)date("i");
      $ip = $_SERVER['REMOTE_ADDR']; 
      $exec = mysql_query("insert into tbllog(ip,tarih) values('$ip','$a')");
      $z = $a-1;
      $q = mysql_query("select * from tbllog where ip='$ip' and tarih >='$z'");
      if(mysql_num_rows($q)>=40)
      {
         $ban = mysql_query("insert into tblbanlist(ip) values('$ip')");
         if($ban)
         {
            header('Location: ban.html');
         }
      }
      $q2 = mysql_query("select * from tblbanlist where ip='$ip'");
      if(mysql_num_rows($q2)>=2)
      {
            header('Location: ban.html');
      }
         
      $settime = "00:00";
      $gettime = date("h:i");
      if($gettime==$settime)
      {
         $trunlog = mysql_query("truncate table tbllog");
         if($trun)
         {
            header('Location: bakim.html');
         }
      }
      $setday = "15";
      $a = date("d");
         if($setday==$a)
         {
            $trunban = mysql_query("truncate table tblbanlist");
            if($trunban)
            {
               header('Location: bakim.html');
            }
         }
?>


Daha sonra PHPmyAdminden Sorgulatıp tabloları olusturacağimiz kodları verelim :hmmm:

PHP:
CREATE TABLE `tblbanlist` (
  `id` int(11) NOT lisanssız auto_increment,
  `ip` varchar(50) collate utf8_turkish_ci NOT lisanssız,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci AUTO_INCREMENT=5 ;
CREATE TABLE `tbllog` (
  `id` int(11) NOT lisanssız auto_increment,
  `ip` varchar(50) collate utf8_turkish_ci NOT lisanssız,
  `tarih` varchar(50) collate utf8_turkish_ci NOT lisanssız,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci AUTO_INCREMENT=80 ;


Umarım kendimi ifade edebilmişimdir.
Konu ile ilgili sorulara herzaman açığım.
Saygılarımla..
Azat Metin / www.yasalhost.com
[email protected]

 
0
Onaylı Üye
Üye
Katılım
12 Aralık 2004
Mesajlar
9,603
Tepki puanı
106
Konum
AZ
İki problem var, date(i) şeklinde aldığınız için, 3:29 için 29 u alıyor. Aynı kişi dakika bölümü 29 olan, herhangi başka bir gün ve saatte girsede, banlama limitine sayar yine. 00:00 da kimse ziyaret etmezse tablo zaten sıfırlanmaz. Tablodan tüm geçmiş ayak izi satırlarını çekmek de oldukça zahmetli bir işlem.

$_SESSION['visited']++;

şeklinde bir sayaç kullanılarak, çok daha verimli yapılabilir. Yine de paylaştığınız için teşekkürler
 
0
Onaylı Üye
Üye
Katılım
4 Kasım 2010
Mesajlar
514
Tepki puanı
5
Konum
Diyarbakır
İki problem var, date(i) şeklinde aldığınız için, 3:29 için 29 u alıyor. Aynı kişi dakika bölümü 29 olan, herhangi başka bir gün ve saatte girsede, banlama limitine sayar yine. 00:00 da kimse ziyaret etmezse tablo zaten sıfırlanmaz. Tablodan tüm geçmiş ayak izi satırlarını çekmek de oldukça zahmetli bir işlem.

$_SESSION['visited']++;

şeklinde bir sayaç kullanılarak, çok daha verimli yapılabilir. Yine de paylaştığınız için teşekkürler

Yardımcı olduğunuz için ben teşekkür ederim.
Söylemek istediğim birkaç şey var. Banlama limiti sadece o dakika için geçerlidir. Neden tabloları sıfırlama ihtiyacı duyuyoruz ki ? Ben denedim daha önce bu kodları. Sorunsuz çalışıyor diye hatırlıyorum. Neyse hocam kurcalamaya gerek yok.. Tabloları sıfırlarsak birşey kaybetmeyiz :D
 
0
Onaylı Üye
Üye
Katılım
4 Ocak 2011
Mesajlar
16
Tepki puanı
0
Konum
Bodrum
Teşekkürler Güzel Anlatım Olmuş.
 
0
Onaylı Üye
Üye
Katılım
12 Aralık 2004
Mesajlar
9,603
Tepki puanı
106
Konum
AZ
Yardımcı olduğunuz için ben teşekkür ederim.
Söylemek istediğim birkaç şey var. Banlama limiti sadece o dakika için geçerlidir. Neden tabloları sıfırlama ihtiyacı duyuyoruz ki ? Ben denedim daha önce bu kodları. Sorunsuz çalışıyor diye hatırlıyorum. Neyse hocam kurcalamaya gerek yok.. Tabloları sıfırlarsak birşey kaybetmeyiz :D

Şunun için gerekir.
$a = (int)date("i");

Şu anda burada saat 5 Ocak, 11:24 AM.
Ben bu siteye girdiğimde, $a değeri -> 24. Tabloya bunu sokuyorsunuz.

Dakika kısmı 20'den büyük, 40 sayfa gezimi yaparsam, tarihten bağımsız, 10 gün sonra bile dakika kısmı 20'den büyük bir saatte siteden banlanırım. Sadece dakikayı baz alarak insanların kaç sayfa gezdiğini hesaplamak yanlış kullanım.
 
0
Onaylı Üye
Üye
Katılım
4 Kasım 2010
Mesajlar
514
Tepki puanı
5
Konum
Diyarbakır
Şunun için gerekir.
$a = (int)date("i");

Şu anda burada saat 5 Ocak, 11:24 AM.
Ben bu siteye girdiğimde, $a değeri -> 24. Tabloya bunu sokuyorsunuz.

Dakika kısmı 20'den büyük, 40 sayfa gezimi yaparsam, tarihten bağımsız, 10 gün sonra bile dakika kısmı 20'den büyük bir saatte siteden banlanırım. Sadece dakikayı baz alarak insanların kaç sayfa gezdiğini hesaplamak yanlış kullanım.

Katılıyorum, haklısınız. :harika:
 
1
Onaylı Üye
Üye
Katılım
25 Eylül 2006
Mesajlar
5,893
Tepki puanı
88
Konum
www.odatv.com
güzel paylaşım, angelo'nun işaret ettikleriyle de desteklerseniz,

neden kullanmayalım,

teşekkürler
 
0
Onaylı Üye
Üye
Katılım
30 Nisan 2010
Mesajlar
34
Tepki puanı
1
Bunları yaparken, arama motorlarınında engellenebileceğini unutmayınız.
 
Geri
Üst