Proteger carpetas, accesso solo para administradores con web.config

Si trabajamos con un sitio dinamicon en ASP.NET normalmente existe una interfaz de administracion donde se pueden hacer cambios en el sitio.

Esta interfaz tiene que estar siempre protregida para que solo los usuarios que deban actualizar el sitio o los administradores del sitio puedan acceder a ella y no se debe permitir acceso como usuario anonimo o como cualquier otro tipo de usuario.

En ASP.NET existen los llamados Roles, que permiten clasificar los tipos de usuario, lo ideal seria crear al menos 2 tipos de usuario, un tipo “user” y un tipo “admin” (se pueden poner cualquier nombre pero a modo de ejemplo es mas explicativo asi).

Una vez que tenemos los roles creados y funcionando para proteger una carperta y solo dar acceso al Rol de “admin” lo unico que necesitamos hacer es crear un archivo web.config y agregar las lineas de codigo que tenemos abajo:

<?xml version=”1.0″ encoding=”utf-8″?>
<configuration>
<system.web>
<authorization>
<allow roles=”admin” />
<deny users=”*” />
</authorization>
</system.web>
</configuration>

No hace falta agregar nada mas, con esto es suficiente, si, es un web.config bastante pequeño y sencillo.

Si no se desea crear roles y solo se quiere dar acceso a ciertos usuarios, tambien se puede hacer, la unica diferencia seria que en vez de permitir el acceso a un Rol se permitira el acceso a un usuario, en vez de utilizar “allow roles” se utilizara “allow users” y se pondra el nombre del user que se desee dar acceso, la segunda linea queda igual simplemente deniega el acceso a todos los demas usuarios con deny users=”*”  donde “*” significa todos,  Ejemplo:

<?xml version=”1.0″ encoding=”utf-8″?>
<configuration>
<system.web>
<authorization>
<allow users=”george” />
<deny users=”*” />
</authorization>
</system.web>
</configuration>

Otra cosa que podemos hacer con este codigo es proteger una carpeta de usuarios anonimos (no autenticados), para esto podemos utilizar <deny users=”?” /> lo que significa eso, denegar acceso a todos los usuarios anonimos.

Habilitar CACHE para sitios web en entorno Windows con IIS

Una forma de hacer que un sitio web cargue mas rapidamente a la ves y el servidor tenga menos carga es habilitando el control de Cache sobre recursos estaticos de la web que no cambiaran con frecuencia, como por ejemplo ciertas imagenes, archivos js o hojas de estilos (siempre y cuando la web no este en fase de desarrollo).

Para hacer esto en un entorno Windows con IIS solo necesitamos agregar unas cuantas lineas al archivo web.config

<system.webServer>

<staticContent>
<clientCache cacheControlCustom=”public”
cacheControlMaxAge=”8640:00:00″ cacheControlMode=”UseMaxAge” />
<remove fileExtension=”.js” />
<mimeMap fileExtension=”.js” mimeType=”text/javascript” />
<remove fileExtension=”.css” />
<mimeMap fileExtension=”.css” mimeType=”text/css” />
</staticContent>

</system.webServer>

Ahora solo hara falta agregar todos los mimeTypes que se deseen poner en Cache.

Una herramienta interesante y gratuita de Google para comprobar que archivos podriamos poner en Cache, ademas de dar muchas otras sugerencias es Page Speed Insights se puede acceder desde aqui:

https://developers.google.com/speed/pagespeed/insights

Solo tenemos que ingresar la URL de la Web a analizar y obtendremos todas las sugerencias necesarias para optimizarla y hacerla mas rapida.

Otra herramienta gratuita es la de Yahoo, esta da otras sugerencias un tanto distintas de la anterior se llama YSlow la podras acceder desde aqui:

http://yslow.org/

Por ultimo tenemos a GTmetrix.com que no hace otra cosa que analizar la web con PageSpeed Insights y YSlow y mostrar los resultados!, una manera aun mas rapida de ver las sugerencias y analizar el tiempo de carga de nuestra web!.

Como incluir Vary: Accept-Encoding en el Header de las paginas con ASP.NET y Apache

Es posible que algunos usuarios por algun motivo no tengan habilitado la compatibilidad con datos comprimidos como por ejemplo gzip, algunos bugs en ciertos  proxies públicos pueden llevar a las versiones comprimidas de los recursos de que se sirve a los usuarios que no son compatibles con la compresión. Especificación de la Vary: Accept-Encoding cabecera indica al proxy para almacenar una versión de comprimido y sin comprimir del recurso lo que garantiza que no abran problemas con la carga de la pagina, y tambien garantiza una carga mas rapida de la pagina si se utilizan los recursos comprimidos.

Si trabajamos en un entorno Windows con IIS podemos incluirlo facilmente a travez del archivo web.config solo es necesario agregar las siguientes lineas:

<system.webServer>
<httpProtocol>
<customHeaders>
<remove name=”Vary”></remove>
<add name=”Vary” value=”Accept-Encoding”></add>
</customHeaders>
</httpProtocol>
</system.webServer>

Si se trata de un entorno Linux con Apache entones lo haremos con el archivo .htaccess incluyendo las siguientes lineas:

<IfModule mod_headers.c>
  <FilesMatch “\.(js|css|xml|gz|html)$”>
    Header append Vary: Accept-Encoding
  </FilesMatch>
</IfModule>

Con  esto ya lo tendriamos funcionando!