En esta ocasión, Christof comparte una experiencia en el tratamiento a seguir al realizar depuración de errores en aplicaciones VFP.
Manejo seguro de errores
Artículo original: Secure error handling
http://www.foxpert.com/knowlbits_200705_4.htm
Autor: Christof Wollenhaupt (http://www.foxpert.com/knowlbits.htm)
Traducido por: Ana María Bisbé York (amby@telefonica.net)
Para PortalFox (http://www.portalfox.com)
Recientemente, revisé una aplicación Visual FoxPro con problemas de seguridad. Esta aplicación utilizaba una DLL muy popular para encriptar transparentemente todas las tablas. Esto es realmente bueno, porque los archivos DBFs no encriptados permiten que los hackers inyecten código en aplicaciones VFP. Romper los algoritmos de encriptación es un ejercicio sin sentido para todos los algoritmos de encriptación estándar.
Hasta ahora, fue muy sencillo desencriptar todos los archivos, porque esta aplicación en particular no protegía el proceso de inicio adecuadamente. Lo que yo hice fue renombrar la DLL. La aplicación falló con un mensaje de error porque no pudo cargar la DLL. Desafortunadamente, el mensaje de error fue uno de los diálogos estándar que muestran Ignorar y Cancelar. Después de seleccionar Ignorar, el siguiente mensaje de error fue algo como "No encontrado Crypt_Register.PRG".
La DLL que define esta función no se había cargado. Cuando Visual FoxPro despejó el nombre del procedimiento, buscó un archivo PRG externo en el directorio actual. Teniendo el nombre del procedimiento, creé un pequeño PRG que solamente recibe algunos parámetros y muestra cada parámetro en un mensaje. Después de copiar el PRG en la carpeta del programa, lancé la aplicación nuevamente. Sin dudas uno de los parámetros era la contraseña.
La lección a aprender de todo esto es, que nunca debemos permitir que el usuario continúe después que ocurre un error, sin que pueda garantizar que el programa regresa a un punto seguro. Generalmente no hay ningún punto seguro hasta que alcanza un READ EVENTS. Si ocurre un error antes de que llegue a un READ EVENTS, termine la aplicación inmediatamente.
|