【问题标题】:Detect if a page is within a iframe - serverside检测页面是否在 iframe 中 - 服务器端
【发布时间】:2010-11-13 20:10:06
【问题描述】:

如果加载的页面在 iframe 中,我如何检测服务器端(c#、asp.net mvc)?谢谢

【问题讨论】:

    标签: c# asp.net html asp.net-mvc


    【解决方案1】:

    但是这是不可能的。

    <iframe src="mypage?iframe=yes"></iframe>
    

    然后检查服务器端是否查询字符串包含 iframe=yes 或者使用浏览器发送的Referer头。

    【讨论】:

    • 谢谢,但这并不能解决我的问题,因为我希望只有在 iframe 中才能访问页面(出于某些安全原因)。向查询字符串添加一些东西太容易了,不安全。
    • 如果是出于安全原因,那么您做错了什么。充其量,唯一可能让您知道在 iframe 中的是引用。甚至那是可以伪造的。安全性是通过访问检查和验证来实现的,而不是通过脆弱的假设网络来实现的。
    【解决方案2】:

    在表单中使用以下代码:

    <asp:HiddenField ID="hfIsInIframe" runat="server" />
    <script type="text/javascript">
        var isInIFrame = (self != top);
        $('#<%= hfIsInIframe.ClientID %>').val(isInIFrame);
    </script>
    

    然后您可以在代码隐藏中轻松检查它是否是 iFrame:

    bool bIsInIFrame = (hfIsInIframe.Value == "true");
    

    经过测试并为我工作。

    编辑:请注意,您需要 jQuery 来运行我上面的代码。要在不使用 jQuery 的情况下运行它,只需使用以下代码(未经测试)来设置隐藏字段的值:

    document.getElementById('<%= hfIsInIframe.ClientID %>').value = isInIFrame;
    

    编辑 2:这仅在页面加载一次时有效。如果有人有想法来改进这一点,请告诉我。就我而言,幸运的是,我只需要回发后的值。

    【讨论】:

    • 这应该是答案。
    • 不@RoyiNamir,这不是服务器端解决方案;)
    • @tetri,使用此代码,您可以从服务器端检查您是否在 iframe 中。我同意,有一些客户端代码 - 但在我看来,这是最好的解决方案,因为它不关心页面是如何被调用的。当前接受的答案要求在每个 iframe 中设置请求值 - 这可能会被遗忘。
    • 这个答案的唯一问题是它需要页面运行一次,因此该值将被填充。因此,它需要在加载后基本上完成的某个地方:If Not IsPostback Then Postback()
    【解决方案3】:

    如您在@WTP 的回答中所述,无法检查是否符合您对“安全”的要求。

    【讨论】:

      【解决方案4】:

      我认为服务器端无法做到这一点,那么为什么不在 iframe 中的页面中放置一个隐藏控件呢?当 iframe 中的 URL 加载时,您可以添加一些客户端代码来设置隐藏输入以指示您在 iframe 中。最简单的检查是在客户端的 onload 方法中,如下所示:

      // Set hidden input
      someHiddenInput.value = self != top
      

      它比查询字符串更安全,但对您来说仍然可能不够安全。

      我的 2 美分。

      【讨论】:

        【解决方案5】:

        老问题,但为什么不采用更简单的方法,例如

        var isFramed = self !== parent
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-05-17
          • 1970-01-01
          • 2015-10-05
          • 1970-01-01
          • 1970-01-01
          • 2020-06-28
          • 1970-01-01
          相关资源
          最近更新 更多