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