2010-02-25 10 views
16

Tengo una página en una aplicación ASP.Net (su Mvc es real pero no es importante) y me gustaría permitir solo las conexiones a esta página de la máquina local. Me gustaría hacer algo como esto en Web.config:¿Es posible configurar una ubicación en Web.config para permitir solo las conexiones locales?

<location path="resources"><system.web><authorization><allow ips="local"/></authorization></system.web></location> 

Sé que esto es posible con una simple comprobación en el código de la página detrás (o controlador) y its even possible just with IIS configuration pero me encantaría una configuración Web.config esta sería la solución más elegante en mi opinión. ¿Alguien sabe si esto es posible?

Gracias

Guido

+0

¿Están sus usuarios en un dominio de Windows? De ser así, podría restringir el acceso solo a los Usuarios del Dominio. Se parecería mucho a la respuesta de @ lance. – jrummell

+0

Nota: Esto no es posible, todas las soluciones requieren código de escritura (no hay solución disponible) – gatapia

Respuesta

4

Esto no es lo que pidieron, pero se puede especificar los usuarios de   la máquina local. No me puedo imaginar que esto sea práctico a menos que sea una pequeña cantidad de usuarios que quiera autorizar.

<location path="resources"> 
    <system.web> 
    <authorization> 
     <allow users="LOCALMACHINENAME\UsernameOfTrustedUser"/> 
     <deny users="*"/> 
    </authorization> 
    </system.web> 
</location> 
+0

Hola Lance, Esto no ayudará ya que es el usuario de IIS que ejecutará esta página periódicamente y actualmente no soy 'Suplantación' por lo todos los usuarios serían los usuarios de IIS. – gatapia

+0

¿Has probado esta sugerencia? Deberia de funcionar. El uso de "Suplantación de identidad" no es relevante para el ejemplo de autenticación aquí. –

0

Usted puede crear su propia sección de configuración que sería parte de su web.config y luego usar la configuración para controlar el comportamiento en global.asax Session_Start.

2
  1. inventar un alias no DNS para la máquina, es decir, "PrivateHostName".
  2. Establezca este valor en el archivo de hosts local para que apunte a 127.0.0.1.
  3. Establezca un encabezado de host (IIS) para el sitio web de manera que solo responda a las solicitudes de dirección "PrivateHostName".
  4. Para todas las llamadas locales use el nombre de host privado.

Los clientes remotos no podrán resolver el nombre de host.

Puede protegerlo más utilizando una dirección IP dedicada vinculada a un adaptador de red virtual que en realidad no respondería a solicitudes externas.

+5

Solución no segura. Hacker puede agregar este alias a su archivo de hosts local y obtener acceso al sitio web. – meir

25

Puede pedir IIS para restringir el acceso a un recurso de dirección IP desde dentro del Web.config:

<location path="resources"> 
    <system.webServer> 
    <security> 
     <ipSecurity allowUnlisted="false"> 
     <clear/> 
     <add ipAddress="127.0.0.1"/> 
     </ipSecurity> 
    </security> 
    </system.webServer> 
</location> 

More info

EDIT: Como Mike lo señaló en el comentario más abajo, esto requiere el módulo de Restricciones de Dominio e IP a ser instalado. Gracias Mike!

+7

Gracias por la respuesta. Para empezar, esto no funcionó: la configuración simplemente parecía ser ignorada por IIS. Finalmente me di cuenta de que en Windows 7, el módulo de Restricciones de Dominio e IP no está instalado por defecto. Para que funcione, tuve que hacerlo en 'Panel de control> Programas y características> Activar o desactivar las características de Windows> Servicios de Internet Information> World Wide Web Services> Seguridad 'y marcar' IP Security '. –

+0

Esto parece funcionar muy bien, pero ¿sabes cómo cambiar el resultado de la página? Obtengo un código de estado 200 y la página dice: "Acceso desde remoto no permitido (2)". – Redtopia

+0

@Redtopia: puede agregar una página de error 403. En el Web.config que se necesita: < /system.webServer> – Daniel

1

Me pareció útil también, si desea especificar un rango de direcciones IP. Puede agregar el siguiente bloque de código a web.config

<system.webServer> 
    <security> 
     <ipSecurity allowUnlisted="false"> 
      <clear/> 
      <add ipAddress="95.110.115.0" subnetMask="255.255.255.0"/> 
      <!--blocks range 95.110.115.0 to 95.110.115.255-->  
      <add ipAddress="95.110.0.0" subnetMask="255.255.0.0"/>  
      <!--blocks range 95.110.0.0 to 95.110.255.255-->  
      <add ipAddress="95.0.0.0" subnetMask="255.0.0.0"/>   
      <!--blocks range 95.0.0.0 to 95.255.255.255--> 
     </ipSecurity> 
    </security> 
</system.webServer> 
Cuestiones relacionadas