3.12 Seguridad
La seguridad de las aplicaciones Web es un tema crítico y complejo. Un sistema seguro requiere una cuidadosa planificación, y un conocimiento muy claro de los ambientes de desarrol o web. ASP.NET utiliza los Servicios de Información de Internet (IIS) para proporcionar seguridad a las aplicaciones Web. Por definición, las aplicaciones Web ofrecen a los usuarios acceso a un recurso centralizado, el servidor Web, y, a través de él, acceso a servidores de bases de datos. Conociendo e implementando medidas de seguridad adecuadas para nuestra aplicación Web, podemos proteger nuestros propios recursos, además de proporcionar un entorno seguro en el que los usuarios trabajen cómodamente.
Para poder empezar a trabajar con temas relacionados con la seguridad, debemos estar familiarizados con los dos conceptos fundamentales de seguridad para las aplicaciones Web:
- Autenticación
- Autorización
La autenticación es el proceso de obtener las credenciales de identificación de un usuario, como un nombre y una contraseña, y validar esas credenciales consultando a alguna autoridad, como una base de datos. Si las credenciales son válidas, la entidad que las ha presentado se considera una identidad autenticada.
Por ejemplo, todos los usuarios deben proporcionar un nombre de usuario y una contraseña cada vez que inician sesión en una red. Estas credenciales se validan consultándolas a una autoridad, como una base de datos o un servidor de dominio. Después de que una identidad haya sido autenticada, el proceso de autorización determina si esa identidad tiene acceso a un recurso específico. El proceso de autorizaciónlimita los derechos de acceso concediendo o denegando permisos específicos a una identidad autenticada.
ASP.NET implementa la autenticación mediante métodos de autenticación. Los métodos de autenticación de ASP.NET contienen el código necesario para autenticar las credenciales de usuario. ASP.NET soporta tres tipos de métodos de autenticación:
- Autenticación basada en Windows
- Autenticación basada en formularios
- Autenticación mediante Microsoft Passport
En la autenticación basada en Windows, la aplicación Web ASP.NET depende del sistema operativo Windows para autenticar al usuario. ASP.NET utiliza la autenticación basada en Windows conjuntamente con la autenticación de IIS. En la autenticación basada en Windows, el usuario solicita una página Web segura de la aplicación Web, y la solicitud pasa por IIS. Si las credenciales del usuario no coinciden con las de un usuario autorizado, IIS rechaza la solicitud. A continuación, el usuario debe introducir su nombre y contraseña en el formulario de inicio de sesión. IIS verifica de nuevo las credenciales. Si son correctas, IIS dirige la solicitud original a la aplicación Web y el usuario recibe la página Web segura.
La autenticación basada en formularios hace referencia a un sistema donde solicitudes no autenticadas son redirigidas a un formulario Hypertext Markup Language (HTML) utilizando la redirección en el lado delcliente Hypertext Transfer Protocol (HTTP). El usuario proporciona las credenciales y envía el formulario. Si la aplicación valida las credenciales en el formulario, el sistema suministra al usuario una cookie de autenticación. Las solicitudes subsiguientes del usuario se emiten con la cookie de autenticación en el encabezado de la solicitud, y el usuario es autenticado en base a dicho encabezado.
La autenticación mediante Passport consiste en un servicio de autenticación centralizado, proporcionado por Microsoft, que ofrece una única opción de inicio de sesión y unos servicios con un perfil básico a los sitios suscritos. Los usuarios que se registren utilizando Passport estarán autenticados para acceder a sitios Web utilizando una única cuenta Passport. Microsoft Passport es un Servicio Web XML, y es una parte esencial de ASP .NET. Cada uno de los tres métodos de autenticación que soporta ASP.NET es adecuado para situaciones específicas. Cada método tiene diversas ventajas e inconvenientes. La autenticación basada en Windows utiliza la infraestructura de Windows existente y, por tanto, es más adecuado en situaciones en las que sedispone de un número fijo de usuarios con cuentas de usuario Windows existentes. Dos ejemplos de situaciones de este tipo son:
El desarrol o de una intranet para una organización. Es muy probable que la organización disponga de cuentas de usuario Windows configuradas para cada empleado.
El control del acceso a información confidencial. Por ejemplo, los usuarios del grupo de Recursos Humanos de una empresa pueden acceder a directorios que contienen currículos de empleados e información de salarios.
Podemos utilizar la autenticación basada en Windows para evitar que los empleados de otros grupos, accedan a estos documentos confidenciales. El inconveniente de la autenticación basada en Windows es que no es adecuada para la mayoría de aplicaciones de Internet. Por ejemplo, si estamos generando un sistema público de registro de usuarios y contraseñas, la autenticación basada en Windows no es una buena opción de autenticación. Con la autenticación basada en Windows, debe configurarse una cuenta de usuario de Windows válida por cada usuario que acceda a una página restringida. El proceso de agregar nuevas cuentas de usuario no puede automatizarse fácilmente.
La autenticación basada en formularios es una buena solución si se desea configurar un sistema personalizado de registro de usuarios para un sitio Web. La ventaja de este tipo de autenticación es que nos permite almacenar nombres de usuario y contraseñas en el mecanismo de almacenamiento que deseemos, ya sea el archivo web.config, un archivo Extensible Markup Language (XML) o la tabla en una base de datos. La autenticación basada en formularios depende de cookies para determinar la identidad del usuario. Una vez habilitada la autenticación basada en formularios, el usuario no puede acceder a la página solicitada a menos que se encuentre en el cliente una cookie específica. Si esta cookie no está, o si no es válida, ASP.NET rechaza la solicitud y devuelve una página de inicio de sesión.
La autenticación mediante Microsoft Passport tiene varias ventajas, incluyendo:
- Permite a los usuarios utilizar el mismo nombre de usuario y contraseña para iniciar sesión en numerosos sitios Web; por tanto, es menos probable que los usuarios olviden sus contraseñas.
Por ejemplo, tanto Microsoft Hotmail como Microsoft MSN utilizan Microsoft Passport para autenticar usuarios.
- No es necesario configurar y mantener una base de datos para almacenar la información de registro.
- Proporciona opciones para personalizar el aspecto de las páginas de registro e inicio de sesión mediante plantil as.
El uso de la autenticación mediante Microsoft Passport tiene dos inconvenientes. En primer lugar, existe una cuota de suscripción por utilizar el servicio Microsoft Passport en desarrollo. En segundo lugar, la autenticación Microsoft Passport está basada en cookies.
Para poder utilizar la autenticación basada en Windows, debemos configurar antes el servidor Web IIS. Cuando un usuario solicita una página que requiere autorización, el usuario debe ser autenticado a través de IIS. IIS proporciona varios mecanismos que pueden utilizarse para establecer autenticación, incluyendo:
- Acceso anónimo
- Autenticación básica
- Autenticación implícita
- Seguridad integrada de Windows
Para aplicaciones Web en las que usuarios desconocidos realizan solicitudes, normalmente aplicaciones Web públicas, IIS soporta un usuario anónimo, un usuario que no dispone de credenciales de autenticación. Cuando IIS recibe una solicitud de un usuario anónimo, IIS hace la solicitud a Windows utilizando la cuenta predeterminada IUSR_nombre_equipo. IIS también soporta un modelo de autenticación básica. En la autenticación básica, se solicita a los usuarios sin credenciales que suministren un nombre de usuario y una contraseña. Esta información se devuelve a IIS, y a partir de entonces está disponible para la aplicación Web. La ventaja de la autenticación básica es que forma parte de la especificación HTTP y está soportada por la mayoría de navegadores. La autenticación básica proporciona un modo útil para ofrecer acceso restringido a una aplicación Web pública. Sin embargo, debido a que el usuario pasa un nombre de usuario y una contraseña a IIS en forma de texto claro, la autenticación básica no ofrece un nivel alto de seguridad. Para incrementarlo, se utiliza SSL para encriptar nombres de usuario y contraseñas cuando se transmiten a través de la red.
La autenticación implícita es similar a la autenticación básica, pero utiliza la encriptación para enviar información del usuario al servidor. Si el acceso anónimo está deshabilitado, se pide a los usuarios sus credenciales (información de inicio de sesión). El navegador combina esta información de inicio de sesión con el resto de información almacenada en el cliente, y envía al servidor una cadena codificada denominado hash MD5 (o Message Digest). El servidor ya dispone de una copia de esta información y recrea los destal es originales desde su propio hash y autentica el usuario. Este mecanismo pasa a través de cortafuegos, servidores proxy e Internet. Sin embargo, la autenticación implícita únicamente funciona con cuentas de dominio dadas de alta en el servicio de directorios Active Directory. Si el usuario que realiza la solicitud ya ha sido autenticado en una red basada en Windows, IIS puede pasar las credenciales del usuario cuando solicite acceso a un recurso. Las credenciales no incluyen el nombre de usuario y la contraseña, únicamente un token encriptado que indica el estado de seguridad del usuario.
La seguridad integrada de Windows también utiliza un algoritmo hash para codificar y decodificar las credenciales del usuario. Sin embargo, la seguridad integrada de Windows no resulta práctica en las aplicaciones Web que deben atravesar cortafuegos. Por tanto, es más adecuada en escenarios de intranets corporativas. IIS proporciona a los usuarios un canal de comunicación seguro al soportar el protocolo SSL y la encriptación RSA Data Security tanto en el servidor como en el cliente. SSL es un protocolo que se utiliza para transmitir datos de modo seguro a través de una red. SSL asegura la comunicación de datos mediante:
- Encriptación de datos
- Autenticación de servidor
- Integridad de datos
Cuando se introduce información en un formulario HTML y se envía a un sitio Web, la información se transmite desde el navegador al servidor del sitio Web. En el proceso de transmisión de la información, los datos introducidos en el formulario pueden ser interceptados y leídos. SSL encripta la información transmitida entre un servidor Web y un navegador Web. La información se encripta utilizando un algoritmo públicamente conocido y una clave de sesión. El servidor Web genera una clave pública que puede utilizar cualquier cliente. El cliente genera una clave de sesión y utiliza la clave pública para encriptarla antes de enviarla al servidor Web. Los datos se transmiten utilizando esta clave de sesión.
El número de bits de la clave de sesión determina la efectividad de la encriptación. IIS soporta claves de sesión de 40 bits y claves de sesión más potentes de 128 bits.
La autenticación de servidor garantiza que los datos se envían al servidor correcto y que éste es seguro.
Por ejemplo, podría ocurrir que visitáramos un sitio Web que fuera muy parecido a un sitio Web de comercio electrónico al que accediésemos frecuentemente. Podría parecer igual que el sitio Web que conocemos, y proporcionaríamos la información de nuestra tarjeta de crédito para adquirir un artículo. Sin embargo, alguien que deseara engañarnos podría crear un sitio Web idéntico al sitio Web de comercio electrónico auténtico y robar la información de nuestra tarjeta de crédito.
Para evitar que un sitio Web se haga pasar por otro, utilizamos SSL para autenticar sitios Web. Cuando instalamos SSL en nuestro servidor Web, debemos instalar un certificado de servidor. El certificado de servidor contiene información sobre nuestra organización, nuestro sitio Web y el emisor del certificado.
Para funcionar como un ID digital, un certificado de servidor debe estar firmado por una autoridad de certificación. La autoridad de certificación actúa como un tercero de confianza que verifica la identidad de un sitio Web para sus usuarios.