如何仅允许白名单网站嵌入iframe?

23

我有一个表格希望嵌入到我的网站中,该网站在我的白名单中。

其他试图嵌入该表格的网站将只会获得错误页面。

<iframe src="https://domain.tld/getForm.php?embed=1&formId=123456"></iframe>

我希望能够在getForm.php中使用$_SERVER['HTTP_REFERER']来检查嵌入网站,但这并没有起作用。

有人知道最佳实践或任何解决方法吗?

提前致谢!


1
你需要检查发出请求到 getForm.php 的远程地址的IP,但是IP可能会被伪造。查看 $_SERVER 超级全局变量。我认为 REMOTE_ADDR 应该是发起调用的站点的IP,但我不确定是否只是客户端的IP。 - ArtisticPhoenix
你能为这个问题找到一个解决方案吗?我尝试了 $_SERVER['HTTP_REFERER'] 并且它运作良好,但是我在某个地方读到说它可以被伪造,所以有没有更好的解决方案? - Daniel Soublett
2个回答

40

为了帮助其他人,我必须在我的apache配置文件中设置它。Header set Content-Security-Policy "frame-ancestors 'self' https://iframetester.com;" - Gonzalo Cao
NB它不从default-src继承:*( - undefined

18

大多数浏览器都支持 X-Frame-Options header。

此标头将防止访问:

X-Frame-Options: SAMEORIGIN

并且添加以下标头以允许访问:

X-Frame-Options: ALLOW-FROM [uri]

选项的示例:

X-Frame-Options: DENY
X-Frame-Options: SAMEORIGIN
X-Frame-Options: ALLOW-FROM https://example.com/

PHP中的一个例子:

<?php header('X-Frame-Options: SAMEORIGIN'); ?>

你可以在这里进一步阅读:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options

希望对你有所帮助!


20
allow-from现在已经过时。 - codesmith
4
有没有其他方式可以允许特定域名访问,因为allow-from已经过时了。 - Chandan Singh Gadhwal
2
你可以使用 Content-Security-Policy: frame-ancestors 'self' yoursites; 来保护你的网站。 - Mukesh Kumar Gupta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接