[Précédent (date)] [Suivant (date)] [Précédent (sujet)] [Suivant (sujet)] [Index par date] [Index par sujet]
Re: Filtrage de q.c.o.l.aide (du CODE)
J'ai un squelette de module. Ou plutot de moduleS (diviser pour régner!)
J'ai supposé qu'il était plus logique de décomposé en 2 le travail :
identifier les requetes provenant d'url louche (normalement pas toute les
requetes), et filtrer l'affichage (fait systématiquement à toutes les
requetes).
J'ai fait beaucoup de suppostion sur la configuration et le fonctionnement
du serveur. Qui peux me donner la bonne piste pour ces infos? Et qui
s'occupe des installations sur le serveur?
Désolé si c'est gros, long, et que ca assomme certains, mais je joins
in-texto le code que j'ai fais. Merci de vos commentaires/patch.
Oh, et derniere note : comme je n'ai pas de setup pour tester
rigoureusement mon code et qu'il manque de toute facon de tres gros outs
dans la logique, je n'ai pas testé du tout. ;oP Alors, y'a p't'etre des
coquilles ou des ; qui manquent.. ;o)
Si quelqu'un veut les .pm en attachement, m'écrire.
j'attends vos commentaires...
Le code ;
- - - - - - 8<- - - -
#!/usr/bin/perl
package LQ::AntiParasite;
######################################################################
# LQ::AntiParasite
=head1 NAME
LQ::AntiParasite - Module Perl de redirection pour les pseudos-pirates.
=head1 SYNOPSIS
Dans le httpd.conf
PerlModule LQ::AntiParasite
PerlTransHandler LQ::AntiParasite
=head1 DESCRIPTION
Handler mod_perl ayant pour but d'afficher un avertissement aux
visiteurs qui se sont vraisembleblement trompé de place.
On y configure une liste d'URL "suspect" et de mots-clés de moteur
de recherche "suspect" (TODO) et on redirige vers une page d'avertissement.
Cette page est en fait un URI virtuel qui est géré par LQ::Avertissement.pm.
Ce module va simplement afficher une page d'avertissement qui permettra à
un usager
légitime de continuer son chemin et de voir la page souhaité.
# ## anti-parasites
# - vérifier le $ENV{HTTP_REFERER} pour voir si ça correspond au
# top 10 dans http://linux-quebec.org/stat/
#+ si oui, afficher un message en html avertissant que ce site
# ne porte pas sur le piratage, mais le système d'exploitation
# Linux, pour plus d'infos, voir tel lien, etc.
# (Personnellement, j'afficherait quand même la page demandée,
# juste au cas où..)
=head2 EXPORT
Aucun.
=head1 AUTHOR
Benoit Caron (holstein AT lavache.com)
=head1 LICENSE
Ce code est sous license GPL (http://www.gnu.org/licenses/gpl.txt). Vous êtes
libre d'en faire ce que vous voulez (mais vous seriez gentil de me le dire si
vous le faites! ;o)
=cut
#'##
use strict;
use Apache::Constants qw(:redirect);
# Configurable
$LQ::AntiParasite::URI_PAGE_AVERTISSEMENT = "/liste/avertissement.html";
# "privé"
my %referer, %keyword;
# Handler - la porte d'entrée
sub handler {
my $r = shift;
if (estUneRequeteLouche($r)){
# redirection vers la page d'avertissement
$r->uri($URI_PAGE_AVERTISSEMENT);
$r->args("orig=$origURI");
return REDIRECT;
}
# On laisse la chance à d'autre module de cette phase de retoucher l'URI
return DECLINED;
}
######################################################################
# estUneRequeteLouche
# retourne 1 (vrai) si l'url est louche, 0 (faux) sinon.
sub estUneRequeteLouche {
my $r = shift;
$ref = $r->header_in("Referer") || return 0; # Pas de referer. P-etre
louche, mais dur de savoir.
if (exists $referer{$ref}){
# le referer est considéré louche. On observe s'il est dans la liste
des pirates
if ($referer{$ref} eq 'pirate'){
return 1;
} elsif ($referer{$ref} eq 'search'){
# engin de recherche. Examen des mots clés
my @termes = stripSearchString($ref);
my $score = 0;
foreach my $t ( @termes) {
$score++ if (exists $keyword{$t});
}
if ($score >= (@termes * 2/3)){
# FIXME : quel critere pour rejeter ? recherche exacte? 2/3 des termes
(comme j'ai fait
# ici)?
return 1;
}
} else {
# FIXME - comportement par défaut = rejet?
return 1;
}
}
return 0;
}
######################################################################
# Charchement des Referer potentiellement louche.
# FIXME : j'assume qu'on aurait un fichier de chargemetn du genre
# urlLouche[ ; type]
# ou [type] est optionnel, et peut prendre des valeurs du genre "search" pour
# un engin de recherche (d'ou examen des keyword), pirate pour un site de
pirate
# (et donc rejet automatique) etc.
sub loadRefererLouche {
warn "TODO!";
}
######################################################################
# Charchement des Keyword potentiellement louche
sub loadKeywordLouche {
warn "TODO!";
}
sub stripSearchString {
warn "TODO!";
return qw | des mots clés louche | ;
}
------8<----------------------------------------------------------------
#!/usr/bin/perl
package LQ::AntiSpam;
######################################################################
# LQ::AntiSpam
=head1 NAME
LQ::AntiSpam - Module Perl de filtrage des archives mails
=head1 SYNOPSIS
Dans le httpd.conf
PerlModule LQ::AntiSpam
PerlHandler LQ::AntiSpam
=head1 DESCRIPTION
Handler mod_perl ayant pour but de filtrer les documents retournés
aux usagers pour rendre plus difficile le travail des spammers.
TODO (d'apres Mathieu Lutfy ):
## anti-spam
- imprimer la page demandée, pour chaque ligne:
+ substituer les "[email protected]" qui sont dans un A HREF par
"foo à bar.com", modifier le "on mouse over" pour qu'il appelle
une fonction javascript qui décode l'adresse
(quoique, à priori, c'est pas si important..)
+ voir: http://innerpeace.org/escrambler.shtml (URL qu'Alexandre
m'avait envoyé, pourrait être une bonne source d'inspiration)
=head2 EXPORT
Aucun.
=head1 AUTHOR
Benoit Caron (holstein AT lavache.com)
=head1 LICENSE
Ce code est sous license GPL (http://www.gnu.org/licenses/gpl.txt). Vous êtes
libre d'en faire ce que vous voulez (mais vous seriez gentil de me le dire si
vous le faites! ;o)
=cut
use strict;
use Apache::Constants qw(:redirect);
# Handler - la porte d'entrée
sub handler {
my $r = shift;
# Ouverture du fichier demandé
# Boucle le fichier. On y remplace :
# - les emails ([email protected]) par xx à YYY POINT ZZZ
return OK;
}
----8<------------------------------------------------------------------
#!/usr/bin/perl
package LQ::Avertissement;
# Handler - la porte d'entrée
sub handler {
my $r = shift;
# Ouverture du fichier de "template" d'avertissement
# Impression + ajout du lien vers l'URI souhaité au départ
return OK;
}