我有一個翻譯鍵,它實際上是一個HTML代碼,既編碼也不編碼。角度翻譯指令vs過濾器:XSS可能嗎?
$scope.translations = {
"html_code" : "<script>alert('Alert!');</script>",
"html_code_full" : "<script>alert('Alert!');</script>",
"greeting" : "Welcome!"
}
當我使用這些值顯示在視圖中的翻譯文本,我使用兩種方法:
- 作爲指令
<span translate>{{translations.html_code}}</span>
- 作爲過濾
{{translations.html_code|translate}}
我嘗試同樣的爲translations.html_code_full
。 下面是視圖代碼:
translations.html_code = {{translations.html_code|translate}}
translations.html_code = <span translate>{{translations.html_code}}</span>
translations.html_code_full = {{translations.html_code_full|translate}}
translations.html_code_full = <span translate>{{translations.html_code_full}}</span>
這是輸出我得到:
translations.html_code = <script>alert('Alert!');</script>
translations.html_code = <script>alert('Alert!');</script>
translations.html_code_full = <script>alert('Alert!');</script>
translations.html_code_full =
由於很顯然,指令實現編碼轉換關鍵HTML,但濾波器不是。爲什麼指令與過濾器實現之間的輸出差異? 爲什麼我沒有得到一個警報,如果它呈現HTML?
Here is the plunk我爲演示創建。
這正是我想要做的。在另一個網絡應用程序中,我能夠獲得警報,但不知何故,我無法在演示中重現。我只是想知道*安全*的方式來使用翻譯,即過濾器vs指令,以防止XSS。 –
[AngularJS開發人員指南 - 安全性](https://docs.angularjs.org/guide/security)是一個很好的開始。然後查看[AngularJS $ sce API參考](https://docs.angularjs.org/api/ng/service/$sce)。 SCE協助編寫代碼的方式是:(a)默認安全,(b)更容易對諸如XSS,clickjacking等安全漏洞進行審計。 – georgeawg
我有同樣的問題。我可以在我的應用程序中使用translate DIRECTIVE在本地複製css攻擊,而過濾器似乎是安全的 - 但是如果我嘗試製作反映此問題的plunkr,則css無法正常工作,並且腳本會被正確過濾掉。嘗試ng-translate的2.8.1和2.9.0版本。嘗試了不同的衛生戰略,但也沒有工作。我想知道是否有翻譯指令的安全漏洞。 –