我有一个 php 应用程序,我们允许每个用户都有一个“公共页面”来显示他们的链接视频。我们有一个输入文本框,他们可以在其中指定嵌入视频的 html 代码。我们遇到的问题是,如果我们接受该输入并直接将其显示在页面上,则可以在此处插入各种脚本,从而导致一个非常不安全的系统。
我们希望允许来自所有站点的嵌入代码,但由于它们的结构不同,因此很难密切关注每个站点的结构。
人们采取了哪些方法来解决这种情况?是否有第三方脚本可以为您执行此操作?
我有一个 php 应用程序,我们允许每个用户都有一个“公共页面”来显示他们的链接视频。我们有一个输入文本框,他们可以在其中指定嵌入视频的 html 代码。我们遇到的问题是,如果我们接受该输入并直接将其显示在页面上,则可以在此处插入各种脚本,从而导致一个非常不安全的系统。
我们希望允许来自所有站点的嵌入代码,但由于它们的结构不同,因此很难密切关注每个站点的结构。
人们采取了哪些方法来解决这种情况?是否有第三方脚本可以为您执行此操作?
考虑使用某种利用oEmbed的伪模板。oEmbed 是链接到视频的一种安全方式(作为内容权威,您不允许直接嵌入,而是允许引用可嵌入内容)。
例如,您可能会编写一个解析器来搜索以下内容:
[embed]http://oembed.link/goes/here[/embed]
然后,您可以使用众多 PHP oEmbed 库之一从提供的链接请求资源,并将伪嵌入代码替换为真正的嵌入代码。
希望这可以帮助。
我会让用户输入视频的 URL。从那里您可以自己插入正确的代码。这对他们来说更容易,对你来说更安全。
如果您遇到未知 URL,只需记录它,并添加支持它所需的代码。
最好的方法是有一个允许的白名单标签并删除其他所有内容。还需要过滤这些标签的所有属性以删除“onsomething”属性。
为了进行正确的解析,您需要使用 XML 解析器。XMLReader 和 XMLWriter 可以很好地做到这一点。您从 XMLReader 读取数据,如果标签在白名单中,则将其写入 XMLWriter。在该过程结束时,您在 XMLWritter 中获得了已解析的数据。
这方面的一个代码示例就是这个脚本。它在白名单中有标签test
和video
。如果你给它以下输入:
<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>