Compartir a través de


Seguridad de controles estándar

Actualización: noviembre 2007

Los controles estándar de ASP.NET son un grupo de controles que permiten crear formularios en los que los usuarios pueden escribir o seleccionar información antes de que una página se devuelva al servidor. Los controles estándar son controles de servidor Web que heredan de la clase Control. Ejemplos de controles de servidor Web son TextBox, Image y AdRotator. La información de este tema describe procedimientos recomendados de configuración y codificación que le ayudarán a mejorar la seguridad de los controles estándar.

Aunque los siguientes procedimientos recomendados de configuración y codificación pueden ayudarle a mejorar la seguridad de su aplicación, también es importante mantener siempre actualizado el servidor de aplicaciones con las últimas revisiones de seguridad de Microsoft Windows e Internet Information Services (IIS), así como cualquier actualización de seguridad de Microsoft SQL Server u otros orígenes de datos.

Puede encontrar información más detallada sobre los procedimientos recomendados para escribir código seguro y para proteger las aplicaciones en el libro "Writing Secure Code" de Michael Howard y David LeBlanc, o a través de las directrices incluidas en Microsoft Patterns and Practices.

Los siguientes temas también incluyen información sobre procedimientos de seguridad especiales para otros tipos de controles:

AdRotator (Control)

El control AdRotator muestra los anuncios definidos en un archivo de anuncios, que es un archivo XML de manera predeterminada. Alternativamente, puede almacenar los anuncios en una base de datos y extraerlos mediante programación. Para ayudar a proteger el control AdRotator, siga estas instrucciones:

  • Si utiliza un archivo XML para almacenar información de anuncios, coloque el archivo en la carpeta App_Data del sitio Web, porque el contenido de la carpeta no se servirá como respuesta a las solicitudes Web.

  • Para una mayor protección, no utilice la extensión de archivo .xml en los archivos de anuncios. Utilice, en su lugar, una extensión como .ads y, después, asigne esta extensión a ASP.NET en IIS y al controlador prohibido en ASP.NET, utilizando el elemento siguiente en el archivo Web.config del sitio:

    <httpHandlers>
      <add verb="*" path="*.ads" type="System.Web.HttpForbiddenHandler" />
    </httpHandlers>
    

    Para obtener información sobre cómo asignar una extensión de nombre de archivo a ASP.NET en IIS, vea Cómo: Registrar controladores HTTP.

  • Establezca los permisos adecuados (normalmente de sólo lectura) para la cuenta o cuentas de usuario que vayan a leer el archivo de anuncios. Si el sitio Web admite el acceso anónimo, generalmente es la cuenta de usuario ASPNET local o la cuenta NETWORK SERVICE.

  • Si el archivo de anuncios no existe, el control AdRotator genera un error que muestra la ruta de acceso y el nombre del archivo, que revela información posiblemente confidencial. Evite este problema siguiendo las técnicas de control de errores apropiadas, como configurar el elemento customErrors del archivo de configuración para que se produzca el redireccionamiento a una página de error personalizada y crear un controlador de errores global al que se llama si ocurre una excepción no controlada en cualquier lugar de la aplicación. Para obtener información detallada, vea Cómo: Mostrar mensajes de error seguros.

  • Si está leyendo información del anuncio de una base de datos, siga las instrucciones para proteger el acceso a la base de datos. Para obtener información detallada, vea Proteger el acceso a datos.

  • Examine cuidadosamente cualquier información de anuncios que reciba de una fuente que no sea de confianza antes de utilizarla con el control AdRotator. Dado que el control AdRotator no realiza ninguna validación ni comprueba la información que lee del archivo de anuncios, representa las imágenes y las direcciones URL en la página Web exactamente como aparecen en el archivo o la base de datos de anuncios.

BulletedList, CheckBoxList, RadioButtonList, DropDownList, ListBox (Controles)

Los controles BulletedList, CheckBoxList, DropDownList, ListBox y RadioButtonList representan distintos tipos de elementos HTML (ul, input y select) en función del contenido de las colecciones o de los datos de una base de datos. Para ayudar a proteger estos controles, siga estas instrucciones:

Calendar (Control)

El control Calendar representa los controles LinkButton para habilitar la navegación en el calendario. Los controles LinkButton usan el script de cliente para realizar una devolución de datos. Si un explorador ha desactivado el script de cliente por razones de seguridad, el control Calendar no admitirá la navegación.

Siempre puede utilizar el control Calendar para mostrar fechas, aun cuando no lo utilice para permitir la navegación en fechas. No suponga que se da formato correctamente a cualquier fecha seleccionada en un control Calendar. Al convertir las fechas del control Calendar en un formato DateTime interno, asegúrese de utilizar el control de errores adecuado en caso de que la fecha no esté en el formato correcto.

FileUpload (Control)

El control FileUpload permite a los usuarios cargar un archivo de su equipo al servidor Web. Para ayudar a proteger el control FileUpload, siga estas instrucciones:

  • No confíe en archivos cargados por usuarios; los usuarios malintencionados podrían intentar cargar archivos ejecutables. Cuando guarde un archivo cargado, compruebe su extensión de nombre de archivo o asígnele su propia extensión.

  • No permita que los usuarios especifiquen una ruta de acceso arbitraria para la ubicación de almacenamiento del archivo cargado. Compruebe que el nombre del archivo no contiene información de ruta de acceso que no haya agregado el usuario.

  • No revele la estructura interna de su sitio Web a los usuarios que carguen archivos.

  • Establezca permisos de lectura y escritura para la cuenta o cuentas de usuario que vayan a ejecutar la aplicación en la carpeta o carpetas donde se guardarán los archivos cargados. Si el sitio Web admite el acceso anónimo, generalmente se realizará mediante la cuenta de usuario de ASPNET local o la cuenta NETWORK SERVICE. Sin embargo, limite los permisos de lectura y escritura a la carpeta o carpetas donde la aplicación almacena los archivos cargados.

  • Para protegerse de ataques por denegación de servicio, establezca el atributo maxRequestLength del elemento httpRuntime del archivo de configuración. De manera predeterminada, el largo máximo de la solicitud es 4 megabytes (MB). Otros valores de configuración que pueden afectar al tamaño de los archivos cargados son el atributo requestLengthDiskThreshold del elemento httpRuntime y el atributo memoryLimit del elemento processModel.

  • Para determinar el tamaño del archivo cargado, consulte la propiedad ContentLength del objeto HttpPostedFile devuelto por el control y utilice ese tamaño para decidir si se acepta el archivo.

HiddenField (Control)

El control HiddenField le proporciona una manera de establecer el contenido de los elementos HTML <input type="hidden"> en el código del servidor. Los campos ocultos se utilizan para almacenar información en la página que resulta útil durante el procesamiento de páginas pero que no debe ser vista por los usuarios. Para ayudar a proteger el control HiddenField, siga estas instrucciones:

  • No almacene información confidencial en los controles HiddenField. Aunque la información no es visible en el explorador, forma parte de la página y los usuarios pueden verla con facilidad en el código fuente de la página.

  • No confíe en la información incluida en campos ocultos. Los usuarios malintencionados pueden manipular el contenido de los campos ocultos.

El control HyperLink representa una dirección URL en el explorador. Compruebe que la dirección URL señala a una ubicación de confianza.

Imagen e ImageMap (Controles)

Para mostrar los gráficos, los controles Image e ImageMap representan una dirección URL en el explorador. Compruebe que la dirección URL señala a una ubicación de confianza.

ImageButton (Control)

El control ImageButton representa una imagen (elemento img) que utiliza el script de cliente para realizar una devolución de datos. Si un explorador ha desactivado el script de cliente por razones de seguridad, el control no funcionará.

Para mostrar los gráficos, el control representa una dirección URL en el explorador. Compruebe que la dirección URL señala a una ubicación de confianza.

Label y Literal (Controles)

Los controles Label y Literal muestran texto en la página pasándolo por el explorador tal como está. (El control Label también permite especificar el formato.) Si el texto contiene formato HTML, de manera predeterminada, el explorador interpretará el marcado y representará el texto según sea necesario, lo cual podría incluir la ejecución de script.

Si está utilizando el control Label y no está seguro de si el texto podría incluir contenido malintencionado, utilice la codificación HTML para convertir el HTML en su representación de texto. Para obtener información detallada, vea Cómo: Proteger una aplicación Web frente a ataques mediante secuencias de comandos aplicando codificación HTML a las cadenas.

Si está utilizando el control Literal y no está seguro de si el texto podría incluir contenido malintencionado, realice uno de los siguientes procedimientos:

Para obtener más información, vea Cómo: Proteger una aplicación Web frente a ataques mediante secuencias de comandos aplicando codificación HTML a las cadenas.

LinkButton (Control)

El control LinkButton representa un vínculo (elemento a) que utiliza el script de cliente para realizar una devolución de datos. Si un explorador ha desactivado el script de cliente por razones de seguridad, el control no funcionará.

MultiView

El control MultiView permite agregar varios controles View y mostrarlos condicionalmente. Esto le da la capacidad de crear páginas que se parecen a formularios de varias páginas.

Si el cambio entre las vistas se basa en algo que se puede manipular con facilidad, como una cadena de consulta de direcciones URL, podría permitir que alguien tuviese acceso a una vista que se supone que no puede ver. Por consiguiente, compruebe que los mecanismos para cambiar las vistas son los más seguros posibles. Para obtener más información, vea Información general sobre la administración de estados de ASP.NET.

TextBox (Control)

Dado que el control TextBox permite a los usuarios escribir casi cualquier texto en la página, debe tener cuidado cuando acepte datos proporcionados por el usuario con este control. Para ayudar a proteger el control TextBox, siga estas instrucciones:

  • Utilice controles de validación siempre que sea posible para restringir la entrada de los usuarios sólo a valores aceptables. Para obtener información detallada, vea Introducción a los controles de validación.

  • Compruebe siempre que la propiedad IsValid se ha establecido en true antes de ejecutar el código de servidor.

  • Utilice la validación redundante en el servidor. Esto es especialmente cierto para los controles CustomValidator; no cree lógica de validación sólo en el cliente.

  • Establezca la propiedad MaxLength del control TextBox para limitar la cantidad de texto que los usuarios pueden escribir. Un usuario con malas intenciones podría mermar el rendimiento de la aplicación y, posiblemente, provocar errores en la base de datos al enviar grandes cantidades de información en un cuadro de texto.

  • Codifique los datos proporcionados por el usuario con el método HtmlEncode, que convierte el código HTML en su representación de texto (por ejemplo, <b> pasa a ser &ltb&gt;) y ayuda a evitar que el código HTML se ejecute en un explorador. Para obtener información detallada, vea Cómo: Proteger una aplicación Web frente a ataques mediante secuencias de comandos aplicando codificación HTML a las cadenas.

  • Establezca la propiedad TextMode en Password para evitar que se vea el contenido del cuadro de texto (mostrando puntos). Tenga en cuenta que, al establecer la propiedad TextMode en Password no se obtiene ninguna otra protección; el contenido del cuadro de texto no se cifra ni se oculta de ninguna manera y la información se envía al servidor como texto no cifrado. Por consiguiente, cuando utilice Password, proporcione métodos adicionales para garantizar que los datos están protegidos.

  • Si va a recopilar información confidencial, como una contraseña o un número de tarjeta de crédito, utilice SSL (Secure Sockets Layer) para proteger la comunicación entre el cliente y el servidor. Esto se aplica a cualquier uso de los controles TextBox, incluso a los controles que incorporan controles TextBox, como el control CreateUserWizard.

Wizard

El control Wizard permite crear formularios de entrada de varios pasos. Sea consciente de las consideraciones de seguridad siguientes al utilizar el control Wizard:

  • El control Wizard no protege la información confidencial de forma inherente. Si va a recopilar datos confidenciales en el asistente, utilice SSL para proteger la comunicación entre el cliente y el servidor para la página que contiene Wizard.

  • Para admitir su funcionalidad, el control Wizard incluye una serie de controles no visibles. Un usuario podría manipular esos controles y sus valores para mostrar los pasos del asistente desordenados o para mostrar pasos del asistente que sólo deberían ver determinados usuarios. Para ayudar a evitar esta situación, asegúrese de que los pasos del asistente se muestran en el orden correcto y que los pasos con información confidencial no se muestran a menos que se den las condiciones correctas.

XML (Control)

El control Xml muestra el contenido de un archivo o cadena XML que contiene XML en una página, aplicando una transformación XML opcionalmente. Para ayudar a proteger el control Xml, siga estas instrucciones:

  • Cuando muestre el contenido de un archivo XML, si resulta práctico, coloque el archivo XML en la carpeta App_Data del sitio, porque el contenido de la carpeta no se servirá como respuesta a las solicitudes Web.

  • Sólo muestre código XML de fuentes de confianza.

  • Sólo use transformaciones de fuentes de confianza.

Vea también

Conceptos

Proteger los controles de inicio de sesión

Proteger páginas de elementos Web

Proteger el acceso a datos