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

How to allow iframe embedding only for whitelisted websites?

我有一个要嵌入网站的表单,它在我的白名单中。

尝试嵌入它的其他网站应该只会出现一个错误页面。

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

我希望我可以在 getForm.php 中使用 $_SERVER['HTTP_REFERER'] 来检查嵌入网站,但它不起作用。

有没有人知道最佳实践或解决方法?

提前致谢!

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

这 header 将阻止访问:

X-Frame-Options: SAMEORIGIN

而这个 header 允许访问:

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

希望对您有所帮助!

内容安全策略 headers 现在是推荐的方法。

来自 MDN 的示例:

// iframe can be embedded in pages on the origin and also on https://www.example.org
Content-Security-Policy: frame-ancestors 'self' https://www.example.org;

有关详细信息,请参阅:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors