Protección de la información de conexión
Se aplica a: .NET Framework .NET .NET Standard
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 el código fuente se pueden leer con Ildasm.exe (IL Disassembler) para ver el lenguaje intermedio de Microsoft (MSIL) 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.
Usar la 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) siempre que sea posible. La autenticación de Windows se especifica en una 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, ya 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.
Evitar ataques de inyección con generadores 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 solucionar este problema, el proveedor de datos SqlClient de Microsoft para SQL Server incluyó por primera vez una nueva clase de generador de cadenas de conexión para validar la sintaxis de las cadenas y asegurarse de que no se insertan parámetros adicionales. Para obtener más información, vea Generadores de cadenas de conexión.
Uso de "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.
Cifrado de archivos de configuración
Se aplica a: .NET Framework .NET Core .NET Standard
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.