Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: PHP: TeiniX peelo autoban system

Sivun loppuun

ajv [12.03.2004 10:15:45]

#

IP:n bannauksessa ei sinänsä ole mitään järkeä, koska suurella osalla internetin käyttäjistä ip vaihtuu jokaisella yhteydenottokerralla. Ja kiitos joillekin peeloille, jotka minut tämän motivoivat tekemään. Tämä scripti sen sijaan bannaa ip:n ennenkuin käyttäjä sitä edes huomaa. Bannaus perustuu ehtoihin, jotka täytyy itse määritellä. Itselläni ehdot ovat lähinnä, että jos vieraskirjan kentissä on lähetetty hävyyttömyyksiä tai jos sivuille tullaan muutamasta tietystä osoitteesta (HTTP_REFERER), ip bannataan.

Tämän pitäisi olla aika yksinkertaista ja varsinkin hyvin kommentoitua koodia. Käyttö tapahtuu vain includettamalla tämä "ban.php" esimerkiksi vieraskirjaan. Tai jos vieraskirja aukeaa index.php:n kautta, niin mielummin sinne ennen kuin mitään tulostetaan, sillä jos ip on bannattu niin sivun tulostaminen pysähtyy siihen paikkaan ja tuloksena on puolikas sivu html:ää. Sinun ei tarvitse kurkkia joka päivä, onko bannilistalle tullut uusia osoitteita, sillä scripti lähettää sinulle sähköpostia aina bannattaessa. Sähköpostiin tulee tärkeimmät tiedot käyttäjästä, kuten aika, syy, ip, host, agenttitiedot ja linkkisivu.

Laitan perään vielä itelle testausvaiheeseen todella nopeesti kyhätyn admin-paneelin, josta pystyt tyhjentämään bannilistaa.

Koodi yrittää tehdä itse kaikki tarvitsemansa tiedostot, mutta jossei onnistu, tee ne manuaalisesti. Saa käyttää/muokkaa vapaasti. Esimerkkikokeilu http://cgi.evtek.fi/~k0101030/testikansio8

ban.php

<?php

$ipbanlist = "iplist.txt";
$hostbanlist = "hostlist.txt";
$kirosanat = "kirosanat.txt";
$sposti = "oma.osote@palvelin.fi";

/*
funktio tarkista() ottaa argumentikseen tiedostonimen sekä
merkkijonon. Funktio tarkistaa löytyykö merkkijonosta vastaavaa
merkkijonoa, kun tiedoston yhdestä rivistä. Jos löytyy palauttaa
arvon TRUE, jos ei palauttaa FALSE. Tiedostossa jokaisella rivillä
on oma merkkijononsa tässä yhteydessä ip-osoite tai kirosana
*/
function tarkista($fname,$string) {
   if(!file_exists($fname)) {
      touch($fname);
	  chmod($fname,0777);
   }
   $rows = file($fname);
   foreach($rows as $row){
      if(@stristr($string,trim($row))) return true;
   }
   return false;
 }
/*
Funktio ban() ottaa argumentikseen tiedostonimen, sekä ip-osoitteen
tai vastaa vaikka hostin, joka halutaan lisätä tiedostoon.
*/
function ban($fname,$ip) {
   if(!file_exists($fname)) {
      touch($fname);
	  chmod($fname,0777);
   }
   $fp = fopen($fname,"a");
   fwrite($fp,"$ip\n");
   fclose($fp);
   return true;
}
// Esimerkki käytöstä. Tähän sinun tarvitsee itse osata soveltaa.
//Esimerkiksi, jos vieraskirjan viesti-kentässä on käytetty sanoja,
//jotka esiintyvät kirosanat.txt -tiedostossa asetetaan sille joku syy.
$syy = 0;
if(tarkista($kirosanat,$_POST['vk_viesti'])) $syy = "Kirosanoja vieraskirjassa";
//tai vastaavasti jos haluaa bannata jostain tietystä osoitteesta tulevat
//kävijät:
if(ereg("mureakuha",$_SERVER['HTTP_REFERER'])) $syy = "Yritettiin tulla kielletystä osoitteesta ".$_SERVER['HTTP_REFERER'];

//jos on jotain syytä bannata, niin bannataan. Tässä tapauksessa bannataan ip-osoite.
if($syy) {
   if(ban($ipbanlist,$_SERVER['REMOTE_ADDR'])) {
//jos bannaus onnistui, lähetetään siitä sinulle tieto sähköpostiin
mail(sposti,"IP bannattu",
"Ip-osoite ".$_SERVER['REMOTE_ADDR']." bannattu sivuiltasi

Seuraavat tiedot otettiin ylös:
Syy: $syy
Aika: ".date("j.m.Y.  H:i:s")."
IP: ".$_SERVER['REMOTE_ADDR']."
User agent: ".$_SERVER['HTTP_USER_AGENT']."
Palvelin: ".$_SERVER['HTTP_HOST']."
Host: ".gethostbyaddr($REMOTE_ADDR)."
Linkkisivu: ".$_SERVER['HTTP_REFERER'],"From: Autoban System <jokuosote@jotain.fi>");
   }
}

//Seuraavaksi tarkistetaan onko käyttäjän ip-osoite bannattujen
//ip-osotteiden listalla
if(tarkista($ipbanlist,$_SERVER['REMOTE_ADDR'])) {
   die("<h1>IP-osoitteesi on bannattu</h1>");
 }
//Pieni sovellus, miten bannaaminen onnistuu nopeasti osoiteriviltä käsin.
//Oletuksena, että olet includettanut tämän tiedoston index.php:n
//kirjoita osoiteriville http://oma.osote.com/index.php?IP_BAN=000.000.000.000
if($_GET['IP_BAN']) {
   if(ban($ipbanlist,$_GET['IP_BAN'])) print "IP-osoite \"".$_GET['IP_BAN']."\" bannattu onnistuneesti!";
   else print "Ip-osoitteen bannaus epäonnistui";
}
//Jos haluat bannata jonkun hostin samalla tyylillä:
//eli käyttö http://oma.osote.com/index.php?HOST_BAN=000.000.000.000
if($_GET['HOST_BAN']) {
   if(ban($hostbanlist,$_GET['HOST_BAN'])) print "Host \"".$_GET['HOST_BAN']."\" bannattu onnistuneesti!";
   else print "Hostin bannaus epäonnistui";
 }
?>

admin.php

<?php
$salasana = "jutka";
$banlist = "iplist.txt";
//todella yksinkertainen kirjautuminen.
if($_POST['login'] == $salasana) {
   setcookie("login",md5($salasana));
   header("Location: ".$_SERVER['PHP_SELF']);
 }
if($_POST['logout']) {
   setcookie("login","");
   header("Location: ".$_SERVER['PHP_SELF']);
 }

function listaa($fname) {
   $rows = file($fname);
   $i=0;
   foreach($rows as $row) {
      print "[<a href=\"?poista=true&fname=$fname&id=$i\">Poista</a>] $row<br>\n";
      $i ++;
   }
}
/*
Funktio poista() ottaa argumentikseen tiedostonimen ($fname)
ja rivin, joka poistetaan ($id)
*/
function poista($fname,$id) {
   $rows = file($fname);
   $rows[$id] = "";
   $fp = fopen($fname, "w");
   foreach($rows as $row) fputs($fp,$row);
   fclose($fp);
   return true;
 }

function lisaa_rivi($fname, $str) {
	$rows = file($fname);
	$rows[] = $str;
	$fp = fopen($fname, "w");
	foreach($rows as $row) fputs($fp,$row);
	fclose($fp);
	return true;
}

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Admin</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<?php
if($_COOKIE['login'] != md5($salasana)) {
?>
<p>
<form name="form" method="post" action="">
  Tunnus:
  <input type="text" name="login"><br>
  <input type="submit" value="Sisään">
</form>
</p>
<?php
} else{
?>
<p>
<form name="form" method="post" action="">
  <input type="submit" name="logout" value="Kirjaudu ulos">
</form>
</p>
<hr>
<?php
if(!$_GET[fname]) $fname = $banlist;
foreach (glob("*.txt") as $file) print " <a href=\"?fname=$file\">$file</a> |\n";
print "<hr>";
?>
<form name="form1" method="post" action="<?php print "?fname=$fname"; ?>">
  Lisää rivi tiedostoon "<?php print $fname; ?>" :
  <input type="text" name="lisaa">
  <input type="submit" name="Submit" value="Lisää">
</form>
<hr>
<?
if($_POST['lisaa']) lisaa_rivi($_GET['fname'],$_POST['lisaa']);
if($_GET['poista']) {
   if(!poista($_GET['fname'],$_GET['id'])) print "Jotain häikkää";
}
listaa($fname);
}
?>
</body>
</html>

Draiz [13.03.2004 10:38:54]

#

hmm...erikoinen ja varmaan aika käyttökelpoinenkin...

Vilikki [13.03.2004 16:14:52]

#

Aika ovela systeemi tosiaan :)

Turatzuro [13.03.2004 17:13:11]

#

Todella hyvä... tätä ideaa täytyy itsekin hieman soveltaa omaan vieraskirjaani. On nimittäin _hyvin_ ärsyttävää bannata sama peelo aina uudelleen eri ip:stä.

T.M. [14.03.2004 03:23:53]

#

Voipi tulla jollekulle tarpeeseen! Itse en kyllä luota automaattisesti bännääviin systeemeihin.
Hieman huono asia on se että kirosanoista bännätään heti, eikä esim 4 kirosanaa sisältävästä viestistä :P

Vielä koodin ulkoasusta sen verran että käytät noita sisennöksiä + kaarisulkeita hieman oudosti... tekee koodista todella vaikelukuista.

makeuu [14.03.2004 09:05:19]

#

Tämä on _varmasti_todella_ tarpeellinen joillekkin, ja itsekkin voisin tätä soveltaa..

Dustbin [14.03.2004 09:24:21]

#

Nerokasta :)

Petesku [15.03.2004 07:07:49]

#

Tosi hieno järjestelmä! Tällästä mä oonkin tarvinnut! Kiitos tekijälle.

lahtis [25.03.2004 20:59:23]

#

Miten olisi että tiettyjä sanoja esim. kirosanoja tms. ei voisi kirjoittaa vieraskirjaan, ei tulisi ollenkaan bannia, mutta ei viestiäkään näkyville. Eli viestit pitäsi ajaa jonkin peelo scriptin läpi. Pitääpä alkaa kehittelemään peelo scripti.

lahtis [25.03.2004 22:15:30]

#

tallettaa tiedot aina samalle riville. Eli ei toimi oikein. Jostakin puuttuu \n merkit.

ajv [26.03.2004 13:44:19]

#

lainaus:

tallettaa tiedot aina samalle riville. Eli ei toimi oikein. Jostakin puuttuu \n merkit.

Siis onko nyt kyse tuosta esimerkkikoodista? Äkkiä tarkistettuna ei puutu mistään \n-merkkejä.

Ja tuohan on aika helposti sovellettavissa, että kirosanoista ei bannita, vaan esimerkiksi viesti tallennetaan toiseen tiedostoon siksi aikaa, kunnes se tarkistetaan ja hylätään/hyväksytään. Ja koodihan on vain esimerkki, että miten minä olen tämän toteuttanut. Ideaa on kuitenkin esillä ja siitä on (toivottavasti) helppo lähteä soveltamaan tuota omiin tarpeisiin.

jouni13 [26.03.2004 20:33:27]

#

Tää tulee kyl tarpeeseen.Kiitos tekijöille!

shinmai [21.04.2004 12:05:02]

#

aika vänkä idea.

Ja toimiikin vielä.

Juice [13.09.2004 21:08:19]

#

Loistava idea, kiitos tekijälle. Tulikin tästä mieleen, että ihme kun tähän ei _vielä_ ole tehty skriptiin liittyvää nappia
SECURED BY TeiniX peelo autoban system

on vinkillä komea nimi...

Hyötykäyttöön menee.

KuinKala [27.11.2004 23:07:12]

#

Warning: Invalid argument supplied for foreach() in admin.php on line 17

tommottii sanoo aina

Smappa [15.05.2005 18:05:17]

#

Just hyvä skripti :D

elemo [26.05.2005 17:21:26]

#

just! lisää kirosanat samalle riville kaikki...

elemo [26.05.2005 17:28:06]

#

juu hei siis saatan kuulostaa vähän tumpelolta mutta mihin kohti toi pitää includettaa. mulla ei toimi vaikka laitoin sen sinne sivulle koodin sekaan missä vieraskirja on...
neuvoja kiitos....


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta