【发布时间】:2014-03-04 23:06:59
【问题描述】:
限制哪些网站可以通过网络应用程序嵌入 iframe 的最佳(最安全)方法是什么?
例如,所有不在名单上的人都应该被拒绝:
- www.myFriend.com
- www.anotherFriend.com
- www.myThirdFriend.com
作为后续问题,考虑到上述任何限制,找出服务器端哪个白名单站点正在执行嵌入的最安全方法是什么?
【问题讨论】:
标签: javascript iframe embed
限制哪些网站可以通过网络应用程序嵌入 iframe 的最佳(最安全)方法是什么?
例如,所有不在名单上的人都应该被拒绝:
作为后续问题,考虑到上述任何限制,找出服务器端哪个白名单站点正在执行嵌入的最安全方法是什么?
【问题讨论】:
标签: javascript iframe embed
X-Frame-Options 响应标头
使用 X-Frame-Options X-Frame-Options 有三个可能的值:
DENY:
该页面无法在框架中显示,无论网站是否尝试这样做。SAMEORIGIN:
页面只能显示在与页面本身同源的框架中。ALLOW-FROM uri:
页面只能显示在指定原点的框架中。【讨论】:
使用X-Frame-Options HTTP header。
X-Frame-Options ALLOW-FROM http://example.com/
另见MSDN documentation 有此建议:
请注意,Allow-From 令牌不支持通配符或列表 多源的。对于服务器希望允许更多 比一页框架其内容,以下设计模式是 推荐:
- 外部 IFRAME 提供自己的来源信息,使用 内部 IFRAME 的 src 属性上的查询字符串参数。这个可以 显然是由攻击者指定的,但没关系。
- 服务器 内部 IFRAME 验证提供的 Origin 信息符合 商业惯例要求的任何标准。例如,服务器 为包含社交网络“赞”按钮的 IFRAME 提供服务, 可能会检查提供的 Origin 是否与 Origin 匹配 期望该 Like 按钮,以及指定的所有者 Origin 具有有效的附属关系等。
- 如果满意 提供的信息,内部 IFRAME 的服务器发送一个 X-FRAME-OPTIONS:允许来自提供的origin 标头
- 然后浏览器 强制执行 X-FRAME-OPTIONS 指令。
【讨论】: