2015-05-21 6 views
8

Sto sviluppando un'applicazione ASP.NET MVC che deve essere caricata all'interno di un iframe in un altro sito Web. Ma la pagina di accesso non apparirà all'interno dello iframe perché nella risposta è stata inviata un'intestazione X-Frame-Options, impostata su SAMEORIGIN. Il browser non sta visualizzando la pagina in iframe per questo motivo. Ho già cercato su Google e provato più cose, ma non ha funzionato.Rimozione di X-Frame-Options aggiunte automaticamente solo nella pagina di login

Sto utilizzando l'autenticazione di moduli ASP.NET. Potrebbe essere in questo caso, IIS aggiunge questa intestazione nella pagina di accesso per maggiore sicurezza. Ma ho bisogno di liberarmi di questo nel mio caso d'uso.

Ho provato ad aggiungere un'intestazione personalizzata

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

Ma la SAMEORGIN è ancora in fase di aggiunta nell'intestazione con virgola.

Ho anche provato ad aggiungere il valore dell'intestazione da C# utilizzando Response.Headers["X-Frame-Options"] = "ALLOW". Causa due intestazioni con lo stesso nome.

Ho provato anche questo nel web.config

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

Inoltre, non ha funzionato.

+1

Prova ad aggiungere questo al vostro Application_Start() all'interno Global.asax: 'System.Web.Helpers.AntiForgeryConfig.SuppressXFrameOptionsHeader = true;'. MVC 5 aggiunge automaticamente un'intestazione X-Frame-Options –

+1

Sembra che tu stia facendo tutto bene, è possibile che la tua pagina di accesso non faccia parte dell'applicazione in cui stai modificando la configurazione. –

+0

@ShashankChaturvedi La mia pagina di accesso è la parte della stessa applicazione. – shashwat

risposta

18

MVC 5 aggiunge automaticamente una X-Frame-Options Header, in modo da andare al file Global.asax e aggiungere questo al metodo Application_Start():

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

Si prega di notare che, soprattutto per una pagina di login che è cattiva pratica di rimuovi questa intestazione perché apre il tuo sito per gli attacchi di phishing delle credenziali di accesso. Quindi, se questo sito è pubblicamente accessibile, ti consiglio vivamente di mantenere questa intestazione.

+0

Grazie per la nota, ma ho bisogno di aprire la mia pagina di login all'interno di un 'iframe'. – shashwat

1

vecchia questione, ma per altre persone in cerca di domanda simile, è possibile rimuovere il X-Frame-Options in azioni specifiche utilizzando la seguente soluzione:

In primo luogo, aggiungere questo codice al metodo di Application_Start in Global.asax.cs (come ha detto @Florian Haider) :

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

Ciò sopprimere l'intestazione in tutte le azioni . Aggiungere un nuovo file chiamato NoIframeAttribute.cs che contiene il seguente codice:

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"); 
     } 
    } 
} 

Aggiungere la seguente riga alla RegisterGlobalFilters metodo FilterConfig.cs:

filters.Add(new NoIframeAttribute()); 

Ora, abbiamo l'intestazione aggiunto a tutte le azioni di nuovo. Ma ora possiamo rimuoverlo quando necessario. Basta aggiungere la seguente riga ovunque sia necessario: metodo

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