验证/允许 YouTube 嵌入代码

Posted

技术标签:

【中文标题】验证/允许 YouTube 嵌入代码【英文标题】:Validating/Allowing YouTube Embed Code 【发布时间】:2011-05-28 18:14:48 【问题描述】:

希望这是一个简单的问题。我的网站上有一个用 php 编写的简单自定义论坛。出于安全原因,我不允许在论坛帖子中使用任何 html。我只允许某些 BBCode 标签。不过,我希望允许嵌入 YouTube 视频。

所以我的问题是:验证 YouTube 嵌入代码的最佳(最安全)方法是什么? YouTube 目前正在使用 iframe 嵌入视频,但显然我不能只允许 iframe 标签。我还需要确保 iframe 的 src 是 YouTube URL,并确保 iframe 代码中没有其他恶意代码。

【问题讨论】:

【参考方案1】:

你应该允许用户使用这样的东西:

[youtube]http://www.youtube.com/watch?v=te-TiL9YVaE[/youtube]

然后在显示消息时转成使用PHP嵌入代码:

function bb_youtube($post) 
    return preg_replace(
                            "#\[youtube].*?v=([^&]+).*?\[/youtube\]#im",
                            '<object  ><param name="movie" value="http://www.youtube.com/v/$1?fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/$1?fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true"  ></embed></object>',
                            $post
                           );

【讨论】:

【参考方案2】:

最安全的方法是创建 [youtube] 标签。 http://www.youtube.com/watch?v=PVHzXnS5Gms 可以变为 [youtube v='PVHzXnS5Gms'][/youtube](或您选择的语法)。

要将其转换为 YouTube 嵌入代码,请使用 &lt;object width="640" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/VIDEO_ID?fs=1&amp;amp;hl=en_US"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/VIDEO_ID?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt; 并将 VIDEO_ID 替换为标识符。

【讨论】:

以上是关于验证/允许 YouTube 嵌入代码的主要内容,如果未能解决你的问题,请参考以下文章

在没有 NSNotificationCenter 的情况下,在 iOS 8 中正确强制或允许 Youtube 嵌入视频的横向模式

嵌入 YouTube 缩略图

可以在 svg 中嵌入 youtube 视频吗?

我可以更改嵌入的 youtube 视频的播放图标吗?

避免 zindex 的 Youtube 嵌入播放器

YouTube 播放列表在单个页面上嵌入多个播放列表的脚本 (jQuery/CSS/HTML + CodePen)