2013-12-12 8 views

答えて

8

HtmlEscapedart:convertから使用してください。

import 'dart:convert' show HtmlEscape; 

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

    var sanitizer = const HtmlEscape(); 

    print(sanitizer.convert(unsafe)); 
} 

上記のアプリのプリント:

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

デフォルトの動作は、アポストロフィをエスケープすることです、大なり/小なり、引用符、およびスラッシュ。

エスケープするものを制御する場合は、HtmlEscapeModeの新しいHtmlEscapeを作成できます。例えば

、唯一の大なり/小なりとスラッシュエスケープし、これを試してみてください。

var sanitizer = const HtmlEscape(HtmlEscapeMode.ELEMENT); 

を忘れないでください、彼らはHTMLに入る前に、ダートは自動的に文字列をサニタイズ。したがって、HTMLスクリプトを手動でエスケープする必要はありません。安全でない文字列でelement.setInnerHtmlを呼び出すと、それは消毒されます。

+1

逆に、HTMLエンティティを含む文字列を解析し、クリーンな文字列を取得しますか?実装されていないようです:https://code.google.com/p/dart/source/browse/branches/1.6/dart/sdk/lib/convert/html_escape.dart –

+1

** Element.setInnerHtmlがサニタイズするという事実デフォルトでは一般的に、出力をエスケープする必要はありません。**サニタイザーはXSSからあなたを守りますが、出力をエスケープするのは忘れてしまいますが、依然として不正な形式の出力が生成されます。正しい動作のためにはまだエスケープする必要があります。消毒剤は安全網である。 また注意する価値があります。サニタイザーをバリデーターに置き換えることができます。バリデーターは、出力を静かにマングリングするのではなくエラーを引き起こします。 a)プログラムのエラーを警告し、b)エスケープを忘れていることを明白にしないため、これが望ましいかもしれません。 – ngroot

関連する問題