Source Rally PHP Community Scripts .. Sign up .. Login
What to do against spammers ? You can see my own (poor) approches somewhere else in this website (http://www.sourcerally.net/Scripts/76-E-mail-handeling-PHP-class). But with with method, the spammers are still connecting to the website, disturbing statistics, even if they are using the sending mail source file only. And the use of Ajax could make the job easier for them. But the spammers want to insert clickable links in the e-mail, so keep on checking the content of the mails you send. This could permit those trying to insert links in mail, to be "automaticaly" added to the banned list...
Please, comment this source file and add your own list.
Access: Public      Tags: spammers rejection
Add to favourites       Subscribe comments       Copy code       Bookmark
<?
/* So, I started from my existing list of banned IP... Please, comment this source file and add your own list. Content if my current "rejected_ip4.txt" file:
"194.8.74.0|194.8.75.255","91.103.152.0|91.103.153.255","195.87.102.0|195.87.102.255","92.124.32.0|92.124.63.255","89.223.48.0|89.223.63.255"

 This file can reject the IP addresses of spammers. Include it as soon as possible. If the ip address is one of those banned, the script "die"s, otherwise nothing happens (that is, the inclusion has no affect).
How it works:
Either a group of banned IP address: 194.8.74.0 to 194.8.75.255 for example,
or, in binary: 11000010000010000100101000000000 to 11000010000010000100101111111111.
The common part of these limits in binary is 11000010000010000100101. Thus, if the IP address of the visitor, when converted into this form, STARTS this common part, it is that the visitor has an IP address belonging to that group.

Implementation:
A reference file, here named "rejected_ip4.txt" humanly easy to update (since the info whois of the spammer, which means that you have allready received spam) contains ranges of IP addresses as "194.8.74.0 | 194.8.75.255", the groups are separated by a comma **. For faster execution, the reference file is "compiled" file (here named "rejected_ip4.bin") in a series of strings representing binary numbers.
Upon verification, the ip of the visitor is converted to a string "binary", and if the characters match, it is that the visitor has an IP address belonging to a banned group. Or, if strpos (Group [$ i], ChaineBinaireDe ($ _SERVER ['REMOTE_ADDR'])) == 0, the visitor will get "**cked off".
The "compilation" is done automatically. If the reference file is changed, the binary file is dated earlier than when the reference file and then the binary file is rebuilt.
A file of "logs" containing the date and ip address rejected, is also maintained.

The calculations could be done in "real" binary, and file being compiled binary also, but I chose the option ASCII to simplify development. The binary version will come later, perhaps. But I realy have doubts on gain of execution time doing that...

** The release of a single IP address would be in the form 190.8.74.15 | 190.8.74.15, for example. Beginners (they programmed in PHP?) Must know that most Internet service providers regularly change the IP address of their customers. The, the rejection of a single address does not really make sense.
-------------------
Ce fichier permet de rejeter les adresses IP de casse-burnes. L'inclure dès que possible. Si l'adresses ip fait partie de celles bannies, le scripte "meure", sinon, rien ne se passe.
Comment ça fonctionne:
Soit un groupe d'adresse IP bannies: de 194.8.74.0 à 194.8.75.255, par exemple,
ou, en binaire: de 11000010000010000100101000000000 à 11000010000010000100101111111111.
La partie commune de ces limites en binaire est 11000010000010000100101. Ainsi, si l'adresse IP du visiteur, une fois convertie sous cette forme, COMMENCE par cette partie commune, c'est que le visiteur à une adresse IP appartenant à ce groupe.

Implémentation:
Un fichier de référence, ici nommé "rejected_ip4.txt", humainement facile à mettre à jour (depuis les infos "whois" du spammer, ce qui suppose que vous avez déjà reçu des spams) contient des fourchettes d'adresses IP sous la forme "194.8.74.0|194.8.75.255", les groupes sont séparés par une virgule**. Pour une exécution plus rapide, le fichier de référence est "compilé" (fichier ici nommé "rejected_ip4.bin") en une suite de chaînes représentant des nombres binaires.
Au moment de la vérification, l'ip du visiteur est convertie en une chaîne "binaire", et si les premiers caractères correspondent, c'est que le visiteur a une adresse IP appartenant à un groupe banni. Soit: si strpos(Groupe[$i], ChaineBinaireDe($_SERVER['REMOTE_ADDR'])) === 0, le visiteur va se faire foutre.
La "compilation" est faite automatiquement. Si le fichier de référence est modifié, la date du fichier binaire est alors antérieure à celle du fichier de référence et le le fichier binaire est reconstruit.
Un fichier des "logs" contenant les dates et adresses ip rejetées est également maintenu.

Les calculs auraient pu être fait en "vrai" binaire et le fichier compilé l'être en binaire également, mais j'ai choisi l'option ascii pour simplifier la mise au point. La version binaire sera pour plus tard, peut-être. Mais c'est d'autant moins sûr que je doute du gain de temps à l'exécution...

** Le rejet d'une seule adresse IP se ferait sous la forme 190.8.74.15|190.8.74.15, par exemple. Les débutants (programment-ils en PHP?) doivent savoir que la plupart des fournisseurs d'accès à Internet changent régulièrement l'adresse IP de leurs clients. Pour ça, le rejet d'une seule adresse n'a donc pas vraiment de sens. */

  
function GetBinIP_v4 ($inIP) {
  
/// <s"*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-&#8727;">
  // Convertie l'IP $inIP en une chaîne de 32 caractères représentant l'adresse en binaire.
    
list($n[0], $n[1], $n[2], $n[3])=sscanf($inIP"%d.%d.%d.%d");
    for (
$j=0$resu=''$j<4$j++)
      for (
$i=0$b=128$i<8$b>>=1$i++)
        
$resu.=($b $n[$j] ? "1" "0");
    return(
$resu);
    }




  
/// <s"*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-&#8727;">
  
$fileRef="_src/rejected_ip4.txt";
  
$fileBin="_src/rejected_ip4.bin";
  
$fileLog="_src/rejected_ip4.log";

  
clearstatcache(); // Pour des informations système "à jour" sur les fichiers.
  
$refFTime=filemtime($fileRef); // Date du fichier original
  
$binFTime=@filemtime($fileBin); // Date du fichier re-visité
  
$dInfo=@file_get_contents($fileBin);
  if (!
$binFTime || !$dInfo || ($refFTime>$binFTime)) { // Optimiser
    
eval("\$initArr=array(".file_get_contents($fileRef).");");
    for (
$oStr=''$i=0$l=count($initArr); $i<$l$i++) {
      
$oStr.=$oStr "," ""// Pas de "," pour la première
      
$a=explode("|"$initArr[$i]);
      
$ipB=GetBinIP_v4($a[0]);
      
$ipE=GetBinIP_v4($a[1]);
      for (
$j=0$j<32$j++)
        
$oStr.=$ipB[$j]==$ipE[$j] ? $ipB[$j] : "";
      }
    
file_put_contents($fileBin$oStr);
    }
  for (
$vip=GetBinIP_v4($_SERVER['REMOTE_ADDR']), $a=explode(","$dInfo), $l=count($a), $i=0$i<$l$i++)
    if (
strpos($a[$i], $vip)===0) {
      if (
$fHand=fopen($fileLog"a")) {
        
fwrite(date("Y-m-d H:i:s")." -> ".$_SERVER['REMOTE_ADDR']."\n");
        
fclose($fHand);
        }
      die(
"Les visites \"incognito\" sont interdites ici...");
      }
Add to favourites       Subscribe comments       Copy code       Bookmark
Sign up to add your own comment here!

Shared by:

PatSerru

Mail user Add to friends
All user contributed content is available under the unless specified otherwise.
Remaining copyrights Regin Gaarsmand © 2006-2008
About www.SourceRally.net