2017-08-08 23 views
6

我從那些可能包含來自以下服務嵌入視頻的HTML代碼API串獲得:如何檢查帶iframe的html是否安全?

  • youtube.com,
  • vimeo.com,
  • dailymotion.com,
  • prezi .COM

如果我敢肯定它是足夠安全的,我可以將它們轉換爲值得信賴的SafeHtml(繞過角的清潔劑):

this.safeHtml = this._sanitizer.bypassSecurityTrustHtml(this.htmlFromApi); 

,然後把它像這樣在頁面上:

<div [innerHtml]="safeHtml"></div> 

問題:

  1. ,檢查我必須執行,以確保此字符串是足夠安全? (它不包含嵌入式腳本,只會導致這四個站點之一沒有任何棘手的重定向)?

  2. 將這些網站添加到Angular的sanitizer的例外情況下有意義嗎?如果是的話怎麼做?

在此先感謝!

p.s.我看到了類似的問題:How to check if string of HTML is safe?但我希望有更新鮮的東西與角度最佳實踐相關

+1

我的2美分。沒有什麼是真的安全。我不相信任何消息來源,但這取決於您的安全需求/限制。 –

回答

2

雖然不是角度特定的答案;您需要在您的網站上使用Content Security Policy標題,以允許通過(i)幀訪問Cerain網站。

例子:

Content-Security-Policy: 
     default-src 'self' https:; 
     script-src 'self' https:; 
     frame-src: https://*.youtube.com https://*.vimeo.com 
        https://*.dailymotion.com https://*.prezi.com; 

頭是多行爲了閱讀方便,僅

這CSP設置一些規則,爲您的網站,這樣:

  • 默認只允許對網站本身的引用(「自我」)並僅通過https。
  • 腳本只能[安全地訪問] 文件不是內聯腳本,並且這些文件必須從同一個網站調用。
  • (i)frames只能從網站上調用指定的域名。我已將Https地址類型作爲最佳做法,並且您必須注意,這將*拒絕訪問佔位符URL,例如https://y2u.be,但您可以根據需要添加這些變體。

上面的CSP聲明完全符合您在問題中的要求,因此避免了您需要過濾某些域以超過safeHtml消毒劑。

殺菌劑仍然可能需要通過 - 不知何故 - 但我不知道角度,所以不能回答這個細節。

Read more about the frame-src CSP directve

編輯

因爲如果用戶使用非TLS連接,或者如果你的網站是不是TLS保護,還包括了短網址的例子,也更加靈活的例子:

Content-Security-Policy: 
     default-src 'self'; 
     script-src 'self'; 
     frame-src: https://*.youtube.com https://*.vimeo.com 
        https://*.dailymotion.com https://*.prezi.com 
        http://*.youtube.com http://*.vimeo.com 
        http://*.dailymotion.com http://*.prezi.com 
        https://youtu.be; 
+0

感謝@Martin! –