Articulos de Colaboradores
Codigos Fuente
Compiladores
Documentos y Manuales
Programas y Librerias
Recursos y Articulos
Videotutoriales
Servidores (Aplicaciones)
Controles ActiveX

Analisis SEO
Conocer PageRank
Encriptar JS/HTML
Convertir HTML a JavaScript
Convertir HTML/JS a PHP
Tablas ASCII/HTML
Base Windows API
Directorio de Empresas
Libros de Informatica
Rotador de Banners

ARTICULOS TECNICOS SOBRE PROGRAMAS Y PROGRAMACION
PROGRAMACION Y DISEÑO PARA PROGRAMADORES Y WEBMASTERS


Una idea de como tratar la seguridad en nuestros sistemas cuando usamos SQL Server






Una idea de como tratar la seguridad en nuestros sistemas cuando usamos SQLServer
Takeichi Kanzaki Cabrera
.
Uno de los módulos más difícil de implementar de un software generalmente es la seguridad del mismo, en la búsqueda de diversas formas de programar esta se nos ocurrió la idea de crear una tabla dentro de la base de datos que recogiera la información de registro del mismo (nombre del usuario, nombre con el cual entraría al sistema, contraseña, nivel de acceso) y crear una conexión al sistema de base de datos con un usuario y contraseña que le fueran desconocidos al usuario final de nuestro sistema, de manera tal que el mismo sólo pudiera establecer una conexión con los datos por medio de nuestro software.

Una vez conformada esta parte, nos dimos a la tarea de buscar un algoritmo de encriptamiento para no guardar la contraseña del usuario dentro de la base de datos en texto plano, pues es sabido que muchos usuarios cometen el error de usar la misma palabra clave para todos los sistemas que la solicitan y si no la encriptáramos el administrador del servidor de base de datos podría conocer la misma con solo listar el contenido de la tabla que usáramos para almacenar estos datos.

En la búsqueda de un algoritmo de encriptamiento se nos ocurrieron unas cuantas ideas, pero la mayoría rondaba sobre la implementación de uno de los existentes en este campo, lo cual a mí personalmente no me satisfacía mucho pues programar uno de esto algoritmos en Transact-SQL no es una tarea graciosa, y en caso de programarlo dentro del software y no dentro del sistema de base de datos se nos presentaba el problema de que si necesitábamos implementar algo en otro lenguaje de programación teníamos que implementarlo nuevamente, aunque en un inicio pensamos que si lo implementábamos dentro de una dll nos sería suficiente para cualquier otro lenguaje pero la práctica nos demostró lo contrario ya que hicimos unas pruebas usando Visual Basic y Delphi (ambos en su versión 6) y no pudimos llamar a las funciones programadas en uno de ellos desde el otro.

Fue en este momento donde se nos ocurrió la idea de buscar como el SQLServer codifica la contraseña de los usuarios que agregamos sabiendo que el mismo para la gran mayoría de las funciones que realiza lo que hace por debajo es una llamada a alguno de los procedimientos almacenados que trae consigo. Como resultado de la búsqueda encontramos que el mismo cuenta con la función pwdencrypt que encripta una cadena de caracteres y la convierte en un binario de 256 bits, es decir, que podíamos contar con un algoritmo de encriptamiento de 256 bits ya probado sin ni siquiera tener que poner un línea de código, el problema estaba entonces que el mismo cuando encriptaba una contraseña dos veces esta no siempre generaba el mismo código binario, es decir, que dos llamadas a la función pwdencrypt con el mismo parámetro no producía siempre la misma salida, lo cual nos hizo pensar que debía existir una función que se usara para comparar el resultado de la llamada a la función pwdencrypt con la contraseña original, ahora la búsqueda nos era un poco más fácil pues ya teníamos una noción de por donde buscar, en esta ocasión encontramos la función pwdcompare cuya llamada era un poco más difícil pues precisaba de varios parámetros a diferencia de pwdencrypt que sólo requería la contraseña que se deseaba encriptar, pero lo peor de todo fue que no encontramos ningún tipo de documentación sobre estas funciones ni en la ayuda del SQLServer ni en Internet. A continuación presentamos un pequeño problema, el cual resolveremos usando Microsoft Visual Basic .NET, para mostrar el funcionamiento de ambas funciones.

A su empresa se le da la tarea de realizar un sistema de control automatizado para una compañía que tiene sucursales en cinco países diferentes. El mismo debe de ser capaz de detectar a partir de la información de inicio de sesión de un usuario a cual de las sucursales pertenece (o si pertenece a la dirección de la empresa) y según sea el caso será al módulo del sistema al que acceda, es decir, cada sucursal tiene una función específica y el sistema tendrá un módulo por cada sucursal, uno para la dirección de la compañía y un módulo de administración de usuarios. Después de realizada la etapa de análisis y diseño del sistema a usted se le da tarea de implementar el método de administración de usuarios, el cual debe de tener las siguientes características:

  • Es el módulo de inicio del sistema y dependiendo de la información registro entrada por el usuario será el módulo del sistema al que accederá el mismo de manera directa.
  • La información de registro de cada usuario va a estar almacenada dentro de una tabla de la base de datos con el nombre: tUsuariosInfo y debe de tener el Login que usará el usuario para entrar al sistema, la contraseña, el nombre completo del usuario y la sucursal a la cual pertenece (se incluyen la dirección general y el módulo de administración como una sucursal más), el diseño final de la tabla dentro de la base de datos corre por su cuenta y puede contener cualquier otra información que sea útil para el sistema o necesaria para el módulo que usted tiene que implementar. El diseño final que se decide implementar es el siguiente:
Nombre Tipo Llave
Login NVarChar (20) X
Contraseña VarBinary (256)  
NombreUsuario NVarChar (50)   
IdSucursal Int  
  • La interface gráfica del módulo será realizada por un diseñador. Para el acoplamiento de la misma, el código programado por usted debe de tener para el caso de registro de los usuarios una función llamada ValidarUsuario que recibirá como parámetros el nombre del usuario y la contraseña entrada por este, y debe de devolver un dato de tipo boolean especificando si es válida o no la información de registro.
Continua Aqui »




ProgramasProgramacion.com (ex-CGR Software.com)
© 2001-2024 C.G.R. @ Buenos Aires, Republica Argentina

Contacto | Privacidad