【问题标题】:How to disable open ASP.NET MVC site in IFrame?如何在 IFrame 中禁用打开的 ASP.NET MVC 站点?
【发布时间】:2014-02-11 01:09:58
【问题描述】:

正如我在主题中已经提到的,我有一个 MVC 站点,我需要禁用将其加载到 IFrame 中。

我为测试目的创建了一个简单的页面,并尝试将我的网站和 Google.com 加载到两个 IFrame 中。我可以看到我的网站已加载,但 Google 没有。这意味着有必要更改我的 MVC 站点中的某些内容。

<!DOCTYPE html>
<html>
<body>

<iframe src="http://localhost:61831/" width="1200" height="800">
  <p>Your browser does not support iframes.</p>
</iframe>

<iframe src="http://google.com" width="1200" height="800">
  <p>Your browser does not support iframes.</p>
</iframe>

</body>
</html>

那么我必须在 MVC 网站中写什么以及在哪里实现这一点?

【问题讨论】:

标签: asp.net-mvc asp.net-mvc-4 iframe


【解决方案1】:

可以使用X-Frame-Options HTTP header 属性来避免在 IFrame 中打开 ASP.NET MVC 应用程序。

有几种不同的方法可以将此属性插入到 HTTP 标头中:

1.Configure IIS 将此属性添加到所有 HTTP 响应中

2.在每个控制器的每个必要的动作方法中设置这个属性

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            Response.AppendHeader("X-Frame-Options", "SAMEORIGIN");
            return View();
        }
    }

3.以here 描述的方式创建 C# 属性并将其应用于操作方法和控制器

    [HttpHeader("X-Frame-Options", "SAMEORIGIN")]
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
        }
    }

4.在Global.asax文件中设置该属性

public class MvcApplication : HttpApplication
{
    protected void Application_Start()
    {
        ...
    }

    protected void Application_PreSendRequestHeaders(object sender, EventArgs e)
    {
        Response.AppendHeader("X-Frame-Options", "SAMEORIGIN");
    }
}

【讨论】:

    【解决方案2】:

    简单快捷的解决方案是在 Global.asax 中添加以下内容 -

    protected void Application_PreSendRequestHeaders(object sender, EventArgs e)
    {
        Response.AddHeader("X-Frame-Options", "SAMEORIGIN");
    }
    

    那就试试iframe吧。页面不会在 iframe 中打开。 HTH。

    【讨论】:

    • 这是我需要的,但这里有个小错误:应该是Application_PreSendRequestHeaders而不是Application_PreSendRequestContent
    • 我编辑了答案。如果我的回答对您有帮助,请将其标记为帮助回答。
    【解决方案3】:

    您也可以在 web.config 中添加一个条目:

    <system.webServer>
      ...
      <httpProtocol>
        <customHeaders>
          <add name="X-Frame-Options" value="SAMEORIGIN" />
        </customHeaders>
      </httpProtocol>
      ...
    </system.webServer>
    

    【讨论】:

      【解决方案4】:

      您可以将 IIS 配置为始终在其响应中附加 X-Frame-Options SAMEORIGIN 标头。

      • 从 IIS 管理控制台中,选择您的应用程序。
      • 在主面板中,双击 Http Response Headers。
      • 单击右上方窗格中的添加。
      • 将名称设置为X-Frame-Options,然后将值设置为SAMEORIGIN 点击确定。

      这应该可以防止您的网站被加载到不同主机上的 iframe 中,无需使用任何 javascript 或任何额外代码

      请参阅developper.mozilla.org 以获取标头文档,technet.microsoft.com 了解 IIS 的配置。

      【讨论】:

        【解决方案5】:

        正如 DrewMan 建议的那样,您想使用 X-Frame-Options 标头。

        我建议你下载 Nuget 包 NWebsec 并有 MVC specific package。另请查看configuration 部分。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-01-06
          • 2023-03-30
          • 2011-06-23
          • 1970-01-01
          • 1970-01-01
          • 2021-12-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多