Iframes安全提示和脚本

时间:2018-01-06 20:22:01

标签: javascript mysql security iframe youtube

我正在尝试为自己创建一个人们可能会在将来使用的网站。目前,我允许用户发布YouTube和Google地图等的iframe。复制整个' iframe'来自谷歌地图或YouTube,并将其粘贴在邮箱中只是为了保持简单。

后来我将它存储在MySQL数据库中。我在某个页面上显示这篇文章。我很担心,因为虽然我已经要求用户只粘贴YouTube或地图iframe,但恶魔的心灵可能会产生恶意代码。

有什么可能的方法可以防止这种情况发生?

1 个答案:

答案 0 :(得分:1)

我认为存在多种风险,有些人会想到:

  • 跨网站脚本。如果允许将完整的<iframe>标记显示为已输入,则有太多方法可以实现此目的。这可能是主要风险,也可能是showstopper。如果您只是将完整的iframe标记(由攻击者输入)写入后续页面,那么很难阻止XSS。如果真的想要这样做,你应该研究像Google CajaHTMLPurifier或类似的HTML清理,但它是一种蠕虫,如果可能的话你最好避免。

  • 信息泄漏到恶意网站。这在很大程度上取决于浏览器(以及此类浏览器的确切版本),但某些信息(例如窗口大小等)确实会泄漏到iframe中的网站,即使它来自不同的来源。

  • 来自恶意网站的信息/控制泄漏。比以前更糟糕的是,嵌入式网站会对窗口有一些控制权,例如它可以重定向它(再次,我认为这取决于浏览器,但我不太确定),或者可以更改url散列片段。此外,如果使用postMessage,iframe可以向您的应用程序发送消息,如果您的应用程序未得到适当保护,可能会被利用(不一定就是现在,但在将来的任何时候,例如5年之后,经过多次发展)。

  • 任意文字注入,可能会导致社交工程。说对手包括一个框架,上面写着“你是本月超级大奖的赢家!请致电1-800-ATTACKER提供你的详细信息并获得奖励!”......你明白了。如果不是,则该消息看起来像是您网站上的合法消息。

因此,您最好不要让人们输入从Google地图或其他任何地方复制的完整代码。您想要允许的内容似乎有限(例如Youtube视频和Google地图链接只有两个),您应该为其定制控件。用户只能输入视频id / slug(在?v = ...之后的部分),或者粘贴完整的链接,从中获取id,你可以在服务器上为你的页面制作实际的标签侧。对于谷歌地图也是如此,如果用户在地图窗口中导航到他想要的任何地方并粘贴网址,我可以创建自己的iframe,因为一切都在谷歌地图的网址中。

简而言之,您不应该允许人们输入标签。清洁剂可以减轻XSS的影响,但上面列出的其他风险则不能。