首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何允许在iframe中使用地理定位API?

如何允许在iframe中使用地理定位API?
EN

Stack Overflow用户
提问于 2020-10-28 22:26:23
回答 1查看 5.3K关注 0票数 6

我有一个iframe标记,src是另一个服务器上的网页。我有能力修改两个网站的标题。在开始实现之前,我能够单击iframe中的一个按钮并检索GPS坐标。我相信有关的一些内容阻止了我的父站点运行地理定位API。

父网站代码:

代码语言:javascript
复制
<customHeaders>
    <add name="Content-Security-Policy" value="frame-src 'self' https://MyChildSite.com" />
</customHeaders>
代码语言:javascript
复制
<html>
    <iframe src="https://MyChildSite.com" allow="geolocation"></iframe>
</html>

“儿童网站守则”:

代码语言:javascript
复制
<customHeaders>
      <add name="Content-Security-Policy" value="frame-src 'self' https://MyParentSite.com" />
      <add name="Feature-Policy" value="geolocation 'self' https://MyParentSite.com" />
</customHeaders>
代码语言:javascript
复制
<html>
    <button onclick="getCoordinates()">Get GPS</button>
    ...list some stuff
</html>

当我通过父站点单击子站点上的按钮时,我无法从坐标中得到预期的响应。有解决办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-29 10:09:06

代码语言:javascript
复制
,--------------------- parent https://MyParentSite.com ------------------------,
|Content-Security-Policy: frame-src 'self' https://MyChildSite.com             |
|   * aboved CSP do allow <iframe src="https://MyChildSite.com"                |
|                                                                              |
|                                                                              |
|   <iframe src="https://MyChildSite.com" allow="geolocation">                 |
|                                                                              |
|   ,-------------------- nested https://MyChildSite.com --------------------, |
|   |Content-Security-Policy: frame-src 'self' https://MyChildSite.com       | |
|   |  1. aboved CSP do nothing, it will apply to subnested iframes only     | |
|   |                                                                        | |
|   |  2. allow="geolocation" -> allow="geolocation https://MyChildSite.com" | |
|   |     which is EQUAL to:                                                 | |
|   |    Feature-Policy: geolocation https://MyChildSite.com                 | |
|   |                                                                        | |
|   |  Therefore header:                                                     | |
|   |                                                                        | |
|   |Feature-Policy: geolocation 'self' https://MyParentSite.com             | |
|   |  will failed to allow https://MyParentSite.com, iframe can not extend  | |
|   |  permissions, given by parent document, see para 2. above.             | |
|   |  As result within iframe you will have only:                           | |
|   |     Feature-Policy: geolocation https://MyChildSite.com                | |
|   |                                                                        | |
|   |________________________________________________________________________| |
|                                                                              |
|   </iframe>                                                                  |
!______________________________________________________________________________|
  1. 为什么allow="geolocation" -> allow="geolocation https://MyChildSite.com请参阅在allow=属性中指定没有键的指令。将从src=属性获得原点。
  2. 将Feature权限传递到嵌套浏览上下文中有一些细节。与父文档授予的权限相比,Iframe不能委派自己(或子嵌套的Iframe)更多的权限。 如果您在iframe中运行了一个脚本,您可以使用featurePolicy.getAllowlistForFeature接口获取所有允许的源的列表,并查看发生了什么。
  3. 您的发布与内容安全策略无关,我认为您在浏览器控制台中甚至没有任何违反CSP的行为。

解决方案是在allow=属性中显式指定允许的源:

代码语言:javascript
复制
<iframe src="https://MyChildSite.com" allow="geolocation 'self' https://MyParentSite.com"></iframe>

或者,您可以删除allow=属性(或设置allow='*'):

代码语言:javascript
复制
<iframe src="https://MyChildSite.com"></iframe>

并在iframe中使用Feature-Policy: geolocation 'self' https://MyParentSite.com设置权限。

  • 不要忘记地理定位API只在安全上下文中工作(通过https: only)。您可以检查window.isSecureContext属性以执行适当的诊断。

我可以要求你在你的问题上加上feature policy标签吗?这将在将来帮助其他人。

编辑

allow="*"不再起作用了,但必须按下面的allow="geolocation *"来说明

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64582203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档