Compartir a través de


Proteger los controles de inicio de sesión

Actualización: noviembre 2007

Los controles de inicio de sesión de ASP.NET permiten proporcionar una solución para controlar el acceso a las páginas Web en función de la autenticación de usuario, la suscripción y las funciones. Los controles de inicio de sesión son CreateUserWizard, Login, LoginStatus, LoginView, PasswordRecovery y ChangePassword. La información de este tema describe cómo mejorar la seguridad de los controles de inicio de sesión a través de los procedimientos recomendados en la configuración y codificación.

Aunque se puede mejorar la seguridad de la aplicación siguiendo los procedimientos recomendados de codificación y configuración, también es importante mantener actualizado el servidor Web con las últimas actualizaciones de seguridad de Microsoft Windows y Servicios de Internet Information Server (IIS), así como las actualizaciones 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 y a través de las directrices incluidas en Microsoft Patterns and Practices (https://www.microsoft.com/resources/practices/default.mspx).

Los siguientes temas también incluyen información sobre procedimientos de seguridad especiales:

Procedimientos de seguridad generales para controles de inicio de sesión

La protección de los controles de inicio de sesión requiere que se sigan los siguientes procedimientos recomendados en una serie de áreas que se describen brevemente a continuación, con vínculos que conducen a más información.

Utilizar el protocolo de Secure Sockets Layer (SSL)

Los controles de inicio de sesión de ASP.NET transmiten información al servidor sobre HTTP, en texto sin formato. Al tratar con información confidencial, se recomienda encarecidamente utilizar el protocolo HTTPS con el cifrado SSL (Secure Sockets Layer). SSL impide que se alteren los datos (integridad de datos), protege la identidad del usuario (confidencialidad) y asegura que dichos datos se originan en el cliente esperado (autenticación). Para obtener más información, vea Información general sobre criptografía y Configuring SSL on a Web Server or a Web Site en la documentación de IIS.

Validar los datos proporcionados por el usuario

Nunca dé por sentado que la entrada que recibe de los usuarios es segura. Los usuarios malintencionados pueden enviar información potencialmente peligrosa del cliente a la aplicación. En el caso de los controles de inicio de sesión, es especialmente importante tomar precauciones con los datos proporcionados por el usuario, porque a menudo la información especificada es confidencial. Para obtener más información sobre cómo protegerse del suministro de datos dañinos, vea Procedimientos de seguridad básicos para aplicaciones Web.

Siempre que sea práctico, utilice controles de validación para comprobar si los nombres de usuario son válidos y las contraseñas seguras. Puede validar algunos datos proporcionados por el usuario sin controles de validación. Por ejemplo, el control CreateUserWizard admite la validación requerida y de comparación. También se puede especificar una expresión regular con la propiedad EmailRegularExpression para validar que las direcciones de correo electrónico se ajustan a un modelo específico y con la propiedad PasswordRegularExpression para validar que las contraseñas cumplen los requisitos.

Para obtener la máxima flexibilidad a la hora de validar los datos proporcionados por el usuario en los controles de inicio de sesión, se pueden utilizar plantillas. Siempre que sea posible, cree una plantilla para el control, agregue controles individuales (normalmente controles TextBox) y agregue controles de validación para limitar al máximo los datos que puede proporcionar el usuario.

Nota:

Cuando utilice controles de validación, realice siempre la validación en el código de servidor además de realizar la validación en el cliente. De esta manera evitará que los usuarios omitan la validación deshabilitando o cambiando la comprobación de secuencias de comandos del cliente.

Para obtener más información, vea Validar la información especificada por el usuario en páginas Web ASP.NET.

Proteger el estado de vista

Los controles de inicio de sesión almacenan información en el estado de vista de la página, por lo que es un procedimiento recomendado de seguridad proteger el estado de vista. Aunque los datos del estado de vista se almacenan en un formato codificado, se pueden ver y manipular. Para obtener más información, vea Proteger el estado de vista.

Proteger la suscripción

La suscripción de ASP.NET proporciona funcionalidad para validar y almacenar credenciales de usuario. Los controles CreateUserWizard, Login, PasswordRecovery y ChangePassword usan la funcionalidad de suscripción de ASP.NET para permitirle crear un sistema de autenticación completo que requiera poco o ningún código. Asimismo, se pueden utilizar los controles LoginName, LoginStatus y LoginView si desea completar su solución para administrar la suscripción de los usuarios y controlar el acceso a las páginas en su sitio Web. Para obtener más información, vea Introducción a la suscripción y Proteger la suscripción.

Los proveedores de suscripciones que se entregan con ASP.NET incluyen un umbral para el número máximo de contraseñas no válidas o intentos de respuestas de contraseña, tal como se especifica en la propiedad MaxInvalidPasswordAttempts. La función de suscripción de ASP.NET también permite configurar el número de minutos que se conceden para las contraseñas no válidas o los intentos de respuestas de contraseña antes de bloquear al usuario de la suscripción, tal como se especifica en la propiedad PasswordAttemptWindow. El umbral predeterminado para los intentos de contraseña es 5 y el intervalo de tiempo predeterminado para los intentos de contraseña es de 10 minutos. Los umbrales establecidos en la sección membership del archivo Web.config de la aplicación pueden reemplazar a los umbrales de los proveedores predeterminados. Si establece estos umbrales, se recomienda definir los valores mínimos que sean prácticos. Además, se recomienda que no establezca la propiedad RequiresQuestionAndAnswer en false, porque no se realizará un seguimiento de los intentos de respuesta de contraseña no válidos. Para obtener más información, vea Proveedores de suscripciones.

Proteger el correo electrónico

Los controles CreateUserWizard, ChangePassword y PasswordRecovery pueden enviar mensajes de correo electrónico con detalles sobre la transacción del usuario finalizada. Asegúrese de que los mensajes de correo electrónico enviados a los usuarios sólo revelen la información necesaria. Por ejemplo, evite que personas a las que no van dirigidos los mensajes de correo electrónico puedan filtrar la línea de asunto a partir de otros mensajes. Se recomienda que evite enviar las contraseñas por correo electrónico. Considere otros métodos de comprobar las transacciones con contraseñas, como enviar un código de confirmación y una dirección URL devuelta que solicite a los usuarios que la utilicen para finalizar la transacción.

Si no se especifica la propiedad MailDefinition de los controles CreateUserWizard, ChangePassword y PasswordRecovery, no se enviará ningún mensaje de correo electrónico. Cuando se configuran estos controles para enviar mensajes de correo electrónico, se recomienda controlar el evento de error de correo para detectar cualquier error relacionado con SMTP para evitar revelar información innecesaria a los usuarios. Para el control ChangePassword, controle el evento SendMailError y establezca la propiedad Handled del objeto SendMailErrorEventArgs en true. Para obtener un ejemplo donde se muestra cómo controlar un evento de error de correo, vea el evento SendMailError. Para obtener más información sobre cómo instalar el servicio SMTP (Protocolo simple de transferencia de correo), vea Cómo: Instalar y configurar servidores virtuales SMTP en IIS 6.0.

Consideraciones de seguridad de cada control

En las secciones siguientes se describen las consideraciones de seguridad de cada control de inicio de sesión.

Control CreateUserWizard

El control CreateUserWizard recopila información de un usuario y después crea una cuenta para ese usuario en el sistema de suscripción de ASP.NET. Puede extender el control CreateUserWizard para aceptar la información adicional agregando campos o pasos antes o después de CreateUserWizardStep y de los pasos CompleteWizardStep. Podría plantear un problema de seguridad el hecho de que un usuario no finalice todos los pasos de un control CreateUserWizard pero se cree una cuenta. Para evitar que los usuarios omitan los pasos de un asistente personalizado, reemplace el método OnNextButtonClick y realice una autenticación personalizada. Cuando se recopile la información, utilice el método CreateUser de la clase MembershipProvider para crear el usuario.

Si está realizando tareas administrativas y utiliza CreateUserWizard para crear cuentas de usuario automáticamente, se recomienda establecer la propiedad AutoGeneratePassword en true y la propiedad LoginCreatedUser en false. En este caso particular, se recomienda establecer la propiedad DisableCreatedUser en false.

Control Login

El control Login es un control compuesto que incorpora cuadros de texto para el nombre de usuario y la contraseña, así como una casilla de verificación que indica si los usuarios desean que se recuerden sus datos la próxima vez que visiten la página. Las propiedades RememberMeSet y DisplayRememberMe permiten enviar una cookie de autenticación al explorador del usuario y mostrar una casilla de verificación que permita al usuario controlar si se envía una cookie persistente, respectivamente. Evite establecer RememberMeSet en true y DisplayRememberMe en false, porquela cookie se envía pero el usuario no lo sabe. En general, almacenar las cookies en los equipos de los usuarios conlleva ciertos riesgos. Las cookies son otra forma de información proporcionada por el usuario y, por tanto, están sujetas a la revelación de datos y a la suplantación. Para obtener más información, vea Información general sobre las cookies en ASP.NET.

Si el control Login se utiliza con una amplia gama de usuarios finales, considere la posibilidad de codificarlo de manera que los usuarios de equipos públicos tengan la opción de utilizar una cookie no persistente que se descarte una vez finalizada la sesión. Para obtener más información sobre cómo escribir cookies, vea Cómo: Escribir una cookie.

Control LoginName

El control LoginName muestra el nombre de inicio de sesión del usuario, o bien el dominio y el nombre de cuenta del usuario si la aplicación utiliza la autenticación de Windows. Piense en agregar una casilla de verificación que permita a los usuarios especificar si desean que se muestre su nombre o la información de la cuenta. Por ejemplo, los usuarios de equipos públicos puede que no deseen que se muestre información confidencial.

Control LoginView

El control LoginView permite mostrar distinta información a los usuarios que han iniciado una sesión y a los que no (usuarios anónimos). Revise el contenido que se muestra con las plantillas AnonymousTemplate y LoggedInTemplate, y con las plantillas asociadas a la propiedad RoleGroups para garantizar que los usuarios no pueden ver las plantillas si no van dirigidas a ellos. En particular, la colección de la propiedad RoleGroups se busca en el orden en que están definidas las plantillas. La primera plantilla de grupo de funciones que coincida se mostrará al usuario. Si el usuario es miembro de más de una función, se mostrará la primera plantilla de grupo de funciones que coincida con alguna de las funciones del usuario. Si más de una plantilla está asociada a una única función, sólo se utilizará la primera plantilla definida. Para obtener más información, vea Descripción de la administración de funciones.

Control PasswordRecovery

El control PasswordRecovery permite a los usuarios recuperar sus contraseñas sobre la base de las direcciones de correo electrónico que están asociadas a sus nombres de usuario. Al configurar el control PasswordRecovery, siga estas directrices:

  • Controle el evento SendMailError para tomar medidas si se producen errores al enviar el mensaje de correo electrónico.

  • Establezca un número limitado de intentos de respuestas de contraseña con la propiedad MaxInvalidPasswordAttempts y una ventana de tiempo limitado con la propiedad PasswordAttemptWindow.

  • Revise toda la información que se envía a los usuarios por correo electrónico, así como la seguridad del canal empleado para transmitir los mensajes, especialmente si el mensaje de correo electrónico para recuperar la contraseña contiene contraseñas de usuario. Evite enviar mensajes de correo electrónico que indiquen claramente que contienen información confidencial, como mensajes cuya línea de asunto contenga la palabra "contraseña".

Control ChangePassword

El control ChangePassword permite a los usuarios cambiar sus contraseñas. Al configurar el control ChangePassword, siga estas directrices:

  • Controle el evento SendMailError para tomar medidas si se producen errores al enviar correo electrónico.

  • Establezca un número limitado de intentos de respuestas de contraseña con la propiedad MaxInvalidPasswordAttempts y una ventana de tiempo limitado con la propiedad PasswordAttemptWindow.

  • Revise toda la información enviada a los usuarios por correo electrónico, así como la seguridad del canal empleado para transmitir los mensajes, especialmente cuando el control ChangePassword esté configurado para utilizar el correo electrónico para enviar la nueva contraseña al usuario.

  • Utilice SSL para garantizar que la nueva contraseña del usuario no se puede leer durante la devolución de datos.

  • Limite el acceso al archivo que el control ChangePassword utiliza como el cuerpo de los mensajes de correo electrónico enviados al usuario. La propiedad BodyFileName de la clase MailDefinition define este archivo.

Vea también

Tareas

Cómo: Instalar y configurar servidores virtuales SMTP en IIS 6.0

Conceptos

Procedimientos de seguridad básicos para aplicaciones Web

Seguridad de controles estándar

Proteger la suscripción

Otros recursos

Administrar usuarios mediante suscripciones

Seguridad de sitios Web ASP.NET (Visual Studio)

Sintaxis de los controles de servidor Validation

Servicios criptográficos