PDA

Ver la Versión Completa : Evitar programas que revelan passwords y activan botones.


rhino0nt
09-05-2010, 03:28:55
Mi duda, es la siguiente, en una aplicación que realice para bases de datos con niveles de seguridad comence a notar que un usuario estaba realizando funciones que tenía deshabilitadas, al revisar el equipo luego de dar muchas vueltas por otras partes me encuentro con que esta persona tenía instalado un programa llamado VeoVeo, algo viejo pero que básicamente aparte de mostrar las contraseñas ocultas por asteriscos (que no le han funcionado de nada pues las guardo con MD5), además le permite activar y mostrar botones y opciones de menú que han sido deshabilitadas por no tener el usuario acceso a dichas funciones.

Existe alguna forma de evitar este comportamiento con la API o alguna manera de detectar este tipo de programas. De entrada bloquee las funciones más delicadas revisando nuevamente las opciones al abrir las pantallas.

De antemano gracias y un saludo a todos.

Lord Delfos
09-05-2010, 12:23:09
Bueno, con el tema del password no hay nada que hacerle. El TEdit ya es así y punto. Quizás debas buscar algún componente especializado que no funcione igual que el edit. Pero el comportamiento del edit no se puede cambiar.

Con respecto a las opciones de menu... pues a mí no me andan. Es decir, puede que queden habilitadas, pero la propiedad Enabled me queda en False, así que al hacer click en el menú, no pasa nada. Esto es en Delphi 7, así que puede cambiar, quizás sea un bug de D7.

Con los botones, menues y otros componentes quizás sería mejor que crees tu propia propiedad llamada Habilitado, y que maneje la habilitación por su cuenta... Algo así:


type TButton = class(StdCtrls.TButton)
private
FHabilitado: Boolean;
procedure SetHabilitado(Valor: Boolean);
public
property Habilitado: Boolean read FHabilitado write SetHabilitado;
end;


procedure TButton.SetHabilitado(Valor: Boolean);
begin
Enabled:= Valor;
FHabilitado:= Valor;
end;


procedure TForm1.btn1Click(Sender: TObject);
begin
if TButton(Sender).Habilitado then // <-- Acá evitás el problema.
ShowMessage('a');
end;



Se podría usar el truquillo de la "declaración que pisotea" para redefinir la clase TButton y no tener que andar haciendo malabares en cada form.

Y siempre usar el Habilitado y no el enabled para habilitar o deshabilitar el botón.

Es un poco engorroso, porque tendrías que hacerlo con todas las clases que quieras bloquear, pero... Otra cosa no se me ocurre. :)

Qué sé yo, otra no se me ocurre... Esperemos a ver qué dicen los compañeros.

Saludos.

duranguenze
04-06-2010, 22:28:24
O mejor aun, has un chequeo cada vez que de click en un menu, o oculta el menu, asi no podra acceder nisiquiera al menu visible deshabilitado, y no podria activarlo puesto que no tiene a donde apuntar, este tipo de usuarios son una lata ya que creen que estan haciendo una gracia, pero si se les quita ciertas acciones es por algo.

Neftali [Germán.Estévez]
07-06-2010, 11:37:07
La solución viene por no crear no que no se debe utilizar. Es decir, que lo que no está no se puede utilizar.
A veces esa opción es complicada, así que optamos por la desactivar/ocultar determinadas acciones, pero como has comprobado no siempre son efectivas.

Dependiendo de cómo actives/ocultes esas opciones lo más sencillo es pasar esa comprobación al momento de ejecutar una acción o elemento del menú.

Si esto no es posible, utiliza un procedimiento al iniciar el programa para recorrer las opciones del menú y cambiar el TAG, por ejemplo, a las que están desactivadas a -1.

Al ejecutar, compruebas el TAG (que no debería ser -1). Quien dice el TAG, dice crearte una lista en memoria con las desactivadas y comprobar antes de ejecutar que está o no en la lista.

A parte de eso (y si detectas que están ejecutando acciones no permitidas), yo optaría por sacar un mensaje en pantalla tipo...

"El sistema ha detectado que está ejecutando una acción deshabilitada. Usted no debería ejecutar esta opción. Si es un error consulte con el Administrador del sistema. Le informamos además de que esta acción no-permitida/incorrecta queda registrada junto con el nombre de usuario que la realiza."

Algo así como..."Te piensas que eres muy listo, pero que sepas que sé lo que estás haciendo y te tengo fichado..." ;)