在 sandbox-iframe 中嵌入 youtube-iframe 失败

Rei*_*ann 6 youtube-api youtube-iframe-api

当将 youtube-iframe 嵌入到另一个已沙箱化的 iframe 中(以防止 XSS)时,播放器在所有主要浏览器中都会保持黑色。

请参阅https://jsfiddle.net/ms9fwLbk/

<!DOCTYPE html><html lang='en'><head><title>Sandbox iframe youtube problem</title></head><body>
<iframe sandbox='allow-scripts allow-presentation' width='600' height='400' srcdoc='
     <!DOCTYPE html><html lang="en"><head><title>iframe</title></head><body>
     <!-- original source-code shared from youtube: -->
     <iframe width="560" height="315"
         src="https://www.youtube.com/embed/QwS1r1mc888?controls=0"
         frameborder="0"
         allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"
         allowfullscreen></iframe>
     </body></html>
'></iframe></body></html>
Run Code Online (Sandbox Code Playgroud)

浏览器的控制台日志显示以下错误,因为 youtube-api 在 CORS 方面存在问题(此处没有allow-same-origin 选项,因为允许脚本已启用并且会使 cookie 容易受到攻击)

Uncaught DOMException: Failed to read the 'cookie' property from 'Document':
The document is sandboxed and lacks the 'allow-same-origin' flag.
at Vb.m.get (https://www.youtube.com/yts/jsbin/www-embed-player-vflwaq4V_/www-embed-player.js:142:47)
Run Code Online (Sandbox Code Playgroud)
Access to XMLHttpRequest at 'https://www.youtube.com/error_204?...'
from origin 'null' has been blocked by CORS policy:
Response to preflight request doesn't pass access control check:
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Run Code Online (Sandbox Code Playgroud)

并没有帮助

  • 允许沙箱内有更多功能,或者也在内部 iframe 上定义沙箱
  • 使用 youtube 的旧对象嵌入源代码
  • 从 youtube-player 中删除允许参数
  • 使用 youtube-nocookie.com 应用增强隐私模式

如何让 youtube 忽略 cookie 访问或预检来源限制?

(Vimeo 在此类沙盒 iframe 中没有任何问题,但某些视频只能在 YouTube 中观看。)

小智 11

我遇到了同样的问题,必须设置以下沙箱属性才能使其正常工作

sandbox =“允许脚本允许相同来源”

更多信息https://www.w3schools.com/tags/att_iframe_sandbox.asp

  • 同时允许脚本和同源,实际上使沙箱[不安全](/sf/ask/2464571301/ -if 上的同源/62431584#62431584) (5认同)
  • 如果 iframe 的来源与页面的来源不同,这并不意味着不安全。该安全漏洞仅在加载 blob 或与页面具有相同来源的内容时才出现,如您提到的答案中所述。 (3认同)