Dirty and Quickie deep linking prevention

rouvas at di.uoa.gr rouvas at di.uoa.gr
Sat Sep 26 00:28:46 EEST 2009


George Notaras wrote:
> rouvas at di.uoa.gr wrote:
>> Christos Ricudis wrote:
>>> Exete bare8ei na linkarei olo to sympan to directory sas me tis
>>> 452973493 lolcats apo diafora hli8ia forums?
>>>
>>> Taiste tous ena Cthulhu Goatse!
>>>
>>> mod_perl required. Modify it to suit your site.
>>>
>>> apache.conf :
>>>
>>> PerlModule Perlomodula::Taisthri
>>> PerlTransHandler Perlomodula::Taisthri
>>>
>>> Taisthri.pl :
>>>
>>> package Perlomodula::Taisthri;
>>>
>>> use strict;
>>> use Apache2::RequestRec ();
>>> use Apache2::Log ();
>>> use APR::Table ();
>>> use Apache2::Const -compile => qw(DECLINED);
>>>
>>> sub handler {
>>>   my $r = shift;
>>>
>>>   my $kot=$r->uri();
>>>   my $lala=$r->headers_in->{Referer} || '';
>>>   my $isimage=0;
>>>   my $islinked=0;
>>>
>>>   if
>>> (!($lala=~m/.*(localhost|myserver|127.0.0.1|192.168|mydomain.com).*/i))
>>> {
>>>     $islinked=1;
>>>   }
>>>
>>>   if ($kot=~m/(.*)\/pictures\/lolcats\/(.*)\.jpg/i) {
>>>     $isimage=1;
>>>   }
>>>
>>>   if (($islinked==1)&&($isimage==1)) {
>>>     $r->uri("/cthulhu-goatse.jpg");
>>>     $r->log_error("Bad referer $lala linked to $kot, fed him a
>>> goatse-cthulhu");
>>>   }
>>>
>>>   return Apache2::Const::DECLINED;
>>>
>>> }
>>> 1;
>>>
>>
>> Ginetai kai me to mod_rewrite tou Apache, kapos etsi:
>>
>> <IfModule mod_rewrite.c>
>>   RewriteEngine On
>>
>>   RewriteCond %{HTTP_REFERER} .*myspace.*
>>   RewriteRule  .*                 /dont-link-to-me  [G]
>>
>>   RewriteCond %{HTTP_REFERER} .*hi5.*
>>   RewriteRule  .*                 /dont-link-to-me  [G]
>>
>>   RewriteCond %{HTTP_REFERER} .*youtube.*
>>   RewriteRule  .*                 /dont-link-to-me  [G]
>> </IfModule>
>>
>> sto .htaccess tou directory.
>>
>
> Με αυτό όμως πιάνεις όλα τα links από τα παραπάνω sites...

Αυτός δεν ήταν ο στόχος;

>
> Το παρακάτω είναι νομίζω καλύτερο και επιστρέφει και πιο χρήσιμο error
> code:
>
> <IfModule mod_rewrite.c>
>   RewriteCond %{HTTP_REFERER} !^http\:\/\/DOMAIN\.TLD\/
>   RewriteRule \.(jpg|jpeg|png|gif)$ http://DOMAIN.TLD/stopleeching.html
> [R=302,L]
> </IfModule>
>
> Δεν είμαι σίγουρος ότι χρειάζεται escaping o referrer.

Μου φαίνεται ότι το [G] γυρνάει 410 που σημαίνει "Gone", ενώ το 302
σημαίνει "Found". Θεωρητικώς, αν το "βρει" (το .jpg) (302) δεν έχει λόγο
να σταματήσει να το "ζητάει" οπότε θα συνεχίσουν να έρχονται αιτήσεις προς
το resource σου στον server *σου* που θα πρέπει να αναλώσει πόρους να τις
εξυπηρετήσει.

Αντίθετα, εάν η απάντηση είναι αρνητική ως προς την ύπαρξή του (410=Gone),
θεωρητικώς πάλι, οφείλει να μην σε ξαναενοχλήσει. Οπότε τη γλυτώνει ο
server σου.

Πρακτικώς τώρα, καθώς μου έτυχε να δέχομαι χιλιάδες hits την ώρα προς
συγκεκριμένες εικόνες, δε νομίζω ότι λαμβάνει κανείς(=λογισμικό) υπόψη του
ότι και να του γυρίσεις. Η κατάσταση διορθώθηκε όταν άλλαξε URL στις εν
λόγω εικόνες.

-Στάθης

>
>
>
>




More information about the Linux-greek-users mailing list