![]() |
Evitar que cambien la hora del sistema
Hola foristas!!!
Tengo un programa de venta de ticket y no puedo permitir que el usuario pueda cambiar la hora del sistema ya que los ticket que se venden despues de una hora especifica no son validos.. Ahora, como puedo evitar que el usuario me cambie la hora de la computadora? Cuento con sus ayudas.. El programa esta hecho en Delphi 7 e instalado en Windows 98.. ElCherchu.. |
Una solución aunque un poco chapucera, es:
Busca en el Directorio Windows\System Un archivo llamado TimeDate.Cpl Renombralo, por ejemplo AtimeDate.Cpl. Hasta que se le devuelve su nombre correcto estará inhabilitado el poder cambiar la fecha y hora del sistema. Un Saludo. |
Hola.
Busca una alternativa, por ejemplo, que la fecha y la hora la tome del servidor. |
Gracias!!
Gracias por responder ya estoy probando cambiar el nombre el archivo TimeDate.cpl y ver que pasa.. ElCherchu... |
Si solamente lo necesitas mientras funcione tu aplicación, puedes cambiar el nombre al arrancar y al salir restablecerlo.
Un Saludo. |
Otra solución es decirle al personal que como tengan cojjjjines de cambiar la pppreciosa fecha les das dos yoyas y los mandas de patitas a su casa....
(broma) |
que tal,
mira eso de renombrar el archivo datetime.cpl funciona, pero solo en windows, es decir que desde msdos se podria cambiar mediante el comando time. ademas con respecto a la respuesta de rafita, creo que seria la mas acertada pero si no dispones de una conexion (de cualquier tipo) a un servidor pues no podras hacerlo. Yo lo que te aconsejaria en caso de no contar con un servidor, seria que tu mismo sistema este validando la hora, es decir en una variable cada cierto tiempo registras la hora y si la ultima es menor a la anterior pues es que han atrasado el reloj o si la diferencia es mayor al tiempo que te tardas en revisar la hora pues te haz adelantado y en cualquier caso tomar medidas, ya sea que la reestablezcas o envies algun mensaje para informar lo ocurrido. Espero haberte servido de ayuda |
Yo dudo bastante que un usuario de Windows sea capaz de salir al DOS y teclear una fecha u hora, pero suponiendo que dicho supuesto usuario fuera avanzado y conociera que puede modificar la hora desde el DOS, también se puede editar (con mucho cuidado, abstenerse manazas), el COMMAND.COM, intérprte de comando y cambiar por ejemplo TIME por SIME y DATE pos SATE y este supuesto usuario no podría hacer nada.
Un Saludo. |
Creo que se escapa una opción posible que suelen hacer los usuarios:
Salir del programa, cambiar la fecha, y despues entrar de nuevo. Con esto ya se ha cargado todo el planteamiento. Lo de verificar la hora puede llegar a ser bastante engorroso, sin mencionar que tendrías que controlar el cambio de hora autómatico de windows. La solución más correcta, a mi entender, es la que propone DarkByte, que el usuario no cambie la fecha, y si lo hace, es problema suyo, no tuyo. Si te lo ponen como requerimiento, entonces requiere tú una conexion permanente a internet para mantener la hora sincronizada. Saludos |
Cita:
Es como si las autoridades dijeran, ¿para qué pongo policía?, si alguien roba un auto es su problema no nuestro. // Saludos |
La soloción ha este problema ya lo habia dado en un hilo hace tiempo :cool: la idea es la siguiente:
Al entrar a la aplicacion toma la hora , fecha de la pc y tiempo trascurrido desde que inicio windows lo guardas en un login y en variables en este momento ya no te fijas la hora de la pc, lo que haces te fijas el tiempo trascurrido desde que arranco windows lo resta contra el tiempo que guardaste en la variable y lo suma a los datos de hora y fecha que tenia al iniciar la aplicacion, en caso que un cliente malicioso :mad: salga de la aplicacion, cambie la hora y entre de nuevo realiza validaciones con los datos guardados en el log y daras un cartel de alerta ante una incoherencia entre los datos nuevos y los que tenias registrados :o |
La idea es muy buena, pero que pasa si el usuario cambia la hora antes de entrar en la aplicación?
Un Saludo. |
Haber si te sirbe esto (por lo menos ami me sirvio):
Si el cliente modifica la hora o la fecha antes de entrar al programa, lo comparas de la siguiente manera: .................................................................................................... ....... Si sale del programa , cambia la hora o la fecha y entra lo validas con la hora , fecha y tiempo trascuirrido desde que arranco windows que tenias al cerrar el programa. Si encontras poca diferencia entre el tiempo trascurrido desde que arranco windows y el equivalente que guardaste al salir y notas que la hora es menor o que la fecha vario, guarda la advertencia en un log que pudo haber fraude. .................................................................................................... ....... Si el cliente reinica la pc y antes de entrar al programa modifica la hora o la fecha lo unico que podes validar es que la fecha tiene que ser igual o mayor a la ultima grabada y si la fecha es igual que la hora tiene que ser mayor a la guardada si no es asi ,guarda la advertencia en un log que pudo haber fraude. .................................................................................................... ....... No podras evitar el fraude pero si tenes el historico podras comprobar dicho fraude y tomar alguna represaria legal con el cliente (de ser posible colocale un login de entrada al programa para saber quien fue quien realizo el fraude). Otra posibilidad es mezclar esta idea de proteccion con la idea que te mensionaron anteriomente de tomar la fecha y hora de algun lugar externo por medio de una conexion a internet o por modem. |
Se me ocurre
Considero que las propuestas de todos son buenisimas (concideren que inicio en esto), lo que sugiere ACERTIJ022 promete solución, si partimos del hecho de que el sistema lo arranca el propietario y que se puede evitar (hasta cierto punto) que el usuario apague el sistema y que aparte podemos ejecutar una aplicacion al iniciar la maquina, parece optimo lo que sugiere Acertij002. Aunque claro que aquel que quiera hacer fraude lo hara de una u otra forma, pero no es lo mismo partir de nada a por lo menos tener una referencia de en que momento fue.
Gracias. Saludos |
Cita:
|
Creo, me parece, que un usuario 'normal' en windows no puede cambiar la hora del sistema.
La otra opción de coger la hora del servidor es la que se usa siempre en un entorno cliente/servidor, que sin importar la hora que tenga cada uno de los terminales/equipos/tpvs/pcs... conectados, lo que se hace es coger la fecha y hora del servidor de bases de datos, que se supone que es una máquina no accesible a ningún usuario. |
Otra Opción sería crear un servicio / programa oculto que le notifiquen cuando el usuario cambie la hora del sistema. Muestras un mensaje en pantalla y si tu programa está funcionando, puedes sacar un mensaje en pantalla poniendo verde al usuario :D :D.
No he mirado si tambien lo detecta en el DOS, además podría reiniciar la máquina entrar en modo DOS y cambiar la fecha, pero bueno, esos temas se han tratado anteriormente. Edito: He puesto con comentarios el procedure Register, ya que no me gusta tenerlo en la paleta de componentes de Delphi, sino tenerlo en el Library Path y crearlo por código como si fuera un objeto más. Si quieres tenerlo en la paleta, pues quita los comentarios de dicho procedure. Aunque el código es antiguo, no disponía de él cuando se originó este hilo. Saludos y suerte. |
La franja horaria es GMT +2. Ahora son las 03:49:08. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi