C# 检查iFrame是否由允许的域承载
我正在开发一个iframe,用于我们的一些合作伙伴网站 我有没有办法确保它只能在那些网站上使用,其他人不能使用 我打算在网站的URL中添加一个强制查询字符串。 每个合作伙伴在Quesrysting dnd中都有不同的值,使用该值查找允许的域 但是,是否仍需要知道承载iframe的站点的顶级域 假设这不是在iFrame的http请求中发送的?还是我看不见 或者您需要从javascript发送域吗C# 检查iFrame是否由允许的域承载,c#,javascript,html,http,C#,Javascript,Html,Http,我正在开发一个iframe,用于我们的一些合作伙伴网站 我有没有办法确保它只能在那些网站上使用,其他人不能使用 我打算在网站的URL中添加一个强制查询字符串。 每个合作伙伴在Quesrysting dnd中都有不同的值,使用该值查找允许的域 但是,是否仍需要知道承载iframe的站点的顶级域 假设这不是在iFrame的http请求中发送的?还是我看不见 或者您需要从javascript发送域吗 有什么建议吗?您可以尝试检查哪个普通浏览器将在页面上发送IFrame请求 您也可以使用(和)中包含的“
有什么建议吗?您可以尝试检查哪个普通浏览器将在页面上发送IFrame请求 您也可以使用(和)中包含的“x-frame-options”标题,但并不是每个浏览器都会尊重这一点(另一方面,如果浏览器支持它,则更可靠) 但是,是否仍需要知道承载iframe的站点的顶级域 没有什么可靠的 假设这不是在iFrame的http请求中发送的?还是我看不见 它可能在推荐信中发送 或者您需要从javascript发送域吗 如果您想从框架页面获取它,您将被同源策略阻止 如果您想从框架页面发送它,您将把它放在查询字符串中,您不能信任它,因为它可以设置为编写框架页面的人喜欢的任何内容 还有(但浏览器支持有限) 我能想到的最可靠的解决方案是:
target=“\u top”
和一些top.location=“您的站点”
X-Frame-Options
标题,该标题将帧限制在指定的原点这可能会捕获足够多的浏览器,阻止构建站点构建您的站点。iframe的sanbox属性可能有助于控制iframe中的各种安全方面,包括源代码
2007年《建筑杂志》有一篇关于这方面的好文章: 这篇文章的基本建议是: 如果域1上的A页带有一个iframe,而域2上的B页是它的源,那么在域1上的B页到C页之间有一个iframe,将允许您跨域传递信息 我还没有测试过,但这听起来好像可以工作
另一种可能是创建一个具有特殊文件名(例如域2上的页面B的URL哈希)和基本扩展名(如.htm)的文件,并将其放置在域1的根目录中。但是,javascript无法检查域1上是否存在该文件,因此应该使用服务器端代码进行检查。+0-除非我完全弄错了,否则沙盒允许父级控制IFrame的行为,这与OP要求的相反-如何从IFrame控制其允许工作的位置。+1。(细节比我的多——太好了)。我认为最可靠的选择是通过
postMessage
获取家长的来源,因为浏览器中没有任何东西可以改变消息的来源(但OP已经介绍了这个选项“或者您需要从javascript发送域吗”)。您对本文中的第二个答案有何看法?我可以将window.parent.location.href或top.locatio.href与白名单url进行比较吗?这是我的iframe。我可以将白名单上的站点注入iframe的javascript中。这是个好方法吗?哪一秒?三种是三种不同的答案分类方式。我可以将window.parent.location.href或top.locatio.href与白名单url进行比较吗?-不可以。当其他帧指向不同的域时,您无法读取它们的位置。答案是parentIsSameOrigin()函数。我想我可以将parent.location.href与注入javascript的白名单url(都在iframe中)进行比较,而不是检查它们是否是相同的来源。您是说您不能从iFrame读取父帧的URL吗?如果父帧(或任何不同的)帧位于同一原点,您只能读取其URI。否则,您可以通过构建第三方站点来获取有关用户的潜在敏感数据。