You are on page 1of 3

Cmo forzar la configuracin correcta de ASP.

NET en un servidor
Existen una serie de ajustes en aplicaciones Web que deberamos cuidar especialmente cuando las despleguemos en
un servidor en produccin. Se trata de caractersticas que, de estar mal establecidas en un servidor abierto a
cualquiera a travs de Internet, pueden suponer un problema de seguridad o mermar el rendimiento de una
aplicacin.
En este artculo vamos a estudiar dos de estos ajustes crticos, lo que suelen hacer mal los programadores con ellos
y cmo podemos forzar su correcto uso en servidores de produccin.
Depuracin
Cuando estamos desarrollando una aplicacin Web con ASP.NET (tanto Web Forms como MVC) establecemos una
serie de configuraciones que nos facilitan la depuracin de las mismas: mensajes de error detallados, depuracin
paso a paso, trazas del cdigo, etc
Existe un ajuste en la configuracin de la aplicacin Web (archivo web.config) que controla de manera global el
estado de depuracin y, por tanto, todas estas caractersticas:
<compilation debug=true/>
Es ms, cuando lanzamos por primera vez una aplicacin Web desde Visual Studio pulsando F5, se nos muestra
una ventana de confirmacin para establecer de manera automtica este ajuste y que funcionen todas las
caractersticas de depuracin:

Al aceptar la opcin por defecto se establece este ajuste automticamente por nosotros:

Aunque est muy bien mientras desarrollamos, se trata de algo inaceptable en un servidor en produccin, una vez
que la aplicacin est terminada y puesta a funcionar en su ubicacin definitiva.
El principal motivo para desaconsejar el ajuste debug=true en produccin es que obtendremos menos rendimiento
en la aplicacin, ya que el cdigo de depuracin generado es menos eficiente.
Es muy habitual que los desarrolladores se olviden de desactivar la depuracin en el web.config antes de subir la
aplicacin al servidor.
Detalles de los errores
Otro ajuste que es frecuente encontrarse mal establecido es el relativo a los mensajes detallados de error. Si
colocamos el ajuste:
<customErrors mode="On">
en la configuracin, siempre que se produzca un error no controlado se mostrarn los detalles a travs de la
tpica pgina amarilla de la muerte (YSOD), que es como se conoce a las habituales pginas de error de
ASP.NET.
JAMS debemos dejar que nuestras aplicaciones muestren los detalles de los errores a los usuarios. Aparte
de denotar dejadez por parte de los programadores y falta de calidad de las aplicaciones, a los usuarios tampoco les
van a decir nada. Pero es que adems mostrar esa informacin detallada de los errores revela multitud de
informacin sobre cmo estn hechas las aplicaciones e incluso, en casos extremos de chapuza, pueden
revelar claves, estructuras de directorios, estructuras de bases de datos, etc Esto proporciona informacin
importante a posibles asaltantes de nuestro servidor, que pueden usarla para atacar nuestra aplicacin.
Sin rodeos: mostrar detalles de los errores es una de las peores prcticas de seguridad universalmente
reconocidas.
Una vez ms, suele ser habitual que los desarrolladores suban aplicaciones a produccin con este ajuste establecido.
Cmo podemos evitar estas malas prcticas?
Si somos responsables de algn servidor Web en produccin sera muy conveniente que pudisemos forzar de
algn modo que los programadores cumplieran las buenas prcticas.
Esto es lo que podemos conseguir usando un ajuste poco conocido: <deployment retail>
Este ajuste slo se puede indicar en la configuracin global del servidor, es decir, en el
archivomachine.config ubicado en C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config o similar (vale
tambin para la versin 2.0 o superior de .NET).

Si abrimos este archivo y buscamos la seccin configurationsystem.web podemos establecer dicho atributo a true
as:
<configuration>
<system.web>
<deployment retail=true/>
</system.web>
</configuration>
Al hacerlo, da exactamente igual que el programador se haya olvidado de quitar el debug=true, las trazas o las
pginas de error detalladas, ya que este ajuste prevalece sobre los locales de nuestra aplicacin y deshabilita
todas estas funciones.
Adems, si vemos su definicin en el mismo archivo machine.config, vemos que tiene establecido el atributo
AllowDefinition=MachineOnly:

Esto significa que no podr ser sobrescrito por configuraciones en niveles inferiores, es decir, que aunque algn
programador intentase saltrselo poniendo lo mismo (pero a false) en el web.config, recibira un error indicndole
que no se puede sobrescribir e impedira que la aplicacin funcionase.
Por todo ello, este poco conocido pero importante ajuste es algo que todos deberamos asegurarnos de utilizar en
los servidores que tengamos en produccin.

You might also like