2017-08-08 22 views
6

tôi nhận được từ chuỗi API mã html có thể chứa video được nhúng từ các dịch vụ sau:Cách kiểm tra xem html có iframe an toàn không?

  • youtube.com,
  • vimeo.com,
  • dailymotion.com,
  • Prezi năm

Nếu tôi chắc chắn rằng nó là đủ an toàn tôi có thể chuyển đổi chúng sang SafeHtml tin cậy (để bỏ qua khử trùng góc của):

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

Và sau đó đặt nó trên một trang như thế này:

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

Câu hỏi:

  1. nào kiểm tra tôi phải thực hiện để chắc chắn chuỗi này là đủ an toàn? (nó không chứa các tập lệnh nhúng và chỉ dẫn đến một trong bốn trang web này mà không có bất kỳ chuyển hướng khó hiểu nào)?

  2. Có ý nghĩa gì khi thêm các trang web này vào ngoại lệ của chất khử trùng của Angular? Và làm thế nào để làm điều đó nếu có?

Cảm ơn bạn trước!

p.s. Tôi thấy câu hỏi tương tự này: How to check if string of HTML is safe? Nhưng tôi hy vọng có điều gì đó mới mẻ hơn và có liên quan đến các phương pháp hay nhất Angular

+1

2 cent của tôi. không có gì thực sự an toàn. Tôi sẽ không tin tưởng bất kỳ nguồn nào, nhưng nó phụ thuộc vào nhu cầu/hạn chế về bảo mật của bạn. –

Trả lời

2

Mặc dù không phải là câu trả lời cụ thể góc cạnh; bạn muốn có tiêu đề Content Security Policy trên trang web của mình, chỉ cho phép các trang web cerain được truy cập qua (i) khung.

Ví dụ:

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; 

(Tiêu đề được đa lót cho việc đọc rõ ràng chỉ)

CSP này thiết lập một số quy tắc cho trang web của bạn để:

  • Mặc định chỉ cho phép tham chiếu đến chính trang web đó ("tự") và chỉ qua https.
  • Tập lệnh chỉ có thể được [truy cập an toàn] tệpNOT tập lệnh nội dòng và các tệp này phải được gọi từ cùng một trang web.
  • (i)frames từ trang web chỉ có thể gọi tên miền được chỉ định. Tôi đã đặt các loại địa chỉ Https ở đây là thực tiễn tốt nhất và bạn cũng phải lưu ý rằng điều này sẽ * từ chối quyền truy cập vào các URL trình giữ chỗ như https://y2u.be, nhưng bạn có thể thêm các biến thể này nếu cần.

Tuyên bố CSP ở trên thực hiện chính xác những gì bạn yêu cầu trong câu hỏi của bạn và do đó, bạn cần phải lọc các miền nhất định qua safeHtml trình khử trùng.

Chất khử trùng có thể vẫn cần được truyền - bằng cách nào đó - nhưng tôi không biết góc cạnh nên không thể trả lời chi tiết đó.

Read more about the frame-src CSP directve.

Sửa

Một ví dụ linh hoạt hơn vì nếu người dùng sử dụng kết nối không TLS hoặc nếu trang web của bạn không được TLS được bảo đảm, cũng bao gồm một ví dụ cho các URL ngắn, quá:

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

Cảm ơn @Martin! –

Các vấn đề liên quan