我从html代码的API字符串获取,其中可能包含来自以下服务的嵌入视频:
如果我确定它足够安全,我可以将它们转换为可信的SafeHtml(绕过Angular的消毒剂):
this.safeHtml = this._sanitizer.bypassSecurityTrustHtml(this.htmlFromApi);
然后将其放在这样的页面上:
<div [innerHtml]="safeHtml"></div>
问题:
我必须执行哪些检查才能确保此字符串足够安全? (它不包含嵌入式脚本,只导致这四个站点中的一个没有任何棘手的重定向)?
以某种方式将这些网站添加到Angular的消毒剂的例外中是否有意义?如果是的话怎么做?
提前致谢!
P.S。我看到了类似的问题:How to check if string of HTML is safe?但我希望有更新鲜和与Angular最佳实践相关的内容
答案 0 :(得分: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为您的网站设置了一些规则,以便:
(i)frames
只能调用指定的域名。我已将Https
地址类型放在此处作为最佳做法,您还必须注意,这将*拒绝访问占位符网址,例如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;