c# - mvc - La mejor forma de restringir el acceso por dirección IP?
authorized asp net mvc (3)
Para una aplicación ASP.NET C #, necesitaremos restringir el acceso en función de la dirección IP. Cuál es la mejor manera de lograr esto?
Aquí hay un artículo de Microsoft sobre cómo hacer esto.
Configuración de la seguridad de la carpeta por dirección IP o nombre de dominio
Apache usa las directivas Permitir y Denegar para determinar los sitios que pueden acceder a un sitio web o carpeta en particular. Sin embargo, Apache proporciona control de acceso discrecional; debe denegar todos los sitios y proporcionar una lista específica de sitios o direcciones IP que pueden acceder a una carpeta o permitir todos los sitios y denegar solo aquellos sitios a los que no desea acceder. Por ejemplo, si usa la siguiente directiva, se denegará el acceso a todas las computadoras cliente a menos que se reconozcan como parte del dominio domain.com:
Negar todo
Permitir desde .dominio.com
IIS funciona de la misma manera. Todos los clientes se les niega o se les concede acceso específicamente, a excepción de los que se enumeran.
Definir control de acceso para una carpeta específica o sitio
- Inicie sesión en la computadora del servidor web como administrador.
- Haga clic en Inicio, señale Configuración y luego haga clic en Panel de control.
- Haga doble clic en Herramientas administrativas y luego haga doble clic en Administrador de servicios de Internet.
Si desea limitar el acceso para todo el sitio, seleccione el sitio web de la lista de diferentes sitios servidos en el panel izquierdo.
Si desea limitar el acceso solo para una carpeta específica, haga clic en la carpeta que desea controlar.
- Haga clic con el botón derecho en el sitio web o carpeta, y luego haga clic en Propiedades.
- Haga clic en el panel de Seguridad del directorio.
- Si desea limitar el acceso a un conjunto específico de sitios, pero denegar el acceso a todos los demás sitios, haga clic en Acceso denegado.
- Si desea otorgar acceso a todos los clientes de forma predeterminada pero excluye una lista específica de clientes, haga clic en Acceso otorgado.
- Para actualizar la lista de hosts o dominios en la lista Excepto, haga clic en Agregar.
- Para agregar una sola computadora a la lista, haga clic en Computadora individual, escriba la dirección IP en el cuadro apropiado y luego haga clic en Aceptar.
- Para agregar un rango de computadoras en un rango de direcciones específico, haga clic en Grupo de computadoras, escriba la dirección IP de la red en el cuadro apropiado, escriba la máscara de subred para el rango de red que desea configurar y luego haga clic en Aceptar.
- Para agregar computadoras por su nombre de dominio identificado, haga clic en Nombre de dominio y luego escriba el nombre de dominio en el cuadro correspondiente.
- Haga clic en Propiedades, escriba el nombre de dominio y luego haga clic en Aceptar.
- Haga clic en Aceptar y luego en Aceptar.
NOTA : Si usa restricciones de nombre de dominio, el servidor tiene que realizar una búsqueda DNS inversa para cada solicitud para verificar el nombre de dominio registrado del host. Microsoft recomienda que use una dirección IP o rango de red siempre que pueda.
En IIS 7 la mejor manera de restringir IP es mediante el uso del archivo de configuración.
Articulo completo:
http://boseca.blogspot.com/2010/12/programmatically-addremove-ip-security.html
Una forma es usar un HttpModule .
Desde el enlace (en caso de que desaparezca):
/// <summary>
/// HTTP module to restrict access by IP address
/// </summary>
public class SecurityHttpModule : IHttpModule
{
public SecurityHttpModule() { }
public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(Application_BeginRequest);
}
private void Application_BeginRequest(object source, EventArgs e)
{
HttpContext context = ((HttpApplication)source).Context;
string ipAddress = context.Request.UserHostAddress;
if (!IsValidIpAddress(ipAddress))
{
context.Response.StatusCode = 403; // (Forbidden)
}
}
private bool IsValidIpAddress(string ipAddress)
{
return (ipAddress == "127.0.0.1");
}
public void Dispose() { /* clean up */ }
}
Una vez que se construye la clase del Módulo HTTP, debe registrarla en la sección httpModules de su archivo web.config, de esta manera:
<configuration>
<system.web>
<httpModules>
<add name="SecurityHttpModule" type="SecurityHttpModule"/>
</httpModules>
</system.web>
</configuration>
Esto agrega el módulo a la canalización de solicitudes de ASP.NET para su aplicación web.