2010-07-04 4 views
6

Il mio obiettivo è prendere HTML immesso dall'utente finale, rimuovere determinati tag non sicuri come <script> e aggiungerlo al documento. Qualcuno sa di una buona libreria Javascript per disinfettare l'html?È disponibile una buona libreria di analisi HTML basata su Javascript?

Ho cercato in giro e trovato un paio online, tra cui John Resig's HTML parser, Erik Arvidsson's simple html parser, e Google's Caja Sanitizer, ma non sono stato in grado di trovare molte informazioni sul fatto che le persone hanno avuto buone esperienze con queste librerie, e io sono preoccupato che non sono abbastanza robusti da gestire l'HTML arbitrario. Farei meglio a inviare l'HTML al mio server Java per la sanificazione?

+4

Visto che è meglio disinfettare sul lato server, potrebbe non valerne la pena. A meno che il tuo disinfettante lato client non dia sempre gli stessi risultati del tuo lato server senza errori, probabilmente non ne vale la pena. –

risposta

2

È possibile analizzare HTML con jQuery, ma sono abbastanza sicuro che qualsiasi approccio basato sulla blacklist (ovvero l'eliminazione dei filtri) per l'igienizzazione sta per fallire - probabilmente è necessario un approccio basato sul "filtraggio in" e alla fine non si desidera comunque fare affidamento su JavaScript per sicurezza. In ogni caso per riferimento è possibile utilizzare jQuery per DOM-analisi come questo:

var htmlS = "<html>etc.etc."; 
$(htmlS).remove("script"); /* DONT RELY ON THIS FOR SECURITY */ 
+0

Buon punto. Infatti, probabilmente non hai * bisogno * del wrapper jQuery, di per sé, ma renderebbe le cose più facili. Lascia che sia il browser a gestire l'analisi, quindi utilizza i metodi DOM disponibili per fare ciò che vuoi. – Matchu

+3

La mente spiega come? – icktoofay

+0

@icktoofay yep modificato my bad –

2

Sarei meglio solo inviare il codice HTML al mio server Java per sanificazione?

Sì.

Il filtraggio dell'input "non sicuro" deve essere eseguito sul lato server. Non c'è altro modo per farlo. Non è possibile fare il filtraggio lato client perché il "client-side" potrebbe essere un browser web o potrebbe facilmente essere un bot con uno script.

+2

Filtraggio di input non sicuri, sì, che deve essere fatto sul server perché il client può danneggiare gli altri utenti non facendo il filtraggio che si suppone di fare. Tuttavia, si sta filtrando un output non sicuro e un client che non filtra si danneggerà solo. Pertanto, fare questo con Javascript va bene. –

+0

@bart "un client che non filtra fa male solo a se stesso, quindi fare ciò con Javascript va bene" <- questo non è completamente vero in quanto un utente compromesso potrebbe avere l'accesso ad altri utenti –

+0

Un utente compromesso può fare tutti i tipi di cose cattive. Se si escludono i tag di script sul server, verranno semplicemente rimessi al loro posto durante il rendering. O più probabilmente, non si preoccuperà di questo inconveniente ed eseguirà direttamente il codice malvagio. –