Proteger el estado de sesión
Actualización: noviembre 2007
El estado de sesión de ASP.NET permite almacenar y recuperar los valores de un usuario cuando el usuario navega en las diferentes páginas ASP.NET que conforman una aplicación Web. El estado de sesión de ASP.NET identifica como sesión las solicitudes procedentes del mismo explorador durante un tiempo limitado y puede mantener los valores de las variables durante esa sesión. Las sesiones del explorador se identifican en una cookie de sesión o en la dirección URL cuando el estado de sesión se configura como "sin cookies."
El estado de sesión de ASP.NET se habilita de forma predeterminada para todas las aplicaciones ASP.NET y se configura para que utilice las cookies de sesión con el fin de identificar las sesiones del explorador.
De manera predeterminada, el estado de sesión de ASP.NET almacena los valores de las variables de sesión en la memoria, pero también puede configurar el estado de sesión para que almacene los valores de las variables de sesión en un servidor de estado, un servidor SQL Server o un almacén de estados de sesión personalizado.
Aunque con los siguientes procedimientos recomendados de codificación y configuración podrá mejorar la seguridad de su aplicación, es importante también que mantenga continuamente actualizado el servidor de la aplicación con las últimas revisiones de seguridad de Microsoft Windows e Internet Information Services (IIS), así como cualquier revisión de Microsoft SQL Server, Active Directory y otros orígenes de datos de la aplicación.
Para obtener más información detallada sobre los procedimientos recomendados para escribir código seguro y proteger las aplicaciones, vea el libro "Writing Secure Code" de Michael Howard y David LeBlanc y las instrucciones proporcionadas en Modelos y Prácticas de Microsoft (https://www.microsoft.com/resources/practices/default.mspx).
Configuración segura de estado de sesión
La característica Estado de sesión está habilitada de manera predeterminada. Aunque las opciones de configuración predeterminadas se establecen en los valores más seguros, debe deshabilitar el estado de sesión si no es necesario para la aplicación. Para obtener información sobre las opciones de configuración de estado de sesión y sus valores predeterminados, vea Elemento sessionState (Esquema de configuración de ASP.NET).
Proteger los valores de configuración
Cuando almacene información confidencial en un archivo de configuración de una aplicación, debe cifrar los valores confidenciales mediante Configuración protegida. La información que es especialmente delicada comprende las claves de cifrado almacenadas en el elemento de configuración machineKey y las cadenas de conexión de un origen de datos almacenadas en el elemento de configuración connectionStrings. Para obtener más información, vea Cifrar información de configuración mediante una configuración protegida.
Proteger las conexiones en un origen de datos de estados de sesión
Cadenas de conexión
Como se mencionó más arriba, es importante proteger la información confidencial que está almacenada en una cadena de conexión en un equipo que ejecuta SQL Server, en el servicio de estado de sesión o en otro origen de datos. Para mantener la seguridad en la conexión con el servidor de datos, se recomienda cifrar la información de la cadena de conexión en la configuración mediante Configuración protegida. Para obtener más información, vea Cifrar información de configuración mediante una configuración protegida.
Conectar a SQL Server utilizando Seguridad integrada
Debe establecer la conexión con los equipos que ejecuten SQL Server mediante Seguridad integrada para evitar la posibilidad de que la cadena de conexión se vea comprometida y se ponga en peligro su id. de usuario y su contraseña. Cuando especifica una conexión que utiliza Seguridad Integrada para conectarse a un equipo que ejecuta SQL Server, la característica de estado de sesión vuelve a establecerse en la identidad del proceso. Debe garantizar que la identidad del proceso que ejecuta ASP.NET (por ejemplo, el grupo de aplicaciones) es la cuenta de proceso predeterminada o una cuenta de usuario restringida. Para obtener más información, vea Suplantación de ASP.NET y Modos de estado de sesión.
Proteger el id. de sesión
Al proteger la aplicación y los datos, es importante que impida que el identificador de la sesión se vea expuesto en un origen no deseado de la red y que pueda utilizarse en un ataque de reproducción contra la aplicación. Las recomendaciones siguientes pueden mejorar la seguridad del identificador de sesión.
Proteja la aplicación con Secure Sockets Layer (SSL).
Especifique un valor más pequeño para la sesión Timeout. Considere también la posibilidad de forzar una redirección en el cliente que tenga la misma longitud que el tiempo de espera de la sesión mediante un script de cliente o agregando un encabezado de actualización mediante el método AddHeader, tal y como se muestra en el ejemplo siguiente.
Response.AddHeader("Refresh", Session.Timeout & ";URL=Logoff.htm" Response.AddHeader("Refresh", Session.Timeout + ";URL=Logoff.htm";
Evite utilizar sesiones sin cookies. Si especifica sesiones sin cookies, advierta a los usuarios que no deben enviar por correo electrónico, marcar o guardar vínculos que contengan un id. de sesión.
Evite establecer la cookie en los modos AutoDetect y UseDeviceProfile.
Permita que los usuarios cierren sesión; en el momento en que lo hagan, deberá llamar al método HttpSessionState.Abandon. Advierta al usuario que cierre su explorador después de cerrar sesión.
Al utilizar las sesiones sin cookies, configure regenerateExpiredSessionID como true para que se inicie siempre una nueva sesión cuando se proporcione un identificador de sesión expirado.
Páginas Web seguras que utilizan estado de sesión
Las páginas de la aplicación que utilizan datos confidenciales deben protegerse utilizando los mecanismos de seguridad Web estándar, como Secure Sockets Layer (SSL) y requerir que los usuarios inicien sesión para realizar operaciones delicadas, como actualizar la información personal o eliminar las cuentas.
Además, las páginas no deben exponer datos confidenciales, como las contraseñas y, en algunos casos, los nombres de usuario, en texto no cifrado. Compruebe que las páginas que muestran esta información utilizan SSL y sólo están disponibles a los usuarios autenticados.
Mensajes de error y eventos
Excepciones
Para evitar que la información confidencial pueda verse en orígenes no deseados, configure su aplicación para que no muestre mensajes de error detallados o para que muestre estos mensajes únicamente cuando el cliente es el propio servidor Web. Para obtener más información, vea Elemento customErrors (Esquema de configuración de ASP.NET).
Registro de eventos
Si su servidor está ejecutando Windows Server 2003, puede mejorar la seguridad de su aplicación protegiendo el registro de eventos y estableciendo los parámetros relativos al tamaño, la retención, etc. del registro de eventos con el fin de evitar un ataque de denegación de servicio indirecto.
Proveedores de almacenes de estados de sesión personalizados
Al crear un proveedor de estados de sesión personalizado, compruebe que sigue los procedimientos de seguridad recomendados para evitar ataques, como ataques de inserción de SQL, al trabajar con una base de datos. Cuando utilice un proveedor de estados de sesión personalizado, compruebe que el proveedor se ha revisado siguiendo los procedimientos recomendados de seguridad.
Vea también
Conceptos
Información general sobre el estado de sesión de ASP.NET