Come "normalizzare" un file html?

1

Dato un file HTML, il cui contenuto è stato generato da vari siti web, potrebbe avere potenziali problemi di sicurezza, come:

<script>alert("XSS alert!")</script>

Q: Che cosa possiamo fare per "cancellare" questo file HTML? Esegui a:

sed '/<script/d'

più volte? (il " <script " potrebbe essere nascosto in HTML, come: " &lt;script ")

    
posta newuser999 23.09.2013 - 12:56
fonte

2 risposte

3

Poiché l'HTML è stato assemblato da fonti eterogenee, è probabile che non ti interessino gli script che potrebbe contenere. Quindi il tuo approccio mi sembra praticabile.

Credo che l'approccio più pratico e gestibile sarebbe quello di creare un elenco di tag e attributi HTML consentiti (è probabile che tu non voglia, più che semplicemente bisogno , Codice CSS; quindi gli attributi id , style e class possono essere scartati del tutto). Tag come IFRAME e attributi come onfocus molto probabilmente non saranno inclusi nell'elenco.

Una volta ottenuto questo, è possibile eseguire il codice HTML tramite un parser che eliminerà eventuali tag e attributi sconosciuti. Puoi farlo in due fasi, un pulitore "tagoup" (HTML Tidy o TagSoup o HTMLClean o BeautifulSoup - proverei prima HTML Tidy) e un parser HTML completo.

In questo modo ti ritroverai con un codice HTML ben formato e con una cornice che può essere manipolato molto meglio e in maggiore sicurezza.

Eviterei di associare regexp a meno che non abbia davvero avuto altra alternativa.

    
risposta data 23.09.2013 - 15:50
fonte
1

Il problema con l'approccio sed è questo input malevolo: <scr<script>ipt> . (Applica la tua sed e guarda cosa esce.) Se cerchi solo di disinfettare le cose cattive, i cattivi lo troveranno. Invece, è molto più sicuro che una volta riconosciuto l'input errato, ti rifiuti di accettarne uno.

Anche più sicuro è una lista bianca.

    
risposta data 23.09.2013 - 21:23
fonte

Leggi altre domande sui tag