Podría hacer esto con un Módulo HTTP personalizado, escrito en ASP.NET. Se requiere ASP.NET para ejecutar el módulo, aunque el resto de su implementación no necesita estar en ASP.NET. Tenga en cuenta que este código no se ha probado, pero debería ponerlo en la línea correcta. Por supuesto, esto no implementa la lógica completa descrita en mi otra respuesta para tratar con CSRF usando Origin
, así que solo ofrece cierta protección (es decir, no hay protección del navegador anterior).
Ejemplo adaptado de Tutorial: Crear y registrar un módulo HTTP personalizado .
Crear módulo
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() { }
}
Para registrar el módulo para IIS 6.0 e IIS 7.0 ejecutándose en modo Clásico
<configuration>
<system.web>
<httpModules>
<add name="HelloWorldModule" type="HelloWorldModule"/>
</httpModules>
</system.web>
</configuration>
Para registrar el módulo para IIS 7.0 que se ejecuta en modo integrado
<configuration>
<system.webServer>
<modules>
<add name="HelloWorldModule" type="HelloWorldModule"/>
</modules>
</system.webServer>
</configuration>
Cuando esté ejecutando MVC, asegúrese de modificar el que está en la raíz (no en la carpeta Views
).