2015-05-24 48 views
3

我對AngularJS來說很新穎,並且編輯和發佈用戶評論(允許其中包含HTML標籤,比如強大的HTML標籤)時,我經常聽說在AngularJS上下文中使用術語「信任HTML」。這是什麼意思?爲什麼我們需要「信任」HTML?用戶可能會注入一些惡意的HTML代碼嗎? (像一個JavaScript注入)?我從未真正理解這一點。我們爲什麼需要相信它?我做的是當前的辦法是用戶帖子的註釋,它就會通過mysqli_real_escape_string進行消毒並存儲到數據庫中,然後再拉出數據庫,並使用顯示:AngularJS中「可信html」的含義是什麼

<span ng-bind-html="commentText"></span> 

這是危險的?我是否要求遭到黑客攻擊或「嫖娼」?

此外,用戶的評論允許具有強,斜體,下劃線等屬性,但不允許使用h1或sup。目前我沒有過濾器只允許強壯,斜體和下劃線。如果我編碼,或使用開源文本編輯器,我仍然需要擔心這個「信任html」的東西?

回答

1

這是一個服務於預期目的的代碼問題。如果您正在構建包含用戶個人資料的網站,並且您希望用戶提交描述自己的文本,那麼當您將任何用戶導航到您的網站的用戶加載到該視圖中時,您可能不希望他們添加邏輯來執行惡意活動。

一段時間後TweetDeck被意識到JavaScript將在推文中被評估,因此,有人得到了一個聰明的想法,編寫一小段JavaScript,一旦自動點擊轉發按鈕推文是可見的。您可以想象,轉換速度有多快。 TweetDeck的作者(無意)信任Tweet文本 - 他們不應該有。

瞭解更多:TweetDeck Was Hacked — And This Tweet Is Getting Retweeted Over And Over Again

1

盲目信任的HTML,你的用戶提供可導致所謂的跨站腳本執行一個共同的弱點(通常縮寫爲XSS)。這個漏洞可以讓你的用戶注入他們自己的<script>標籤(以及其他聰明的方式來運行javascript),這可能會導致一些嚴重的安全問題。

爲了解決這個問題,你可以使用ngSanitize這將消毒html,並確保不使用這些不好的標籤。

1

如果您在顯示之前未對用戶輸入進行清理,那麼您可能容易受到XSS(跨站腳本攻擊)攻擊,這可能會使攻擊者將代碼注入您的網站。

您需要做出決定:我相信用戶給我的數據嗎?並且我可以確保數據在我顯示時是安全的嗎?

如果信任的HTML是你的東西,你可以繞過角度的消毒階段。 查看此問題獲取更多信息: How can I display HTML in a <div> with Angular 1.2.0 - rc2