2015-05-21 17 views
8

我正在開發一個ASP.NET MVC應用程序,需要在另一個網站的iframe中加載。但登錄頁面不會出現在iframe內部,因爲在響應X-Frame-Options中發送了標題,該響應設置爲SAMEORIGIN。因此,瀏覽器不會在iframe中顯示頁面。我已經谷歌並嘗試了多種東西,但沒有任何工作。刪除僅在登錄頁面中自動添加的X框架選項

我正在使用ASP.NET表單身份驗證。在這種情況下,IIS可以在登錄頁面中添加此標題以增加安全性。但我需要在我的用例中擺脫這一點。

我嘗試添加自定義標題

<httpProtocol> 
    <customHeaders> 
    <add name="X-Frame-Options" value="ALLOW" /> 
    </customHeaders> 
</httpProtocol> 

SAMEORGIN仍在與逗號頭加入。

我也嘗試使用Response.Headers["X-Frame-Options"] = "ALLOW"從C#中添加Header值。它會導致兩個具有相同名稱的標題。

我也是在web.config中

<customHeaders> 
    <remove name="X-Frame-Options" /> 
</customHeaders> 

它也沒有工作嘗試這個。

+1

嘗試增加了此信息的Application_Start()方法中的Global.asax:'System.Web.Helpers.AntiForgeryConfig.SuppressXFrameOptionsHeader = TRUE;'。 MVC 5自動添加了X-Frame-Options標頭 –

+1

您似乎正在做的一切正確,有可能您的登錄頁面不是您正在進行配置更改的應用程序的一部分。 –

+0

@ShashankChaturvedi我的登錄頁面是同一個應用程序的一部分。 – shashwat

回答

18

MVC 5自動添加X框選項頭,所以去你Global.asax文件,將其添加到Application_Start()方法:

System.Web.Helpers.AntiForgeryConfig.SuppressXFrameOptionsHeader = true; 

請注意,尤其是對於一個登錄頁面,這是不好的做法,刪除此標題,因爲它會打開您的網站以獲取登錄憑據的釣魚攻擊。因此,如果您的這個網站是公開訪問的,我強烈建議保留此標題。

+0

感謝您的提示,但我需要在'iframe'內打開我的登錄頁面。 – shashwat

1

老問題,但對於其他人尋找類似的問題,你可以使用下述溶液去除的具體行動X-Frame-Options

首先,在Global.asax.cs添加此代碼方法Application_Start(如@Florian海德爾說) :

System.Web.Helpers.AntiForgeryConfig.SuppressXFrameOptionsHeader = true; 

這將抑制一切行動頭。添加包含下面的代碼名爲NoIframeAttribute.cs一個新的文件:

using System.Web.Mvc; 

namespace MyApplication 
{ 
    public class NoIframeAttribute : ActionFilterAttribute 
    { 
     public override void OnActionExecuting(ActionExecutingContext filterContext) 
     { 
      filterContext.HttpContext.Response.Headers.Set("X-Frame-Options", "SAMEORIGIN"); 
     } 
    } 
} 

以下行添加到RegisterGlobalFilters方法FilterConfig.cs

filters.Add(new NoIframeAttribute()); 

現在,我們再次向所有行動的頭。但現在我們可以在需要時將其刪除。只需添加以下行需要的地方:

Response.Headers.Remove("X-Frame-Options");