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.

Deja un comentario