2016-08-31 54 views
5

在我的項目中,我使用'轉義'作爲消毒價值策略。我在某個地方使用translate指令(屬性)。我正在使用一些其他地方翻譯過濾器。XSS in Angular Translate Directive

隨着指令:

<span translate="{{vm.text}}"><span> 

這是vulnarable XSS攻擊。如果vm.text的值是<script>alert()</script>,那麼腳本將被執行並顯示彈出窗口。

與過濾

<span>{{vm.text | translate}}<span> 

vm.text值逃脫和HTML顯示爲&lt;script&gt;alert()&lt;/script&gt;

在角翻譯文檔(https://angular-translate.github.io/docs/#/guide/19_security)他們建議使用 '逃離' 作爲了sanitize值策略說'目前有一個衛生模式的問題,它將雙重編碼UTF-8字符或特殊字符。建議:使用'逃生'策略,直到解決此問題'。

是否有正確的方式顯示HTML爲<script>alert()</script>而不執行它?

+0

我發現使用過濾器時它正確地轉義,但不會逃避這種攻擊:#/ {{{}。「))); alert(1)//」;}}使用該指令將正確地轉義這種攻擊,但在你說明的腳本攻擊中失敗。所以對我來說這是翻譯庫中的一個大漏洞。 – Gurnard

回答

0

與過濾器(管道),你總是可以綁定到元素textContent屬性,像這樣:

<span [textContent]="vm.text | translate"></span>

無需手動轉義或過濾必要的,因爲沒有什麼的textContent是不斷AFAIK解析。

+0

這是什麼版本的角? – Gurnard