【问题标题】:What XSS/CSRF attacks (if any) to be aware of when allowing video embeds?允许视频嵌入时需要注意哪些 XSS/CSRF 攻击(如果有)?
【发布时间】:2011-01-29 03:12:41
【问题描述】:

我被分配了一个网站项目,允许用户上传视频(使用 YouTube API),但更重要的是(对我而言)他们还可以提交视频嵌入代码(来自众多视频网站, YouTube、Vimeo 等)。

没有允许用户嵌入视频的经验:
我如何才能最好地防止专门针对视频嵌入的跨站点脚本和/或跨站点请求伪造攻击?有哪些常见的陷阱需要注意?

至少我会考虑去除除<object><param><embed> 之外的所有标签。但我觉得这还不够,是吗?

编辑
另外:
您认为在 <embed src=<param name="movie" value= 属性中只允许已知视频域名是否足以防止流氓 Flash 电影嵌入到这些属性中?
/edit

如果它很重要,环境将是:

  • PHP/Zend 框架
  • MySQL

奖励积分:
是否有适用于所有视频网站的视频嵌入代码的通用最低黄金规则/代码模板,我可以使用它来过滤输入?

【问题讨论】:

    标签: php xss csrf embedded-video


    【解决方案1】:

    首先也是最危险的 xss (?) 是 flash 可以读取您的 DOM...不要在用户可以输入他/她的登录数据的页面上嵌入视频。登录表单应该分开。

    flash embed 通常使用类似于以下内容的代码:

    优酷:

    <object width="425" height="350">
      <param name="movie" value="http://www.youtube.com/v/AyPzM5WK8ys" />
      <param name="wmode" value="transparent" />
      <embed src="http://www.youtube.com/v/AyPzM5WK8ys"
             type="application/x-shockwave-flash"
             wmode="transparent" width="425" height="350" />
    </object>
    

    Vimeo:

    <object width="400" height="225">
      <param name="allowfullscreen" value="true" />
      <param name="allowscriptaccess" value="always" />
      <param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=10239065&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" />
      <embed src="http://vimeo.com/moogaloop.swf?clip_id=10239065&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="225"></embed>
    </object>
    <p><a href="http://vimeo.com/10239065">La Fete (HD - 2010)</a> from <a href="http://vimeo.com/animalcolm">Malcolm Sutherland</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
    

    Metacafe:

    <embed src="http://www.metacafe.com/fplayer/4317045/bmx_face_slide.swf" width="400" height="345" wmode="transparent" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" allowFullScreen="true" allowScriptAccess="always" name="Metacafe_4317045"> </embed>
    <br><font size = 1><a href="http://www.metacafe.com/watch/4317045/bmx_face_slide/">BMX Face Slide</a> - <a href="http://www.metacafe.com/">Free videos are just a click away</a></font>
    

    启用嵌入内容的最佳解决方案是从可使用的示例中去除嵌入、参数、对象和属性列表的标记。

    记住,一些属性可以运行javascript代码以及锚的href...

    编辑: 在 src 和 param 的 value 属性中只允许受信任的站点是防止 hAx0rs 做坏事的好方法,但它并非完美无缺。另一件大事:阅读有关 allowScriptAccess 的更多信息。它是一个 Param 的属性,您应该删除或设置为 sameDomain / never。它将阻止 SWF 运行 javascript :)

    【讨论】:

    • 我认为我们将不得不从 Vimeo 中删除所有多余的标签,例如 &lt;p&gt;。并且确实去除了多余的属性。关于 DOM 也很好。我自己不会想到这个。另外:您认为在&lt;embed src= 属性和&lt;param name="movie" value= 属性中只允许已知视频域名是否足以防止流氓Flash 电影嵌入这些属性中?
    • 还有另一种方法,阅读 youtube 的 API 并尝试使用给定的 URL 嵌入 SWF 文件...就像 Facebook 所做的那样
    【解决方案2】:

    您为什么不直接访问所有网站,保存其嵌入代码,然后只允许您的用户提交所需的网站参数?

    【讨论】:

    • 嘿,谢谢。我也想过这个。但这可能太麻烦了。我们希望允许尽可能多的视频网站。另外,我不想用太多的技术细节(知道将哪些参数放在哪里)打扰人们。所以基本上我们希望它对人们来说尽可能简单(复制/粘贴嵌入代码并完成)。
    • 好吧,他们只需要选择哪个站点,然后复制/粘贴生成的 URL。这样会更安全。
    • 圣。约翰约翰逊 - 你听说过用户友好吗? :D 并非所有用户都来自 IT 部门 ;)
    • @shfx 哈哈,摸摸。我只是在想,假设您将文件上传到 youtube,那么您会得到一个结果链接:youtube.com/8asdja8 将其复制到文本字段,然后检测该站点是什么(youtube),然后与特定代码相关他们用来嵌入链接,然后将它们组合在一起以获得安全嵌入的视频。
    • @john 哦! ;) 对!这对用户来说肯定是最简单的方法!
    猜你喜欢
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    相关资源
    最近更新 更多