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

标签 php xss csrf embedded-video

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

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

至少我会考虑去除所有标签,除了 <object> , <param><embed> .但我觉得这还不够,对吗?

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

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

  • PHP/Zend 框架
  • MySQL

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

最佳答案

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

通常 Flash 嵌入使用类似于以下的代码:

优酷:

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

视频:

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

元咖啡馆:

<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 的内容。它是您应该删除或设置为 sameDomain/never 的 Param 属性。它将阻止 SWF 运行 javascript :)

关于php - 允许视频嵌入时需要注意哪些 XSS/CSRF 攻击(如果有)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2471834/

相关文章:

java - 这些 XSRF 保护也适用于 RequestFactory 吗?

php - 使用相同的表单/请求值重定向 (POST)

jsp - 跨站点历史操作解决方案

javascript - String.stipTags() 足以减轻 XSS 攻击吗?

javascript - 强制 Backbone 或 Underscore 总是转义所有变量?

Django CSRF Coo​​kie 未设置

javascript - 使用元标记中的 token 进行 CSRF 保护 - 为什么它不能被盗?

php - 在空格上拆分字符串,引号中的单词除外

php - 如何创建包含 MySQL 查询的 PHP 函数?

php - 在 PHP 中用没有循环的值填充数组