Privoxy: come impostare i filtri ( filter file ) | ALTRI capitoli | |||
Privoxy è un programma proxy, un programma cioè che si interpone tra il nostro computer, il client, e tutti i server esterni ai quali il client invia una richiesta HTTP o HTTPS. Da Privoxy, quindi, passano sia tutte le nostre richieste HTTP o HTTPS, sia tutte le risposte, comprese le pagine web ( internet ), inviate dai vari server, in seguito alle nostre richieste. In Privoxy, è possibile effettuare sostituzioni di intere porzioni di testo, di una pagina web oppure di un header HTTP, al fine di modificarne il contenuto. Le regole per la sostituzione del testo ( filtri ) devono essere definite in un file dei filtri ( "filter file" ). Una volta definito un filtro, all'interno di un file dei filtri, sarà possibile attivarlo, invocandolo, come "azione", da uno dei file delle azioni. Privoxy supporta tre differenti tipi di filtro:
È possibile definire più file dei filtri, utilizzando la direttiva
Il primo file,
Le sostituzioni vengono fatte a livello di sorgente: per creare i propri filtri, quindi, è necessario conoscere lo HTML e, soprattutto, le espressioni regolari. Anche i file dei filtri, come i file delle azioni, sono organizzati in sezioni, chiamate, in questo caso, filtri. Un filtro è composto da una riga di intestazione, che inizia con una delle seguenti parole chiave:
seguita dal nome del filtro, per esempio:
seguito, a sua volta, da una breve descrizione ( una sola riga ) del suo compito. Per esempio:
Nelle righe successive, troveremo le sostituzioni testuali da effettuare, specificate come espressioni regolari, nella sintassi usata dal linguaggio di programmazione Perl:
Se avete familiarità con le espressioni regolari di Perl, quindi, dovreste trovare i file dei filtri quasi intuitivi e potreste voler dare un'occhiata alla documentazione PCRS ( Perl-Compatible Regular Expression ), per vedere le leggere differenze esistenti tra le espressioni regolari usate in Privoxy e quelle utilizzate in Perl. Vediamo, ora, un esempio concreto dell'uso dei file dei filtri: desidero modificare l'header HTTP USER-AGENT, in modo che il browser Mozilla diventi il browser Godzilla. Apro, con un editor di testo, il file dei filtri riservato all'utente:
Scrivo il mio filtro:
Salvo le modifiche e chiudo il file. Attenzione: per fare queste modifiche avrò bisogno dei privilegi di root. Ora, non mi resta che aprire, in scrittura, il file delle azioni riservato all'utente:
e definire l'azione che richiamerà il filtro appena creato, il cui nome è: Agent:
In questo esempio, avremo i LOG dei server di
È bene ricordare che, modificando alcuni header HTTP, è possibile che alcuni siti web neghino l'accesso al sito, quantomeno alle sue sezioni protette. Questo può accadere quando il nuovo header si presenta come smaccatamente fittizio, come nel nostro esempio. Spesso, questo rifiuto è silenzioso, nel senso che la pagina web non risponderà agli input dell'utente, senza che venga data alcuna spiegazione. Completiamo, intanto, l'esempio precedente, quello del filtro chiamato "foo". Abbiamo già definito l'intestazione: quello che manca è il comando che dica a Privoxy di sostituire tutte le occorrenze di "foo" con la sequrenza "bar". Ecco la riga che serve:
In linguaggio Perl, quella
Vediamo, ora, qualche filtro preso dalla realtà, che dovrebbe risultare molto più interessante. Vediamo un filtro che protegge contro le più comuni noie che l'abuso di Javascript può comportare:
Dopo l'intestazione, ecco l'espressione regolare. La prima cosa che salta all'occhio è che questa espressione regolare utilizza, come delimitatore, il carattere "pipe" (
Il punto, nelle espressioni regolari, indica la presenza di un qualsiasi carattere, mentre l'asterisco, immediatamente successivo, è un quantificatore che indica: un numero qualsiasi del carattere immediatamente precedente. Quindi, l'espressione racchiusa tra le due parentesi, se non seguita dal alcun altro elemento, potrebbe rappresentare l'intera pagina, a partire dal testo
Quindi, il vero significato dell'intero pattern è: riscontra l'intero testo che inizia e finisce con le due tag:
fatto salvo che, in mezzo alla stringa testuale, appaia, in un punto qualsiasi, anche la sequenza testuale:
Ma non è tutto! La nostra espressione regolare contiene anche due sottostringhe, ciascuna delle quali racchiusa tra due parentesi tonde, ed una serie di tre opzioni:
Le porzioni di testo che coincidono con un subpattern compreso tra due parentesi vengono, normalmente, memorizzate nelle variabili:
in modo da poterle riutilizzare immediatamente dopo. L'opzione
alla prima occorrenza della stringa di testo immediatamente successiva:
e non all'ultima, come farebbe se venisse impostato il cosiddetto riscontro "greedy" ( ingordo ). Il motore ingordo, insomma, tende a mangiarsi il testo più lungo, che soddisfi le condizioni poste dal pattern, mentre il motore non ingordo tende a mangiarsi il testo più breve. Il modificatore
Memorizza le parti del testo comprese tra le due parentesi nelle due variabili
che è come dire:
che corrisponde a dire: sostituisci la sequenza testuale:
posta all'interno di due TAG
Lo scopo di questo filtro, quindi, è di eliminare la variabile Javascript che si trascina il valore del REFERER. Vediamo, ora, altri due esempi di un certo interesse:
La sequenza
quindi, significa: "zero o più caratteri spazio". Il punto interrogativo,
imposta il cosiddetto riscontro "ungreedy" ( non ingordo ). Da notare che l'opzione U non è attiva. Il costrutto:
indica la presenza di una virgoletta singola oppure di una virgoletta doppia. Infine, la sequenza:
rappresenta una cosiddetta "back-reference", un riferimento alla prima sequenza di caratteri contenuta tra due parentesi tonde, proprio come
Quando la back reference è presente nel pattern, si scrive
Inserire un evento OnUnload in un documento HTML DOM ( Document Object Model ) è sempre stato un CRIMINE. Quando chiudo una finestra del browser, voglio solo che si chiuda. E basta! Questo filtro sostituisce l'attributo "onunload" nella TAG
invece della sequenza:
per evitare che, nel caso la TAG
Da notare la parte:
che significa: non riscontrare se la stringa I filtri predefiniti sono contenuti nel file
Lo scopo di questo filtro, complementare all'azione
Da usare con prudenza, visto che si tratta di un filtro molto aggressivo, che potrebbe rendere inaccessibili le pagine web fortemente fondate su JavaScript.
Ecco un filtro che attua un intervento radicale su tutti gli eventi JavaScript, impedendo agli script di reagire ai movimenti del mouse o ai click dell'utente, oltre ai tentativi di ridimensionamento della finestra del browser. Da usare con cautela! Questo filtro sarebbe da attivare solo per quei siti web particolarmente pericolosi: per la navigazione usuale in rete, questo filtro sarebbe da evitare, visto che bloccherebbe anche gli script legittimi ed innoqui.
Questo filtro bloccherà molti abusi fondati su HTML. Le TAG HTML: BLINK e MARQUEE vengono neutralizzate, le finestre del browser potranno essere ridimensionate ( come dovrebbe essere sempre!), avranno un loro indirizzo di riferimento ( location ) ed avranno le barre di scorrimento e di menù, anche se impostate diversamente.
|
||||
Privoxy: come impostare i filtri ( filter file ) | Le guide di .bit: contenuto originale |