Proteger funciones

Actualización: noviembre 2007

Con la administración de funciones, puede administrar las autorizaciones de la aplicación mediante sus propias categorías, lo que se conoce como "funciones." Al asignar usuarios a las funciones, puede controlar el acceso a diferentes partes o características de la aplicación Web basándose en una función, en lugar de (o además de) en un nombre de usuario. Por ejemplo, una aplicación para los empleados podría tener funciones como Administradores, Empleados, Directores, etc., en la que se especifican privilegios diferentes para cada función.

Los usuarios pueden pertenecer a varias funciones. Por ejemplo, si el sitio es un foro de discusión, algunos usuarios podrían pertenecer tanto a la función Miembros como a la función Moderadores. Puede definir cada función para que tenga privilegios diferentes en el sitio, de modo que un usuario que pertenezca a ambas funciones tendrá los dos conjuntos de privilegios.

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, de Active Directory o de otros orígenes de datos de funciones.

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 de seguridad del Administrador de funciones

La característica Administrador de funciones está deshabilitada de forma predeterminada en las aplicaciones ASP.NET con el fin de mejorar la seguridad de las aplicaciones que no utilizan esta característica. Cuando se habilita, las opciones de configuración predeterminadas se establecen en los valores más seguros. Para obtener información sobre las opciones de configuración del Administrador de funciones y sus valores predeterminados, vea Elemento roleManager (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 vinculadas a un origen de datos almacenado 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.

Hashing y claves de cifrado seguras

Se recomienda encarecidamente que proteja los nombres de funciones almacenados en las cookies; para ello, establezca el atributo cookieProtection del elemento roleManager en All. Los valores de las claves de cifrado del algoritmo de cifrado especificado se almacenan en el elemento de configuración machineKey. Para establecer un cifrado de alta seguridad, especifique una clave de cifrado que sea un valor generado aleatoriamente con la longitud adecuada para el algoritmo de cifrado seleccionado.

En los servidores que hospedan varias aplicaciones, debe definir claves de cifrado exclusivas para cada aplicación. Una alternativa menos segura es definir una clave de cifrado única y especificar la opción IsolateApps con la clave.

Los servidores host también pueden restringir la posibilidad de sustituir las opciones de configuración del equipo denegando los derechos de sustitución, lo que impedirá también que las claves de cifrado puedan definirse de nuevo en el archivo Web.config de una aplicación.

Proteger las conexiones de un origen de datos de funciones

Cadenas de conexión

Como se mencionó anteriormente, es importante proteger la cadena de conexión que se utiliza para tener acceso a SQL Server, a Active Directory o a otra aplicación del origen de datos. Para mantener la seguridad en la conexión con el servidor de la base de datos, debe 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 Administrador de funciones 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.

Permisos de la base de datos de SQL Server

La base de datos de SQL Server que se utiliza para almacenar la información de las funciones del usuario incluye funciones y vistas de base de datos que permiten restringir el acceso de los usuarios únicamente a las funciones y las vistas necesarias. Debe asignar los privilegios mínimos al Id. de usuario que se utiliza para conectase a la base de datos de funciones de SQL Server. Para obtener más información, vea Funciones y vistas en la base de datos de servicios de la aplicación para SQL Server.

Identidad del proceso de trabajo de SQL Server Express

SQL Server Express 2005 incluye un nuevo modo de operación que permite al servidor SQL Server iniciar un proceso de trabajo que se ejecuta como la identidad del usuario que se conecta. Esta función se conoce como el modo "ejecutar como usuario". Aunque este modo de operación sea adecuado para el desarrollo de escritorio cuando se utiliza IIS, no resulta apropiado iniciar los procesos de trabajo en servidores Web que hospeden varios códigos base de cliente que no sean de confianza. En los servidores host compartidos que contienen aplicaciones que no confían entre sí, debe deshabilitarse la función "ejecutar como usuario". Esta función se puede desactivar conectándose a la instancia de SQL Express (por ejemplo osql –E –S .\sqlexpress) y emitiendo el comando de Transact-SQL siguiente.

EXEC sp_configure 'show advanced option', '1'

GO

RECONFIGURE WITH OVERRIDE

GO

EXEC sp_configure 'user instances enabled', 0

GO

RECONFIGURE WITH OVERRIDE

GO

Proteger el almacén de autorizaciones

Para mejorar la seguridad de su origen de datos cuando al utilizar el control AuthorizationStoreRoleProvider, debe almacenar la información de las funciones en un servidor Active Directory, y no en un almacén de autorizaciones basado en archivos. De este modo, puede impedir que el archivo de almacén de directivas quede expuesto en caso de que el servidor Web se vea comprometido.

La característica Administrador de funciones se establece de nuevo en la identidad del proceso cuando se conecta a un servidor Active Directory. 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. Además, debe asignar permisos a la cuenta en el almacén de autorizaciones de Active Directory que permitan el acceso únicamente a la aplicación Administrador de autorizaciones especificada o al ámbito requerido por la aplicación ASP.NET.

Debe utilizar una herramienta de cifrado de red, como Seguridad del protocolo Internet (IPSec) para proteger la conexión establecida con el servidor Active Directory.

Puede especificar que los nombres de funciones de un usuario se almacenen en memoria caché en una cookie de sesión y mejorar así el rendimiento; para ello, establezca el atributo cacheRolesInCookie del elemento roleManager en true. De forma predeterminada, los nombres de las funciones se almacenan en un formato cifrado, pero debe proporcionar otras medidas de seguridad adicionales a la cookie de funciones; para ello, establezca el atributo cookieRequireSSL en true. Además, cuando SSL esté habilitado, las funciones de la caché deberán estar siempre en una cookie de sesión. De este modo, impedirá que la cookie de funciones se exponga en la red y que pueda utilizarse en un ataque de reproducción contra la aplicación.

Evitar que las cookies se compartan entre las aplicaciones

Si el atributo cacheRolesInCookie del elemento roleManager se establece en true y si el atributo cookiePath se establece en una ruta de acceso que incluye varias aplicaciones, la misma cookie de funciones se enviará a varias aplicaciones. Puede compartir la cookie de funciones entre varias aplicaciones especificando la misma información de cifrado en el elemento de configuración machineKey de cada aplicación.

Para evitar que la cookie de nombres de función se comparta entre varias aplicaciones, especifique las claves de cifrado por separado en el elemento de configuración machineKey de cada aplicación, establezca el atributo cookiePath de cada aplicación en la ruta específica de la aplicación y establezca la propiedad ApplicationName en un valor exclusivo para cada aplicación.

Páginas Web seguras que utilizan funciones

Las páginas de la aplicación que trabajan con datos confidenciales, como las páginas de inicio de sesión, deben protegerse utilizando los mecanismos de seguridad Web estándar. Entre estos mecanismos se incluye el uso de Secure Sockets Layer (SSL) y que los usuarios estén obligados a iniciar sesión cuando realizan operaciones delicadas, como actualizar la información de un usuario o eliminar usuarios.

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. Debe evitar también que los datos confidenciales se almacenen en cookies o se envíen a través de conexiones que no sean seguras.

Protección contra los ataques de denegación de servicio

Los métodos que realizan actualizaciones o grandes operaciones de búsqueda pueden reducir la capacidad de respuesta del origen de datos de funciones si varios clientes llaman simultáneamente a estos métodos. Para reducir la exposición a los ataques de denegación de servicio, restrinja el acceso a las páginas ASP.NET que utilicen métodos que realicen búsquedas o actualizaciones en la base de datos a los usuarios administrativos y exponga sólo las páginas ASP.NET que proporcionen opciones de validación de suscripción de funciones de uso general.

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 definiendo 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.

Información de seguimiento

Puede configurar su servidor Web para que realice un seguimiento cuando se producen ciertas acciones relacionadas con la característica Administrador de funciones y para que almacene la información de seguimiento en un archivo de registro. Dado que en el archivo de registro de seguimiento puede almacenarse información confidencial, como nombres de usuario y nombres de funciones, la capacidad de configurar la ubicación del archivo de registro de seguimiento y el acceso a este archivo debe estar restringida a los administradores.

Proveedores de funciones personalizados

Al crear un proveedor de funciones 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 funciones personalizado, compruebe que el proveedor se ha revisado siguiendo los procedimientos recomendados de seguridad.

Trabajar con caracteres específicos de una referencia cultural

Al utilizar el proveedor de funciones de SQL Server o un proveedor de funciones personalizado, existe la posibilidad de configurar el origen de datos para almacenar los datos de función en un formato que tenga en cuenta la referencia cultural. Sin embargo, ASP.NET siempre evalúa los nombres de función especificados en el elemento de configuración authorization y los nombres de función del origen de datos como invariables en cuanto a la referencia cultural. En consecuencia, es posible que se concedan permisos no deseados a usuarios no autorizados porque, cuando el nombre de función sin autorización se trata como invariable en cuanto a la referencia cultural, puede coincidir con el de una función autorizada. Para evitar que los usuarios obtengan acceso sin autorización, asegúrese de que los nombres de función son únicos cuando se evalúen como invariables en cuanto a la referencia cultural.

Vea también

Otros recursos

Administrar autorizaciones con funciones

Proteger sitios web ASP.NET