Compartir a través de


Conexiones de ADO.NET seguras

Uno de los objetivos más importantes a la hora de proteger una aplicación consiste en proteger el acceso a su origen de datos. Para ello, es imprescindible mantener la confidencialidad de la información de conexión, como el Id. de usuario, la contraseña y el nombre del origen de datos, entre otros. A continuación se ofrecen instrucciones para garantizar la confidencialidad de la información de conexión fundamental.

Evitar almacenar identificadores de usuario y contraseñas en texto sin formato

El almacenamiento de un Id. de usuario y de una contraseña en texto sin formato presenta una vulnerabilidad importante. Si el Id. de usuario y la contraseña forman parte del código fuente, ambos serán vulnerables si el código corre peligro en alguna ocasión. Aunque proporcione una versión compilada del código a un origen externo, este código compilado se puede desensamblar, con lo que el Id. de usuario y la contraseña quedarán expuestos. Por lo tanto, es fundamental que la información importante, como el Id. de usuario y la contraseña, no se encuentre en el código como texto sin formato.

Algunas de las opciones disponibles para que el usuario pueda mantener la confidencialidad de datos como el Id. de usuario y la contraseña son el uso de la criptografía (vea Servicios criptográficos), aunque seguirá siendo necesario tener cuidado al almacenar información clave, y el almacenamiento de la información secreta independientemente de la aplicación, aunque rigurosamente protegida mediante permisos NTFS.

Si se conecta a Microsoft SQL Server, tiene también la opción de utilizar la seguridad integrada, que emplea la identidad del usuario activo en lugar de pasar un Id. de usuario y una contraseña. . Se recomienda encarecidamente utilizar la seguridad integrada.

Nota   Los programadores de ASP.NET deben prestar especial atención cuando utilicen la seguridad integrada. Para obtener información sobre la forma de controlar la identidad del usuario activo en una aplicación ASP.NET, vea Representación de ASP.NET.

Puede proporcionar información de conexión para OleDbConnection mediante un archivo UDL (Universal Data Link). Debido a que un archivo UDL es un recurso externo a la aplicación, estos archivos se deben proteger mediante permisos de archivos NTFS (New Technologies File System), como protección frente a la exposición o modificación de la información de conexión. Además, debe asegurarse de proporcionar una ruta de acceso completa a un archivo UDL a fin de garantizar el uso del archivo UDL adecuado para la conexión.

Los archivos UDL no están cifrados. Si desea incrementar la seguridad de la información de conexión mediante criptografía, no podrá utilizar un archivo UDL para proporcionar información de la cadena de conexión.

Mantener Información de seguridad persistente en False

El establecimiento de Información de seguridad persistente en true o yes permitirá obtener información relativa a la seguridad (como el Id. de usuario y la contraseña) desde la conexión una vez que ésta se haya abierto. Si utiliza un Id. de usuario y una contraseña cada vez que realiza una conexión, contará con mayor seguridad si después de utilizar dicha información para abrir la conexión, la descarta. Como consecuencia, la opción más segura es establecer Información de seguridad persistente en false o en no.

Esto es especialmente importante si proporciona una conexión abierta a un origen que no sea de confianza o guarda la información de conexión en disco. El hecho de mantener Información de seguridad persistente establecida en false garantiza que un origen que no sea de confianza no pueda obtener acceso a la información relativa a la seguridad de la conexión y garantiza también que la información de este tipo no se almacene en disco junto con la información de la cadena de conexión.

Información de seguridad persistente se establece en false de forma predeterminada.

Precaución a la hora de crear cadenas de conexión a partir de datos proporcionados por el usuario

Si toma la información de la cadena de conexión de un origen externo (un usuario que suministre un Id. de usuario y una contraseña, por ejemplo) debe asegurarse de que los valores que utilice para crear la cadena de conexión no contengan parámetros adicionales que modifiquen el comportamiento de la conexión. Para mantener la seguridad de la cadena de conexión, es recomendable que valide todas las entradas de origen externo, asegurándose así de que tienen un formato correcto.

Validar la entrada de datos

Se pueden utilizar expresiones regulares para validar que los datos proporcionados coincidan con un formato determinado. .NET Framework proporciona el objeto Regex, que se encarga de validar un valor utilizando una expresión regular. Por ejemplo, el siguiente código garantiza que el valor del Id. de usuario sea una cadena alfanumérica de 8 caracteres.

Public Static Function ValidateUserid(inString As String) As Boolean
  Dim r As Regex = New Regex("^[A-Za-z0-9]{8}$")
  Return r.IsMatch(inString)
End Function
[C#]
public static bool ValidateUserid(string inString)
{
  Regex r = new Regex("^[A-Za-z0-9]{8}$");
  return r.IsMatch(inString)
}

Vea también

Escribir código de ADO.NET seguro