Protección de la información de conexión
La protección del acceso al origen de datos es uno de los objetivos más importantes a la hora de proteger una aplicación. Las cadenas de conexión presentan una posible vulnerabilidad si no se protegen. El almacenamiento de la información de conexión en texto sin formato o en la memoria ponen en riesgo el sistema completo. Las cadenas de conexión insertadas en su código fuente pueden leerse usando el Ildasm.exe (Desensamblador de IL) para ver el lenguaje intermedio común (CIL) en un ensamblado compilado.
Pueden surgir vulnerabilidades de seguridad que afecten a las cadenas de conexión en función del tipo de autenticación usado, de la forma en que las cadenas de conexión se almacenan en memoria y en disco, y de las técnicas usadas para construirlas en tiempo de ejecución.
Importante
Microsoft recomienda usar el flujo de autenticación más seguro disponible. Si se conecta a Azure SQL, el método de autenticación recomendado es Identidades administradas para recursos de Azure.
Usar autenticación de Windows
Para contribuir a limitar el acceso al origen de datos, debe proteger la información de la conexión como, por ejemplo, el id. de usuario, la contraseña y el nombre de origen de datos. Para evitar la exposición de información de usuario, se recomienda usar la autenticación de Windows (suele aparecer también como seguridad integrada) para orígenes de datos locales. (Sin embargo, cuando se conecte a Azure SQL, debe usar Identidades administradas para recursos de Azure). Autenticación de Windows se especifica en un cadena de conexión mediante las palabras clave Integrated Security
o Trusted_Connection
, lo que elimina la necesidad de usar un identificador de usuario y una contraseña. Cuando se usa autenticación de Windows, este sistema operativo autentica a los usuarios y el acceso a los recursos del servidor y de la base de datos se determina mediante la concesión de permisos a usuarios y grupos de Windows.
Cuando no sea posible usar la autenticación de Windows, es necesario extremar las precauciones, puesto que las credenciales de usuario están expuestas en la cadena de conexión. En una aplicación ASP.NET, puede configurar una cuenta de Windows como una identidad fija que se usa para conectarse a las bases de datos y a otros recursos de red. Para ello, habilite la suplantación en el elemento de identidad del archivo web.config y especifique un nombre de usuario y una contraseña.
<identity impersonate="true"
userName="MyDomain\UserAccount"
password="*****" />
La cuenta de identidad fija debe ser una cuenta con pocos privilegios a la que sólo se le concedan los permisos necesarios en la base de datos. Además, debe cifrar el archivo de configuración para que el nombre de usuario y la contraseña no se expongan en texto no cifrado.
Importante
Microsoft recomienda usar el flujo de autenticación más seguro disponible. El flujo de autenticación que se describe en este procedimiento requiere un alto grado de confianza en la aplicación y conlleva riesgos que no están presentes en otros flujos. Solo debe usar este flujo cuando otros flujos más seguros, como las identidades administradas, no sean viables.
No use archivos de vínculo de datos universal (UDL)
Evite almacenar cadenas de conexión de OleDbConnection en un archivo de vínculo de datos universal (UDL). Los archivos UDL se almacenan en texto no cifrado y no se pueden cifrar. Un archivo UDL no se puede proteger ni cifrar mediante .NET Framework, ya que se trata de un recurso basado en un archivo externo a la aplicación.
Evitar ataques de inyección con compiladores de cadenas de conexión
Se pueden producir ataques de inyección de cadenas de conexión cuando se usa la concatenación dinámica de cadenas para generar cadenas de conexión basadas en la entrada del usuario. Si no se valida la entrada del usuario y no se crean secuencias de escape para los caracteres o el texto malintencionado, los atacantes pueden tener acceso a datos confidenciales y a otros recursos del servidor. Para resolver este problema, ADO.NET 2.0 incorporó nuevas clases de compilador de cadenas de conexión para validar la sintaxis de las cadenas y garantizar que no se inserten parámetros adicionales. Para obtener más información, vea Generadores de cadenas de conexión.
Use Persist Security Info=False
El valor predeterminado de Persist Security Info
es false, y se recomienda mantener este valor predeterminado en todas las cadenas de conexión. Si Persist Security Info
se establece en true
o yes
, permitirá obtener información confidencial de seguridad de la conexión, incluidos el identificador del usuario y la contraseña, una vez que esté abierta. Si Persist Security Info
se establece en false
o no
, la información de seguridad se descarta tras usarla para abrir la conexión; esto permite garantizar que los orígenes que no sean de confianza no tengan acceso a la información confidencial de seguridad.
Cifrar archivos de configuración
Las cadenas de conexión también se pueden almacenar en archivos de configuración, lo que elimina la necesidad de incrustarlas en el código de la aplicación. Los archivos de configuración son archivos XML estándar para los que .NET Framework ha definido un conjunto común de elementos. Generalmente, las cadenas de conexión de los archivos de configuración se almacenan en el elemento <connectionStrings> del archivo app.config si se trata de una aplicación Windows o del archivo web.config si se trata de una aplicación ASP.NET. Para obtener más información sobre los conceptos básicos de almacenamiento, recuperación y cifrado de cadenas de conexión de archivos de configuración, vea Cadenas de conexión y archivos de configuración.