Potresti farlo con un modulo HTTP personalizzato, scritto in ASP.NET. È necessario che ASP.NET esegua il modulo, sebbene il resto della distribuzione non sia necessario in ASP.NET. Nota che questo codice non è stato verificato, ma dovrebbe metterti sulla linea giusta. Naturalmente questo non implementa la logica completa descritta in la mia altra risposta per trattare con CSRF usando Origin
, quindi offre solo una certa protezione (cioè nessuna vecchia protezione del browser).
Esempio adattato da Procedura dettagliata: creazione e registrazione di un modulo HTTP personalizzato .
Crea modulo
using System;
using System.Web;
public class HelloWorldModule : IHttpModule
{
public HelloWorldModule()
{
}
public String ModuleName
{
get { return "HelloWorldModule"; }
}
// In the Init function, register for HttpApplication
// events by adding your handlers.
public void Init(HttpApplication application)
{
application.BeginRequest +=
(new EventHandler(this.Application_BeginRequest));
}
private void Application_BeginRequest(Object source,
EventArgs e)
{
// Create HttpApplication and HttpContext objects to access
// request and response properties.
HttpApplication application = (HttpApplication)source;
HttpContext context = application.Context;
if (context.Request["Origin"] != "https://www.example.com")
{
// Deny request - spit out 403
}
}
public void Dispose() { }
}
Per registrare il modulo per IIS 6.0 e IIS 7.0 in esecuzione in modalità classica
<configuration>
<system.web>
<httpModules>
<add name="HelloWorldModule" type="HelloWorldModule"/>
</httpModules>
</system.web>
</configuration>
Per registrare il modulo per IIS 7.0 in esecuzione in modalità integrata
<configuration>
<system.webServer>
<modules>
<add name="HelloWorldModule" type="HelloWorldModule"/>
</modules>
</system.webServer>
</configuration>
Mentre esegui MVC, assicurati di modificare quello nella root (non la cartella Views
).