允许视频嵌入时要注意哪些XSS / CSRF攻击(如果有的话)?

时间:2010-03-18 17:02:21

标签: php xss csrf embedded-video

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

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

我会考虑删除除<object><param><embed>以外的所有代码。但我觉得这还不够,是吗?

修改
另外:
您是否认为只允许<embed src=<param name="movie" value=属性中的已知视频域名足以阻止恶意Flash影片嵌入这些属性中?
/修改

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

  • PHP / Zend Framework
  • MySQL的

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

2 个答案:

答案 0 :(得分:2)

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

通常flash嵌入使用的代码类似于:

的Youtube:

<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>

启用嵌入内容的最佳解决方案是剥离标签,但 embed,param,object 以及可以使用的样本中的属性列表除外。

请记住,某些属性可以运行javascript代码以及anchor的href ...

修改 只允许src和param的value属性中的可信站点是防止hAx0rs做坏事的好方法,但它不是瑕疵。另一件大事:阅读有关allowScriptAccess的更多信息。它是一个Param的属性,你应该删除或设置为sameDomain / never。它会阻止SWF运行javascript:)

答案 1 :(得分:1)

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