[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;
}