La balise <IFRAME> :
La balise <IFRAME> permet de charger une autre page dans votre page HTML principale. Son utilisation est donc très intéressante pour contrer les spams de commentaires en mettant votre formulaire dans un fichier HTML externe :
Page HTML prinicpale :
<html>
<head></head>
<body>
...
Ceci est mon texte/article...
...
<iframe src="formulaire.html" width=400 height=200 style="border:none;"></iframe>
...
...
</body>
</html>
Page du formulaire (formulaire.html) qui sera chargée par <IFRAME> :
<html>
<head></head>
<body>
<form method=post>
Nom:<input type=text name=nom><p>
Email:<input type=text name=email><p>
Commentaires:<textarea name=comment></textarea><p>
<input type=submit value='Poster'>
</form>
</body>
</html>
Le résultat ci-dessous illustre cet exemple :
Bien entendu, rien ne vous empêche de masquer le code d'appel à l'iframe dans votre page HTML avec la méthode décrite dans "Masquer les éléments HTML":
<html>
<head></head>
<body>
...
Ceci est mon texte/article...
...
<script>
document.write(String.fromCharCode(60,105,102,114,97,109,101,32,115,114));
document.write(String.fromCharCode(99,61,34,102,111,114,109,117,108,97));
document.write(String.fromCharCode(105,114,101,46,104,116,109,108,34,32));
document.write(String.fromCharCode(119,105,100,116,104,61,52,48,48,32));
document.write(String.fromCharCode(104,101,105,103,104,116,61,50,48,48));
document.write(String.fromCharCode(32,115,116,121,108,101,61,34,98,111));
document.write(String.fromCharCode(114,100,101,114,58,110,111,110,101));
document.write(String.fromCharCode(59,34,62,60,47,105,102,114,97,109,101));
document.write(String.fromCharCode(62));
</script>
...
...
</body>
</html>
Forcer le spammeur à se piéger lui-même :
S'il y a une chose que les spammeurs détestent, c'est lorsque l'on décide de jouer avec eux: leur faire perdre leur temps et donc leur argent est la pire des choses qui puisse leur arriver. Il serait vraiment dommage de s'en priver...
Dans cette partie, nous allons reprendre notre premier exemple (multiples fichiers JS externes) mais en encodant l'appel à la fonction affiche() avec fromCharCode(), puis nous allons dans la partie HTML créer un faux formulaire avec de fausses valeurs <INPUT>. Celui-ci sera invisible aux utilisateurs de votre site car caché dans des styles 'DISPLAY:NONE', mais bien visible aux spambots. Quant au vrai formulaire, il ne sera visible qu'aux utilisateurs ayant un navigateur digne de ce nom. En postant les données via ce formulaire bidon, le spammeur va tout simplement se piéger lui-même et sera blacklisté ou redirigé ailleurs:
Partie HTML:
<html>
<head>
<script language="JavaScript" src="form_01.js" type="text/javascript"></script>
<script language="JavaScript" src="form_02.js" type="text/javascript"></script>
<script language="JavaScript" src="form_03.js" type="text/javascript"></script>
</head>
<body>
...
<!-- affiche le vrai formulaire en encodant "<script>affiche();</script>" -->
<script>
document.write(String.fromCharCode(60,115,99,114,105,112,116,62,97,102,102,105,99));
document.write(String.fromCharCode(104,101,40,41,59,60,47,115,99,114,105,112,116,62));
</script>
..
..
<!-- formulaire pour les spambots -->
<div style="display:none;">
<form method=post action=piege.pl>
Nom:<input type=text name=nom>
Email:<input type=text name=email>
Commentaires:<textarea name=comment></textarea>
<input type=submit value='Poster'>
</form>
</div>
Le script peut simplement renvoyer le spambot sur localhost pour lui faire perdre encore un peu plus de son temps.
piege.pl:
#!/usr/bin/perl
use CGI;
$QUERY = new CGI;
print $QUERY->redirect(-url => "http://127.0.0.1");
exit;
II - Forums :
La protection d'un gros forum peut sembler plus complexe car l'utilisation de petites astuces (JS, CSS...) n'est généralement pas envisageable. Fort heureusement, là encore, forcer la compression gzip est généralement suffisant.
Voici un exemple avec le forum Yaab et un redoutable bot utilisé par les spammeurs : XRumer. Ce bot est capable de poster des centaines de spams, d'ouvrir des comptes utilisateurs si nécessaire et même de casser certains CAPTCHA. Cependant, il ne prend pas en charge la compression gzip. La capture d'écran ci-dessous (XRumer version 5.05 Palladium demo) montre clairement son impuissance dès lors que force-gzip est activé :
L'activation de force-gzip doit se faire pour le script principal (visualisation et envoi des messages), en l'occurence YaBB.pl dans le cas du forum Yabb, et afin de laisser les crawlers indexer les messages, ceux-ci sont simplement ajoutés avec la directive BrowserMatch qui elle, annulera la compression gzip si nécessaire en activant la variable no-gzip .
Fichier apache2.conf (ou httpd.conf) :
# Active gzip pour les fichiers suivants (les pages seront
# compressées uniquement si le navigateur prend en charge gzip) :
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/x-javascript
# Force la compression gzip en cas d'appel au script du forum :
SetEnvIf Request_URI YaBB.pl force-gzip
# Désactivation si moteurs de recherche :
BrowserMatch "Googlebot" no-gzip
BrowserMatch "Yahoo\!" no-gzip
BrowserMatch "msnbot\/" no-gzip
BrowserMatch "Twiceler" no-gzip
BrowserMatch "Ask Jeeves" no-gzip
BrowserMatch "Gigabot" no-gzip
BrowserMatch "VoilaBot" no-gzip
Relancez Apache.
Méthodes à eviter:
Si, comme on vient de le voir, des méthodes très simples peuvent suffir pour éviter les spams de commentaires, d'autres sont à proscrire car totalement inutiles face aux spambots:
-vérification du referer (HTTP_REFERER): les spammeurs peuvent forger celui-ci et vous faire croire qu'ils viennent de n'importe quel endroit, y compris de votre page de commentaires.
-les cookies: un spambot peut très facilement accepter tous les cookies que vous lui donnerez et vous les retourner à chaque fois que vous les lui demanderez (il suffit juste de 5 ou 6 lignes de code pour le faire).
-bloquer les IP à long terme: si vous bloquez les IP, ne les bloquez pas plus de quelques heures car les spammeurs utilisent des proxies et vous risqueriez de vous retrouver rapidement avec de très longues listes d'IP ne servant pas à grand chose sauf à ralentir terriblement votre site car le fichier .htaccess et des modules comme mod_rewrite ne sont pas réputés pour leur rapidité et ne sont pas fait pour gérer des centaines de lignes de code.
Autres articles : Linux, Securite, antispam, spam, firewall, DDoS, attaque, reseaux, protection, iptables