【问题标题】:How do I allow video embed html safely on a site?如何允许在网站上安全地嵌入 html 视频?
【发布时间】:2011-04-16 00:44:03
【问题描述】:

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

我们希望允许嵌入所有网站的代码,但由于它们的结构不同,因此很难密切关注每个网站的结构。

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

【问题讨论】:

    标签: php security video embed video-embedding


    【解决方案1】:

    最好的方法是有一个允许的白名单标签并删除其他所有内容。还需要过滤这些标签的所有属性以删除“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】:

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

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

      【讨论】:

      • 问题在于,所有这些网站都会生成供用户复制/粘贴的 html - 我们要求用户提供这些内容。如果我们让他们直接复制粘贴网页链接,他们会很困惑
      • 您也可以轻松接受。嵌入代码还将包含视频的 URL/id。
      • 这实际上是一个非常有趣的想法...我不认为我可以将它用于当前项目,但要记住以后的事情...
      【解决方案3】:

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

      例如,您可能会编写一个解析器来搜索以下内容:

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

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

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2019-08-04
        • 1970-01-01
        • 1970-01-01
        • 2010-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-14
        • 2021-03-16
        相关资源
        最近更新 更多