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.
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