如何在网站上安全地允许视频嵌入HTML?

时间:2010-09-23 00:14:42

标签: php security video embed video-embedding

我有一个php应用程序,我们允许每个用户都有一个显示其链接视频的“公共页面”。我们有一个输入文本框,可以指定嵌入视频的html代码。我们遇到的问题是,如果我们接受该输入并将其直接显示在页面上,那么可以在此处插入各种脚本,从而导致系统非常不安全。

我们希望允许来自所有网站的嵌入代码,但由于它们的结构方式不同,因此很难确定每个网站的结构。

人们采取了哪些方法来解决这种情况?是否有为您执行此操作的第三方脚本?

3 个答案:

答案 0 :(得分:1)

考虑使用某种利用oEmbed的伪模板。 oEmbed是一种链接到视频的安全方式(作为内容权限,您不允许直接嵌入,而是引用可嵌入内容)。

例如,您可以编写一个解析器来搜索类似的内容:

[embed]http://oembed.link/goes/here[/embed]

然后,您可以使用众多PHP oEmbed库中的一个来从提供的链接请求资源,并使用真实的嵌入代码替换伪嵌入代码。

希望这有帮助。

答案 1 :(得分:0)

最好的方法是使用允许的白名单标记并删除其他所有内容。还需要过滤那些标记的所有属性以删除“onsomething”属性。

为了进行正确的解析,您需要使用XML解析器。 XMLReader和XMLWriter可以很好地完成这项工作。您从XMLReader读取数据,如果标记位于白名单中,则将其写入XMLWriter。在流程结束时,您将在XMLWritter中获得已解析的数据。

这个代码示例是this script。它在白名单中包含标记testvideo。如果您给它以下输入:

<z><test attr="test"></test><img />random text<video onclick="evilJavascript"><test></test></video></z>

它将输出:

<div><test attr="test"></test>random text<video><test></test></video></div>

答案 2 :(得分:0)

我希望用户输入视频的URL。从那里你可以自己插入适当的代码。对他们来说更容易,更安全。

如果您遇到未知的网址,只需记录下来,然后添加支持该网址所需的代码即可。