2013-12-12 22 views

risposta

8

Utilizzare HtmlEscape da dart:convert.

import 'dart:convert' show HtmlEscape; 

void main() { 
    var unsafe = 'Hello <script>world</script>'; 

    var sanitizer = const HtmlEscape(); 

    print(sanitizer.convert(unsafe)); 
} 

Le stampe sopra app:

comportamento
Hello &lt;script&gt;world&lt;&#x2F;script&gt; 

il valore predefinito è di sfuggire apostrofi, di maggiore/minore di, citazioni e barre.

Se si desidera controllare ciò che è sfuggito, è possibile creare un nuovo HtmlEscape con un HtmlEscapeMode.

Ad esempio, per sfuggire solo di maggiore/minore di e barre, provate questo:

var sanitizer = const HtmlEscape(HtmlEscapeMode.ELEMENT); 

Ricordate, Dart disinfetta automaticamente le stringhe prima che entrino in HTML. Quindi potrebbe non essere necessario sfuggire manualmente allo script HTML. Se chiami element.setInnerHtml con una stringa non sicura, verrà disinfettato.

+1

E quale sarebbe il contrario: analizzare una stringa contenente entità HTML e ottenere la stringa pulita? Non sembra essere implementato: https://code.google.com/p/dart/source/browse/branches/1.6/dart/sdk/lib/convert/html_escape.dart –

+1

** Il fatto che Element.setInnerHtml disinfetti di default generalmente non significa che non è necessario sfuggire all'output. ** Il disinfettante ti proteggerà (si spera) da XSS _if_ ti dimentichi di sfuggire al tuo output, ma produrrà comunque output malformati. Hai ancora bisogno di fuggire per un comportamento corretto; il disinfettante è una rete di sicurezza. Vale anche la pena notare: è possibile sostituire il disinfettante con un validatore, che causerà un errore piuttosto che silenziare silenziosamente l'output. Ciò potrebbe essere desiderabile, in quanto a) ti avviserà di un errore nel tuo programma eb) non renderà evidente che hai dimenticato una fuga. – ngroot

Problemi correlati