WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Stoppa spam på forum och bloggar (https://www.wn.se/forum/showthread.php?t=1050349)

klein 2011-10-06 15:02

Stoppa spam på forum och bloggar
 
Botnar som används för Black hat SEO är numera plåga som inte ungår någon forum eller blogg ägare, efter en slump sprungit på mjukvara som används för black hat SEO , så hittade jag url: http://www.stopforumspam.com/

Här är mitt bidrag till ett bättre internet, jag är hobby programmerare, därav får ni ta koden för vad den här. Jag har shell access på min burk, därav så kan förfarande som beskriv nedan vara lite annorlunda för webhotell som saknar shellaccess.

Instruktioner nedan fungera för mac och linux användare, för Windows RTFM eller ladda hem Vbox , kör ingång virtuell maskin med linux.

Värt att notera den första scriptet körs via enklast php_cli och det kommer troligen göra time out man kör det på webhotelll miljö via http. IP Ban filen innehåller ca 180k rader ip adresser,.

Notera 2 : fopen ,kommer skapa filer i /tmp/ , kommer antaligen inte vara så populärt hos Ert webhotell, så byt /tmp till getcwd(). i det fopen avsnitt som finns nedan.

När ni ser att scriptet fungera, så kommentara bort logg delen av koden.

Kod 2 , förutsätter att man har loggat in på DBn redan. Hur gör? Se första raderna kod 1 fram till // Slut på DB login

Och ni får jättegärna bidra med smartare kod och förbättringar.... Jag har inte märkt av någon prestanda problem. Men det kan bli ett problem i webhotell miljöer.


Instruktioner :

1) Ladda hem databasen från http://www.stopforumspam.com/downloads/

Med blockerade IP addresser.

Packa upp filen och dra upp ett bash skriv
Kod:

cat filnamn | tr -t , '\n' > evil_ip.txt
2) Logga in på mysql , skapa tabell i databasen med följande struktur :

Kod:

CREATE TABLE `banIP` (
  `ban_id` int(11) NOT NULL AUTO_INCREMENT,
  `ban_ip` varchar(16) COLLATE utf8_bin NOT NULL DEFAULT '',
  `ban_time` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`ban_id`),
  KEY `ban_id` (`ban_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
/*!40101 SET character_set_client = @saved_cs_client */;

3) Kod 1 inläsning av data :

Kod:

<?
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);
define( DB_SERVER, "127.0.0.1");
define( DB_SERVER_USERNAME, "dittusername");
define( DB_SERVER_PASSWORD, "dittpassword");
define( DB_DATABASE, "dindatabas");
define("OUTPUT_CHARSET","ISO-8859-1");


$link = mysql_connect( DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD);
$link = mysql_select_db( DB_DATABASE );

// Slut på DB login

$ipfile ="/tmp/evil_ip.txt";
$handle                = @fopen( $ipfile, "r");

if ($handle) {       
        $X=0;
        while (!feof($handle)) {
           
            $data              = fgets($handle, 32768 );
            $INLINE2          = str_replace( "\n","", $data);
           
           
            $SQL0  = "SELECT * FROM banIP WHERE ban_ip='".$INLINE2."';";
            $res0  =  mysql_query ( $SQL0 );
           
            if ( mysql_num_rows($res0) == 0  ) {
                                 
                    $tid              = time();           
                    $SQL              = "INSERT banIP ( ban_ip , ban_time ) VALUES ( '$INLINE2', '$tid' );";
                    $res              =  mysql_query ( $SQL );
           
                    print "\n".$SQL."  res=".$res;
           
            }           
           
        }           
        }

?>

4) Kod 2 , den här koden skall implemteras central någonstans på din blogg eller forum :

Kod:

<?
function CheckEvilIP ( $IP ) {   
   
            $URL    = "http://127.0.0.1/";     
            $SQL0  = "SELECT * FROM banIP WHERE ban_ip='".$IP."';";
            $res0  =  mysql_query ( $SQL0 );
           
            if ( mysql_num_rows($res0) > 0  ) {          // Finns ondskan i databasen?                 
                $handle = fopen("/tmp/evil-ip-address.txt", "a");
                    fwrite($handle,"\n". $_SERVER['REMOTE_ADDR'] );
                fclose( $handle );
               
                header ('HTTP/1.1 301 Moved Permanently');
                header ('Location: '.$URL);               
               
            } else if ( mysql_num_rows($res0) ==0  ) {              // Det finns ingen ondska.   
               
                $urlchecker = file_get_contents('http://www.stopforumspam.com/api?ip='.$IP);
               
                if (strpos($urlchecker, 'yes') ) {   
                    $handle = fopen("/tmp/evil-new-ip-address.txt", "a");
                        fwrite($handle,"\n". $_SERVER['REMOTE_ADDR'] );
                    fclose( $handle );   
                   
                    $tid              = time();           
                    $SQL              = "INSERT banIP ( ban_ip , ban_time ) VALUES ( '$IP', '$tid' );";
                    $res              =  mysql_query ( $SQL );
                   
                    header ('HTTP/1.1 301 Moved Permanently');
                    header ('Location: '.$URL);

        }
               
    }
           
}
?>


Slutligen :

Anropa funktionen med :

Kod:

CheckEvilIP ( $_SERVER['REMOTE_ADDR'] );

Jim_Westergren 2011-10-07 10:00

Bra. Men ovan kod lär dra en del performance om du ska köra den på varenda sidvisning. Kör funktionen annars på de ställen där de behövs, till exempel registrering av nytt konto. Du kan ju annars sätta en cookie om IP:et är ok och köra funktionen om det inte finns en cookie satt.

Men en bättre lösning måste nog ändå vara att kräva registrering för att kunna skriva inlägg och vid registreringen ha en enkel men unik fråga som måste svaras rätt. Gör det själv på seo-forum.se och det funkar bra. Drar heller ingen performance.

Danielos 2011-10-07 10:15

Ett annat alternativ är att ta ett webbhotell som redan har inbyggda spamfilter i systemen så man slipper som hotellkund att programmera in saker.

tartareandesire 2011-10-07 10:43

Citat:

Ursprungligen postat av Jim_Westergren (Inlägg 20419692)
Bra. Men ovan kod lär dra en del performance om du ska köra den på varenda sidvisning. Kör funktionen annars på de ställen där de behövs, till exempel registrering av nytt konto. Du kan ju annars sätta en cookie om IP:et är ok och köra funktionen om det inte finns en cookie satt.

Men en bättre lösning måste nog ändå vara att kräva registrering för att kunna skriva inlägg och vid registreringen ha en enkel men unik fråga som måste svaras rätt. Gör det själv på seo-forum.se och det funkar bra. Drar heller ingen performance.

Håller med dig till 100%. Det enkla och smarta är oftast det bästa och mest effektiva.

Citat:

Ursprungligen postat av Danielos (Inlägg 20419694)
Ett annat alternativ är att ta ett webbhotell som redan har inbyggda spamfilter i systemen så man slipper som hotellkund att programmera in saker.

Finns det något sådant system som fungerar bra? Jag har då aldrig träffat på ett spamfilter som man vill använda på det viset. Det är bättre att släppa igenom en del spam än att råka blockera några oskyldiga.

Ni som blockerar IP:n rakt av, räknar ni med att dessa ska vara svartlistade för all framtid? Det är ju ett enormt slöseri med IP-adresser.

Danielos 2011-10-07 11:42

Citat:

Ursprungligen postat av tartareandesire (Inlägg 20419697)
Finns det något sådant system som fungerar bra? Jag har då aldrig träffat på ett spamfilter som man vill använda på det viset. Det är bättre att släppa igenom en del spam än att råka blockera några oskyldiga.

Jodå, det finns, vi tex. kör ett professionellt system som fungerar otroligt bra och vi har inga klagomål från kunder. Det sker ingen IP blockering, utan det fungerar mycket likt ett vanlig spamfilter för email.

tartareandesire 2011-10-07 12:15

Citat:

Ursprungligen postat av Danielos (Inlägg 20419701)
Jodå, det finns, vi tex. kör ett professionellt system som fungerar otroligt bra och vi har inga klagomål från kunder. Det sker ingen IP blockering, utan det fungerar mycket likt ett vanlig spamfilter för email.

Jo, fast spamfilter för email felmarkerar alltid en del mail. Sannolikheten att en kund märker av detta är ju också ganska liten. Jag tycker inte det är en bra lösning - det finns för många tveksamheter som inte går att komma förbi.

Danielos 2011-10-07 12:34

Citat:

Ursprungligen postat av tartareandesire (Inlägg 20419704)
Jo, fast spamfilter för email felmarkerar alltid en del mail. Sannolikheten att en kund märker av detta är ju också ganska liten. Jag tycker inte det är en bra lösning - det finns för många tveksamheter som inte går att komma förbi.

Alla spamfilter, inkl. de som du lägger in i php kod kommer att blockera riktiga inlägg, eller felaktiga IP, inget spamfilter är 100%. Det system vi kör är dock så bra att ingen kund klagar, annars skulle vi reklamera systemet där vi skaffade det.

Clarence 2011-10-07 13:12

Citat:

Ursprungligen postat av Danielos (Inlägg 20419705)
Alla spamfilter, inkl. de som du lägger in i php kod kommer att blockera riktiga inlägg, eller felaktiga IP, inget spamfilter är 100%. Det system vi kör är dock så bra att ingen kund klagar, annars skulle vi reklamera systemet där vi skaffade det.

Skillnaderna är många mellan ett eget enkelt system och ett externt system man saknar kontroll över. T ex att man själv kanske vill fånga upp blockerade kommentarer för att se över sin egen felratio, med en enkel logisk captcha blockerar man inte något annat än väldigt klumpiga människor som bara försöker en gång (med logisk menar jag en väldigt enkel logisk fråga), med ett eget ip-filter kan man välja att förhandsgranska blockerade IPs.

Jämför med t ex gmails spam-korg ... den måste man ständigt titta igenom om man använder mailen till något viktigt. Har ens webbhotell något allmänt blockerings-filter över ens sajt vill man ha noga kontroll över vad som blockerats - som minst. Annars tror jag snarare systemet är ytterligare ett problem än en lösning på problemet.

Och ip-blockeringar rakt av kan väl vara effektivt om man uppför sin egen lista över återkommande irritations-moment. Annars är enkla captcha, registrering och liknande lösningar nästan alltid att föredra - tycker jag.

Danielos 2011-10-07 14:36

Citat:

Ursprungligen postat av Clarence (Inlägg 20419712)
Annars är enkla captcha, registrering och liknande lösningar nästan alltid att föredra - tycker jag.

Håller med dig, men många föredrar att inte själva lägga in php kod och andra åtgärder, för det har dom inte kunskapen eller orken till, och självklart går filtret att stänga av för de som önskar och som har kunskap och viljan att själva ha kontroll.

klein 2011-10-07 14:59

Just den här koden som är ovan nyttja färdiga blockeringar av IP. Den nyttja stopforumspam .com databas, eftersom du bara får ställa 20k frågor per dygn emot deras API, så valde jag skriva koden så att den först kollar lokal databas, sedan frågar den stoppforumspam.com

Alltså captcha fungera inte längre på phpbb, slå jag av spam skyddet så har jag ca 200 fejk användare reggad på några timmar.

Men lite statistik på 1 dygn. :

Ny IP adresser som har tillkommit under 1 dygn är : 26
Antalblockerade IP som har besökt min sida 1 dygn är : 213


Citat:

Ursprungligen postat av Clarence (Inlägg 20419712)
Skillnaderna är många mellan ett eget enkelt system och ett externt system man saknar kontroll över. T ex att man själv kanske vill fånga upp blockerade kommentarer för att se över sin egen felratio, med en enkel logisk captcha blockerar man inte något annat än väldigt klumpiga människor som bara försöker en gång (med logisk menar jag en väldigt enkel logisk fråga), med ett eget ip-filter kan man välja att förhandsgranska blockerade IPs.

Jämför med t ex gmails spam-korg ... den måste man ständigt titta igenom om man använder mailen till något viktigt. Har ens webbhotell något allmänt blockerings-filter över ens sajt vill man ha noga kontroll över vad som blockerats - som minst. Annars tror jag snarare systemet är ytterligare ett problem än en lösning på problemet.

Och ip-blockeringar rakt av kan väl vara effektivt om man uppför sin egen lista över återkommande irritations-moment. Annars är enkla captcha, registrering och liknande lösningar nästan alltid att föredra - tycker jag.



Alla tider är GMT +2. Klockan är nu 09:15.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson