Clock do Servidor
Estou com um problema que ainda não cosegui resolver. tenho um pequeno aplicativo de controle de ponto, que usa o clock do micro pra registrar a hora, o que deixa o mesmo sujeito a fraude, pois o usuário pode alterar a hora do mesmo e forjar um horário indevido. preciso que este horário seja baseado no clock do servidor, Alguem poderia me ajudar a resolver este problema ?
Grato
Joselito Nascimento
www.jjnascimento@bol.com.br
Grato
Joselito Nascimento
www.jjnascimento@bol.com.br
Joselito Nascimento
Curtidas 0
Respostas
Mmtoor
30/09/2003
Prezado amigo:
tive um problema similar em um sistema que desenvolvi e, pensando nume forma de descobrir isso, decidi criar um contador e gravar o resultado no BD.
Inseri um timer no form e criei uma tabela com a seguinte estrutura:
codigo = chave, data, hora, horaabre e contador.
Dessa forma fica mais fácil, pois cada incremento no contador se dá a cada segundo (1000 no timer). Assim sendo, posso, por uma query, varrer a tabela verificando alterações e/ou fazer o cálculo dos segundos para saber se houve algum tipo de alteração.
o campo horaabre marca a data e a hora no evento onshow do form.
Dai me perguntaram o seguinte: E se atrasarem o relógio antes de abrir o sistema:
Analisei o que havia criado e percebi que pelo cálculo de segundos no contador é possível verificar isso do seguinte modo: Cada vez que o sistema abre ele verifica o último número gravado no contador, pega a hor atual e incrementa o número de contadores necessários para preencher a tabela, como se o sistema não tivesse sido fechado.
Dai, pelo contador, dá pra saber a veracidade do clock no sistema.
Acho que deu pra explicar. Me desculpe se não soube explicar de forma mais clara.
MMTOOR2003
tive um problema similar em um sistema que desenvolvi e, pensando nume forma de descobrir isso, decidi criar um contador e gravar o resultado no BD.
Inseri um timer no form e criei uma tabela com a seguinte estrutura:
codigo = chave, data, hora, horaabre e contador.
Dessa forma fica mais fácil, pois cada incremento no contador se dá a cada segundo (1000 no timer). Assim sendo, posso, por uma query, varrer a tabela verificando alterações e/ou fazer o cálculo dos segundos para saber se houve algum tipo de alteração.
o campo horaabre marca a data e a hora no evento onshow do form.
Dai me perguntaram o seguinte: E se atrasarem o relógio antes de abrir o sistema:
Analisei o que havia criado e percebi que pelo cálculo de segundos no contador é possível verificar isso do seguinte modo: Cada vez que o sistema abre ele verifica o último número gravado no contador, pega a hor atual e incrementa o número de contadores necessários para preencher a tabela, como se o sistema não tivesse sido fechado.
Dai, pelo contador, dá pra saber a veracidade do clock no sistema.
Acho que deu pra explicar. Me desculpe se não soube explicar de forma mais clara.
MMTOOR2003
GOSTEI 0
Hegs
30/09/2003
Se for no SQL Server vc poderia fazer assim:
select Convert(char(2),datepart(hh,getdate()))+´:´+Convert(char(2),datepart(mm,getdate()))+´:´+Convert(char(2),datepart(ss,getdate()))
Será retornado: 11:7:32
select Convert(char(2),datepart(hh,getdate()))+´:´+Convert(char(2),datepart(mm,getdate()))+´:´+Convert(char(2),datepart(ss,getdate()))
Será retornado: 11:7:32
GOSTEI 0
Fava
30/09/2003
Se for Firebird/Interbase
Em versões anteriores ao IB6:
select
cast(´today´ as date), /*zero in the time portion*/
cast(´yesterday´ as date), /*zero in the time portion*/
cast(´tomorrow´ as date), /*zero in the time portion*/
cast(´now´ as date) /*date plus time*/
from rdb$database
No IB6-dialect1:
select
cast(´today´ as date), /*zero in the time portion*/
cast(´yesterday´ as date), /*zero in the time portion*/
cast(´tomorrow´ as date), /*zero in the time portion*/
cast(´now´ as date), /*date plus time*/
current_timestamp /*date plus time*/
from rdb$database
No IB6-dialect3:
select
cast(´today´ as date), /*date-only field*/
current_date, /*date-only field*/
cast(´yesterday´ as date), /*date-only field*/
cast(´tomorrow´ as date), /*date-only field*/
cast(´now´ as timestamp), /*date plus time*/
current_timestamp, /*date plus time*/
current_time /*time-only field*/
from rdb$database
Em versões anteriores ao IB6:
select
cast(´today´ as date), /*zero in the time portion*/
cast(´yesterday´ as date), /*zero in the time portion*/
cast(´tomorrow´ as date), /*zero in the time portion*/
cast(´now´ as date) /*date plus time*/
from rdb$database
No IB6-dialect1:
select
cast(´today´ as date), /*zero in the time portion*/
cast(´yesterday´ as date), /*zero in the time portion*/
cast(´tomorrow´ as date), /*zero in the time portion*/
cast(´now´ as date), /*date plus time*/
current_timestamp /*date plus time*/
from rdb$database
No IB6-dialect3:
select
cast(´today´ as date), /*date-only field*/
current_date, /*date-only field*/
cast(´yesterday´ as date), /*date-only field*/
cast(´tomorrow´ as date), /*date-only field*/
cast(´now´ as timestamp), /*date plus time*/
current_timestamp, /*date plus time*/
current_time /*time-only field*/
from rdb$database
GOSTEI 0
Dedi
30/09/2003
em Um controle de ponto eu fiz assim:
ao Iniciar o aplicativo:
Isso dificulta a fraude;mas não impede,já que o funcionário poderá modificar via dos.
Obs: pegar hora do servidor quando for registrar o horário é uma ideia interessante,na pratica torna-se inviavel por tornar a aplicação muito lenta a não ser nos casos acima com uso do Ib......e o contador que merece uma atenção bem maior.
Dedi.
ao Iniciar o aplicativo:
WinExec(NET TIME \\IP DO SERVIDOR /SET /YES, SW_HIDE); if FileExists(´C:\windows\system\Timedate.cpl´)then RenameFile(´C:\windows\system\Timedate.cpl´,´C:\windows\system\Timedate.pow´);
Isso dificulta a fraude;mas não impede,já que o funcionário poderá modificar via dos.
Obs: pegar hora do servidor quando for registrar o horário é uma ideia interessante,na pratica torna-se inviavel por tornar a aplicação muito lenta a não ser nos casos acima com uso do Ib......e o contador que merece uma atenção bem maior.
Dedi.
GOSTEI 0
Fava
30/09/2003
Para não deixar sua aplicação lenta, pegue a hora no momento de fazer sua inserção/atualização no banco de dados.
insert into registroponto matricula, horario value :matricula, current_time
Se o usuário xunxar a hora do micro é problema dele pois o que está sendo registrado é a hora do servidor.
Isto jamais deixará sua aplicação mais lenta.
insert into registroponto matricula, horario value :matricula, current_time
Se o usuário xunxar a hora do micro é problema dele pois o que está sendo registrado é a hora do servidor.
Isto jamais deixará sua aplicação mais lenta.
GOSTEI 0