İyinet'e Hoşgeldiniz!

Türkiye'nin En Eski Webmaster Forum'una Hemen Kayıt Olun!

Kayıt Ol!

Site İçi Flood Engelleme

Azat Metin

0
İyinet Üyesi
Katılım
4 Kasım 2010
Mesajlar
514
Reaction score
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]

 

Angelo

0
İyinet Üyesi
Katılım
13 Aralık 2004
Mesajlar
9,603
Reaction score
111
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
 

Azat Metin

0
İyinet Üyesi
Katılım
4 Kasım 2010
Mesajlar
514
Reaction score
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
 

Angelo

0
İyinet Üyesi
Katılım
13 Aralık 2004
Mesajlar
9,603
Reaction score
111
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.
 

Azat Metin

0
İyinet Üyesi
Katılım
4 Kasım 2010
Mesajlar
514
Reaction score
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:
 

Mywedding

1
İyinet Üyesi
Katılım
26 Eylül 2006
Mesajlar
5,893
Reaction score
96
Konum
www.odatv.com
güzel paylaşım, angelo'nun işaret ettikleriyle de desteklerseniz,

neden kullanmayalım,

teşekkürler
 

husmen73

0
İyinet Üyesi
Katılım
1 Mayıs 2010
Mesajlar
34
Reaction score
1
Bunları yaparken, arama motorlarınında engellenebileceğini unutmayınız.
 

Türkiye’nin ilk webmaster forum sitesi iyinet.com'da forum üyeleri tarafından yapılan tüm paylaşımlardan; Türk Ceza Kanunu’nun 20. Maddesinin, 5651 Sayılı Kanununun 4. maddesinin 2. fıkrasına göre, paylaşım yapan üyeler sorumludur.

Backlink ve Tanıtım Yazısı için iletişime geçmek için Skype Adresimiz: .cid.1580508955483fe5

Üst