2013-12-12 46 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; 

默認行爲是逃避撇號,大於/小於,報價和斜槓。

如果您想控制什麼是轉義,您可以創建一個新的HtmlEscapeHtmlEscapeMode

例如,爲了躲避只,大於/小於和斜槓,試試這個:

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