Proteger la información de conexiónProtecting Connection Information

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.Protecting access to your data source is one of the most important goals when securing an application. Las cadenas de conexión presentan una posible vulnerabilidad si no se protegen.A connection string presents a potential vulnerability if it is not secured. El almacenamiento de la información de conexión en texto sin formato o en la memoria ponen en riesgo el sistema completo.Storing connection information in plain text or persisting it in memory risks compromising your entire system. Las cadenas de conexión incrustadas en el código fuente se pueden leer mediante Ildasm. exe (desensamblador de IL) para ver el lenguaje intermedio de Microsoft (MSIL) en un ensamblado compilado.Connection strings embedded in your source code can be read using the Ildasm.exe (IL Disassembler) to view Microsoft intermediate language (MSIL) in a compiled assembly.

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.Security vulnerabilities involving connection strings can arise based on the type of authentication used, how connection strings are persisted in memory and on disk, and the techniques used to construct them at run time.

Uso de autenticación de WindowsUse Windows Authentication

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.To help limit access to your data source, you must secure connection information such as user ID, password, and data source name. Para evitar exponer información de usuario, se recomienda usar la autenticación de Windows (a veces denominada seguridad integrada) siempre que sea posible.In order to avoid exposing user information, we recommend using Windows authentication (sometimes referred to as integrated security) wherever possible. 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.Windows authentication is specified in a connection string by using the Integrated Security or Trusted_Connection keywords, eliminating the need to use a user ID and password. 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.When using Windows authentication, users are authenticated by Windows, and access to server and database resources is determined by granting permissions to Windows users and groups.

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.For situations where it is not possible to use Windows authentication, you must use extra care because user credentials are exposed in the connection string. 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.In an ASP.NET application, you can configure a Windows account as a fixed identity that is used to connect to databases and other network resources. Habilite la suplantación en el elemento Identity del archivo Web. config y especifique un nombre de usuario y una contraseña.You enable impersonation in the identity element in the web.config file and specify a user name and password.

<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.The fixed identity account should be a low-privilege account that has been granted only necessary permissions in the database. 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.In addition, you should encrypt the configuration file so that the user name and password are not exposed in clear text.

Evite almacenar cadenas de conexión de OleDbConnection en un archivo de vínculo de datos universal (UDL).Avoid storing connection strings for an OleDbConnection in a Universal Data Link (UDL) file. Los archivos UDL se almacenan en texto no cifrado y no se pueden cifrar.UDLs are stored in clear text and cannot be encrypted. 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.A UDL file is an external file-based resource to your application, and it cannot be secured or encrypted using the .NET Framework.

Evitar ataques de inyección con compiladores de cadenas de conexiónAvoid Injection Attacks with Connection String Builders

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.A connection string injection attack can occur when dynamic string concatenation is used to build connection strings based on user input. 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.If the user input is not validated and malicious text or characters not escaped, an attacker can potentially access sensitive data or other resources on the server. 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.To address this problem, ADO.NET 2.0 introduced new connection string builder classes to validate connection string syntax and ensure that additional parameters are not introduced. Para obtener más información, vea Generadores de cadenas de conexión.For more information, see Connection String Builders.

Usar Persist Security Info=FalseUse 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.The default value for Persist Security Info is false; we recommend using this default in all connection strings. 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.Setting Persist Security Info to true or yes allows security-sensitive information, including the user ID and password, to be obtained from a connection after it has been opened. 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.When Persist Security Info is set to false or no, security information is discarded after it is used to open the connection, ensuring that an untrusted source does not have access to security-sensitive information.

Cifrar archivos de configuraciónEncrypt Configuration Files

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.You can also store connection strings in configuration files, which eliminates the need to embed them in your application's code. Los archivos de configuración son archivos XML estándar para los que .NET Framework ha definido un conjunto común de elementos.Configuration files are standard XML files for which the .NET Framework has defined a common set of elements. Las cadenas de conexión de los archivos de configuración se almacenan normalmente dentro del <elemento connectionStrings > del archivo app. config para una aplicación Windows o el archivo Web. config para una aplicación ASP.net.Connection strings in configuration files are typically stored inside the <connectionStrings> element in the app.config for a Windows application, or the web.config file for an ASP.NET application. Para obtener más información sobre los aspectos básicos del almacenamiento, la recuperación y el cifrado de cadenas de conexión de archivos de configuración, vea cadenas de conexión y archivos de configuración.For more information on the basics of storing, retrieving and encrypting connection strings from configuration files, see Connection Strings and Configuration Files.

Vea tambiénSee also