【问题标题】:Iframes security tips and scriptsiframe 安全提示和脚本
【发布时间】:2018-01-06 20:22:01
【问题描述】:
我正在尝试为自己创建一个未来人们可能会使用的网站。目前我允许用户为 YouTube 和谷歌地图等发布 iframe。从谷歌地图或 YouTube 复制整个“iframe”并将其粘贴到邮箱中以保持简单。
稍后我将其存储在 MySQL 数据库中。我在某个页面上显示这篇文章。我有点担心,因为虽然我已经要求用户只粘贴 YouTube 或地图 iframe,但一个恶魔可能会放恶意代码的 src。
有什么方法可以防止这种情况发生?
【问题讨论】:
标签:
javascript
mysql
security
iframe
youtube
【解决方案1】:
我认为存在多种风险,其中一些是:
-
跨站脚本。如果您允许完整的<iframe> 标记按输入显示,则有太多方法可以实现此目的。这可能是主要风险,也是最引人注目的。如果您只是将完整的 iframe 标签(由攻击者输入)写入后续页面,则很难防止 XSS。如果你真的想要这样做,你应该研究像Google Caja或HTMLPurifier或类似的HTML清理,但如果可能的话,你最好避免使用这些蠕虫。
信息泄露到恶意网站。这在很大程度上取决于浏览器(以及此类浏览器的确切版本),但某些信息(例如窗口大小等)确实会在 iframe 中泄漏到网站,即使它来自不同的来源。
来自恶意网站的信息/控制泄漏。甚至比以前更糟糕的是,嵌入式网站会对窗口进行一些控制,例如它可以重定向它(再次,我认为这取决于浏览器,但我不太确定),或者可以更改 url 哈希片段.此外,如果使用postMessage,iframe 可以向您的应用程序发送消息,如果您的应用程序没有得到适当的保护(不一定是现在,但在未来的任何时间,比如 5 年后,经过很多发展)。
任意文本注入,可能导致社会工程学。假设一个对手包含一个框架,上面写着“您是本月超级奖的赢家!致电 1-800-ATTACKER 提供您的详细信息并获得您的奖励!”......你明白了。该消息看起来像是来自您网站的合法消息,但实际上并非如此。
因此,您最好不要让人们输入从 Google 地图或其他任何地方复制的完整标签。您希望允许的东西似乎是有限的(例如 Youtube 视频和谷歌地图链接只有两个),您应该有自定义控件。用户只需输入视频 id/slug(?v=... 之后的部分),或者粘贴完整链接,您将从该链接中获取 id,然后您将在服务器上为您的页面制作实际标签边。谷歌地图也是如此,如果用户在地图窗口中导航到他想要的任何地方并粘贴 url,我认为你可以制作自己的 iframe,因为一切都在谷歌地图的 url 中。
总之,你不应该让人们输入标签。 XSS 可以通过消毒剂缓解,但上面列出的其他风险则不能。