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

3
我有一个PHP应用程序,其中我们允许每个用户拥有一个“公共页面”,显示他们链接的视频。我们有一个输入文本框,用户可以在其中指定嵌入视频的HTML代码。我们遇到的问题是,如果我们将该输入直接显示在页面上,所有类型的脚本都可以插入其中,导致非常不安全的系统。
我们想允许来自所有站点的嵌入代码,但由于它们的结构不同,因此很难掌握每个站点的结构。
人们采取了哪些方法来解决这种情况?是否有第三方脚本可以为您完成此操作?
3个回答

1

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

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

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

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

希望这能帮到您。


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>

0

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

如果遇到未知的URL,只需记录下来,并添加支持它所需的代码。


问题在于所有这些网站生成的 HTML 都是供用户复制/粘贴使用的 - 而我们正在要求我们的用户这样做。如果我们要求他们直接复制粘贴网页链接,这对他们来说会太令人困惑了。 - siliconpi
您可以轻易地接受任何一种方式。嵌入代码还将包含视频的URL / id。 - Matthew
那其实是一个非常有趣的想法...我不认为我可以在当前项目中使用它,但这是以后需要记住的东西... - siliconpi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接