
Per comprendere il funzionamento dei filtri, per scriverli o
modificarli,
occorre una conoscenza di base della struttura della pagina
web
e del suo codice. Preferibile avere anche conoscenza
dell'html, dei
CSS ed anche un po' di linguaggio
javascript.
In questa
pagina ho realizzato una guida di base per iniziare a scrivere
alcuni semplici filtri html.
Prossimamente inserirò una guida anche per la scrittura dei filtri HTTP.
Un documento html è un
file di testo composto di una serie di elementi chiamati TAG
e dai
relativi attributi.
Questi TAG generano delle istruzioni che
permettono al browser di riprodurre testi, suoni, animazioni,
immagini, etc.
Ogni TAG è racchiuso dai segni minore "<" e maggiore ">" e la sintassi è per esempio <object>, dove object è il nome del comando che s'impartisce (in questo caso è un controllo ActiveX).
Gli elementi o tag, devono sempre
essere
sempre chiusi (salvo pochi casi come le immagini) e la sintassi
è la stessa di quella d'apertura, con inserita una barra.
Come
nell'esempio precedente, il tag di chiusura diventa
</object>.
Il
filtro di Proxomitron cerca
l'elemento da modificare, sostituire, eliminare e tutto il suo
contenuto (*),
fino
a
che non incontra il tag di chiusura </tag>.
La
comprensione di
questo meccanismo è molto importante per la scrittura dei
filtri di Proxomitron.
I filtri si scrivono utilizzando l'editor presente nel programma ed il cui funzionamento è spiegato alla pagina Editor dei filtri.
Per vedere la struttura ed il codice con i TAG di una pagina web, occorre salvarla come 'Pagina web completa' o 'Solo HTML' (vale per qualsiasi navigatore) e poi aprirla con il Blocco note.
Le parti del codice, con i relativi TAG, che possiamo filtrare sono:
A
questo punto, dalla Pagina principale
del programma, cliccate sul
pulsante
Web page per aprire l'editor.
Iniziate
a scrivere il filtro, compilando i riquadri nell'editor, seguendo
questa sequenza:
Filter
Name
Si scrive il nome che si vuole dare al
filtro.
È
il nome che apparirà
nella finestra delle pagine html, e non ha
incidenza sul
funzionamento del filtro.
URL Match
Qui si può
decidere se limitare l'impiego
dei
filtri ad una determinata pagina (senza
anteporre
http://.), ad indirizzi (URL) oppure a tutti i file html, per esempio:
Una pagina
nome.dominio.com/pagina.html
Indirizzo
URL
([^/]
++.|) dominio.com/
I tipi di file html
$TYPE(htm)
- $TYPE(css) - $TYPE(vbs)
- $TYPE(js)
Nota: Se volete utilizzare
il filtro per tutti i file HTML indistintamente, allora scrivete $TYPE(htm).
Potete
anche
integrare questo campo con le Liste, ad
esempio: ($TYPE(htm)(^$LST(ActiveXBypass))
Allow
for multiple matches
Quest'opzione,
che chiameremo brevemente Multi,
permette a
diversi filtri
di agire sullo
stesso TAG html.
Quando un filtro
incontra un TAG, è prioritario e non permette ad altri
filtri di agire sul risultato del lavoro già svolto.
Abilitando
Multi, lo stesso codice è controllato sempre da
tutti i filtri, anche se già filtrato dal primo incontrato
della serie.
NB: Se nel vostro set di filtri, ne sono presenti
due o più che lavorano sullo stesso codice, dovete abilitare
la
funzione Multi solo nel primo in sequenza della lista e non sui
successivi.
È
consigliabile comunque ridurre al minimo l'utilizzo di questa funzione.
Se è attivata quando non realmente utile, crea un
rallentamento delle operazioni di filtraggio
perché il codice già modificato o sostituito
è analizzato nuovamente dagli altri filtri.
Bounds Match
Delimita
la
ricerca. Consiste in
generale nell'indicare un tag d'inizio e fine,
es:
<script*</script>
oppure
$NEST(<script,</script>)
Se Proxomitron lo trova, allora prosegue a ricercare quanto indicato in "Matching Expression".
Byte Limit
Indica il
numero di byte che Proxomitron deve percorrere fino a trovare l'inizio
del testo e prima di abbandonare la ricerca.
128 byte minimo
e
poi 256-512-1024-2048-4096 etc.
Il limite
massimo per la versione Naoko 4.5j è 32076.
Matching
Expression
Inserite
qui il testo o l'espressione da ricercare, sostituire od eliminare, es:
*testo contenuto*
Replacement Text
Qui
è possibile inserire il testo di sostituzione
dell'espressione.
Per non inserire il testo, occorre
lasciare vuota la
zona di
sostituzione.
Test
Apre
la finestra di prova che permette di testare i vostri filtri sui codici
html e vedere se funzionano correttamente, come spiegato alla pagina
del Test dei filtri html.
Utilizzando
URL e Bounds Match
Ecco
un esempio di filtro per disabilitare tutti gli script Java, ad
eccezione degli indirizzi contenuti nella lista JavascriptBypass.
Notare
la simbologia (^) che precede
$LST. Indica l'eccezione.
Inserite
nella lista gli URL dove è consentita l'esecuzione degli
script Java.
Filter
Name: Disabilita gli JavaScript
URL
Match: ($TYPE(htm)(^$LST(JavascriptBypass))
Bounds
Match: $NEST(<script,</script>)
Byte
Limit: 8192
Matching
Expression: *
Replacement
Text: <!-- [Rimosso Javascript]
-->
Senza
URL e Bounds Match
Possiamo anche
disabilitare
tutti gli script Java indistintamente.
Filter
Name: Disabilita tutti gli JavaScript
URL
Match:
Bounds
Match:
Byte
Limit: 256
Matching
Expression: <script*>
Replacement
Text: <!-- [Rimosso Javascript]
-->
Come abbiamo già
spiegato a questa pagina,
Proxomitron utilizza dei caratteri speciali o "Metacaratteri" per
definire le caratteristiche di un filtro.
Se il codice che
dovete rimuovere contiene già questi caratteri, dovrete
"bypassarli",
precedendoli con una una barra antislash \.
La
barra indica
a Proxomitron che il carattere che segue non è da
considerare un "Metacarattere" ma un carattere standard.
Il
codice
<a href="http://www.banner.it/">[*clicca
qui]</a>
nel filtro deve essere scritto
così
<a
href="http://www.banner.it/">\[\*clicca qui\]</a>
I
caratteri speciali sono:
^ ? ( ) \
{ } [ ] | +
* &
Un altro semplice sistema per
scrivere i
filtri è di utilizzare e modificarne alcuni
già esistenti.
In questo caso propongo dei
semplici modelli di filtri, pronti da modificare all'occorrenza.
Dovrete
semplicemente inserire il tag del codice da filtrare.
Rimuovere
una proprietà da tutti i tag che la contengono
Per
rimuovere le immagini di sfondo ...
Notate il simbolo di
uguaglianza =
È
importante perchè indica che per applicare il filtro, la
proprietà deve essere realmente presente nei tag e non una
semplice parola contenuta nel testo della pagina.
Byte
Limit: xxxx
Matching
Expression: proprietà=$AV(*)
Replacement
Text: <!-- [Rimossa
proprietà]
-->
Rimuovere
un tag quando presenta un determinato contenuto
Per
bloccare gli Javascript, le animazioni ...
Bounds
Match:
$NEST(<tag,</tag>)
Byte
Limit: xxxx
Matching
Expression: *contenuto*
Replacement
Text: <!-- [Rimosso tag]
-->
Rimuovere
un tag indipendentemente dal contenuto
Per
eliminare le Applet, i tag Noscript, gli Javascript, i controlli
ActiveX ....
Bounds
Match:
$NEST(<tag,</tag>)
Byte
Limit: xxxx
Matching
Expression: *
Replacement
Text: <!-- [Rimosso tag]
-->
Rimuovere
un tag indipendentemente dal contenuto, escluso determinato URL
Per
eliminare le Applet, i tag Noscript, gli Javascript, i controlli
ActiveX ....
URL
Match: ^ (* URL/)
Bounds
Match:
$NEST(<tag,</tag>)
Byte
Limit: xxxx
Matching
Expression: *
Replacement
Text: <!-- [Rimosso tag]
-->
Rimuovere
una proprietà da tutti i tag che la contengono
Rimozione
immagini di sfondo ...
Bounds
Match: proprietà=$AV(*)
Byte
Limit: xxxx
Replacement
Text: <!--
[Rimossa
proprietà] -->
Bloccare
le funzioni
non esplicitamente consentite
Inserire
nella lista gli URL dove è permessa l'esecuzione della
funzione (applet, javascript, cookie, ActiveX, etc.).
URL
Match: ^$LST(Consenti funzione)
Bounds
Match: $NEST(<tag,</tag>)
Byte
Limit: xxxx
Matching
Expression: *specifico contenuto*
Replacement
Text: <!-- [Bloccata funzione]
-->
Bloccare
le funzioni
non consentite per gli URL inseriti nella lista
Inserire
nella lista gli URL dove NON è
permessa
l'esecuzione
della funzione (applet, Javascript, cookie, ActiveX, etc.).
URL
Match: $LST(blocca funzione)
Bounds
Match: $NEST(<tag,</tag>)
Byte
Limit: xxxx
Matching
Expression: *specifico contenuto*
Replacement
Text: <!-- [Bloccata funzione]
-->
Rimuovere
una proprietà da uno specifico tag
Per
modificare
le tabelle ...
Multi: TRUE
URL
Match: <tag\s*>
Byte
Limit: xxxx
Matching
Expression: \1
(proprietà=$AV(*)\2|)
Replacement
Text: \1\2