由于技术挑战,我们正在寻求迁移到 iframe。通过迁移到 iframe,可以更轻松地管理技术问题。但我们并不完全确定 iframe 的安全隐患。
我们的网站是通过 SSL 呈现的,用户可能需要点击我们网站上的 SSL 链接。
- 是否可以在全新的浏览器中打开它并且仍然没有安全问题?
- 在使用 iframe 时,我们应该记住哪些事项以确保我们的网站保持安全?
由于技术挑战,我们正在寻求迁移到 iframe。通过迁移到 iframe,可以更轻松地管理技术问题。但我们并不完全确定 iframe 的安全隐患。
我们的网站是通过 SSL 呈现的,用户可能需要点击我们网站上的 SSL 链接。
假设 iframe 具有相同的来源,因此您不必删除X-Frame-Options: sameorigin标头,或者Clickjacking在它们中不是问题。(指定了一个允许标记,但旧版浏览器不支持它)。
使用框架的主要剩余问题是,您最终可能会显示不受信任的内容,而用户仍会在地址栏中看到您的域。例如,可能存在缺少该target="_top"属性的链接,或者您可能想要有意显示外来内容。
例如,该外来内容可能会在您的布局中显示“您的会话已过期,请重新登录”的表格。地址栏将显示您的域。
iframe 的一个常见安全问题是点击劫持。此问题通常使用x-frame-options http 响应标头来缓解。限制哪些页面可以被 iframe'ed 是很重要的。允许用户更改密码、修改设置的页面应该有一个“拒绝”的 x-frame-option。
使用 iframe 有很大的安全优势。例如,Google+ 按钮依赖于 iframe 的源继承规则来实现安全性。
iFrame 可能会引入许多安全问题,具体取决于它们的实现方式和内容的提供位置。
以下是 Rook 提到的有关 iFrame 选项的一些详细信息
允许表格
如果启用此功能,iFrame 可能会通过网络钓鱼获取信息、伪装成您网站的登录表单等。
allow-scripts 如果启用了允许脚本,那么设置允许表单没有意义,因为可以通过 Javascript 在 DOM 中创建表单
如果您在 iFrame 中允许脚本,则它可能会执行 DoS 攻击、打开浏览器对话框或在页面上执行自动化,从而将信息暴露给其他人(referer 属性)或加载外部对象。
允许顶部导航
此权限允许 iFrame 充当嵌入式站点或网络钓鱼用户凭据。
允许同源
此属性旨在显示原始 HTML 文档(例如 HTML 电子邮件)与源代码相同。问题是,如果 URL 是可预测的,并且攻击者可以让用户直接查看 iFrame,那么沙箱的属性就会丢失。更糟糕的是,打开的网页可能会遍历opener对象并发现有关源页面的属性。
最后,有一种提议的 MIME 类型要求text/html-sandboxed始终在沙盒环境中查看的内容,但是许多浏览器误解了这一点,并且会以不寻常的方式显示数据(通常是一件坏事)。
您应该实现两件事来保护该应用程序:
1)添加X-frame-Option标头,即在apache中:
echo "Header always append X-Frame-Options SAMEORIGIN" >> /etc/apache2/httpd.conf && a2enmod headers && service apache2 restart
2) 为旧浏览器添加 Framebusting Javascript 代码。
警告!if (_top == _self)是错误的Framebusting代码!
看这里,有很多 framebusting 的例子(OWASP Video)。