• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

[ Função ] Token Session ID

treta

pegael.gringo
Joined
Sep 13, 2008
Messages
17
Reaction score
0
Já fazem alguns dias que andei pesquisando sobre brechas mais conhecidas em um sistema em PHP, me deparei com vários resultados, e também várias soluções. E como estou com um projeto ativo para criação de uma web page para ATS, o WebATS. Eu criei uma função que trabalha em conjunto com as funções de login e proteção das páginas que necessita de autenticação da página. Vamos lá?

Objetivo:
A ideia é então adicionar um Token único, aos links ou formulários que pretendo proteger, efectuando a validação no servidor antes de aceitar o pedido.
Desta forma é possível garantir ambas as acções só podem ser iniciadas por um utilizador autenticado e não por um script malicioso numa página forjada pois cada Token é único por cada utilizador.

352n95z.jpg


* Resposta Negativa
* Resposta Positiva
* Requesição
* Dados


Passo 1

O sistema recebe o pedido de login do servidor descrito passo da imagem, o script de login entra em ação checa os dados informados caso sejam incorretos ele retorna pro passo , que é retornando mensagem de erro e retornando o usuário para página de login novamente. Caso os dados informados pelo usuário sejam corretos ele irá passar para o passo que é informar os dados para a função da token. No 5º passo a função pega os dados gera a token e informa pro usuário e redireciona o usuário para o painel de controle. A partir daqui outras funções entram em ação, que descreverei a baixo.


Explicação prática: Etapa 5º

O sistema consiste em criar uma token ID alfa numérica gerado por uma outra função que mistura md5 com sha1 e uma combinação de numero definida pelo dono do site.

Segue exemplo de uma token válida gerada pela função
PHP:
gerar_token();
e02349b6a00532aa0ea3d9d6f9b8f9a856e425c4d4b9a5384

Depois de gerar a token a função consiste também em fazer uma insert ao banco de dados com as informações obtidas do usuário que está identificando-se na página.

PHP:
insert_token();

Este é o trabalho desta função, nela é obtido informações sobre a sessão do usuário e inserido no banco de dados, informações como: Account_ID, Email, Time, IP e HTTP_USER_AGENT.
A account_id é obtida através do sistema de login, que é um sistema paralelo.
Após pegar estas informações ela insere no banco de dados todas informações e insere na máquina do usuário as cookie precisas com as informações necessárias.

Após efetuar o login a função retorna ao login a token gerada pela função.

PHP:
get_token();

O sistema de login irá redirecionar o usuário para o painel de controle com uma get no link que é precisa para o sistema de token operar corretamente, o exemplo abaixo mostra o link gerado pelo sistema:

painel-controle.php?token_id=e02349b6a00532aa0ea3d9d6f9b8f9a856e425c4d4b9a5384

Explicação prática: Etapa 6º

O usuário ao acessar página painel-controle.php a onde está presente a função:

PHP:
check_token();

O trabalho desta função será checar se o usuário está autenticado corretamente para que o sistema aceite todas suas solicitações. IP, Account_ID logada, cookie e time, são as propriedades que a função irá checar. A função irá checar a token_id que está presente na get do link do usuário, caso a get seja outra e não a presente no banco de dados o script retornará uma mensagem:

2qm43mo.jpg

*caso o usuário não atualize a página uma pequena meta tag irá fazer o mesmo após 20 segundos da mensagem estiver ativa.

Ao atualizar a página a token verdadeira irá retornar ao get do link.

Explicação prática: Etapa 7º

O próximo passo do script é checar se a token presente na get do link é a mesma presente na cookie da máquina do usuário e no banco de dados, checando também se account cookie é a correta definida na criação da token no banco de dados, se o ip é o mesmo e a time, caso a token venha a expirar.
Um exemplo prático:

xmss1s.jpg

E como efeito da função, impedirá também que usuários acessem a mesma conta por ip's diferentes, pois o sistema só aceita uma token por account_id e apenas 1 (um) ip.

Explicação prática: Etapa 8º
Para que o sistema deixe o usuário autenticado corretamente é preciso que todas as informações dele bata com as informações que foram inseridas dele ao banco de dados no ato do login, caso contrário, em algum caso extremo a cookie do usuário venha sumir do computador dele mesmo com o login ativo, então neste caso o script irá aborta a identificação dele junto ao site, retornando assim um:

PHP:
logout();

2vjorkn.jpg

*mensagem de erro exibida ao expirar a sessão

Importante ressaltar que o servidor não executará nenhum pedido do usuário sem antes passar pelas funções de checagem da token e login que é sistema que opera paralelo ao sistema de token como dito antes, checando account, senha, email e outros.

Explicação prática: Etapa 9º

Caso nenhum destes erros venham a ocorrer com o usuário então a token irá funcionar perfeitamente e o usuário terá livre acesso as funções do painel de controle. Mais toda token tem um tempo de duração, que pode ser alterado. Um exemplo seja que a configuração esteja para citar 1 (uma) hora de duração para cada token criada, a partir do login. Ao usuário se logar e se passando 1 (uma) hora a time token irá expirar retornando o mesmo erro mostrado a cima, e assim desativando a token do usuário pelo campo no banco de dados: Active, alterando sua a value de 0 para 1.

O usuário ao efetuar o logout do site o script irá executar outra função:

PHP:
clean_token();

Esta função desativa a token do usuário no banco de dados, alterando a value active como eu já lhes disse a cima.

Explicação prática: Etapa 10º

Caso nenhum erro venha ocorrer o servidor recebe os dados verifica e responde ao usuário a solicitação presente, como por exemplo no meu atual projeto: Criar Charatcre, Alterar Senha, Alterar Email e etc.

Usuário ao dar logout do sistema a função irá limpar todos os rastros deixado pela sessão, limpando cookie, e assim desativando a token no banco de dados.

PHP:
logout(); 
clean_token();

Caso o usuário não dê logout desta forma ao sair da página ou fechar o browser outra função dependente da token irá executar o logout por ele, e assim efetuando as ações descrito a cima.

Fim.


È, esta é a lógica usada para a função token session ID. Com este sistema creio eu e tenho fé que as páginas contida no site estarão mais protegidas, e assim determinando que tem acesso a páginas restritas.

O que acharam ? comentem, sobre a estrutura da lógica, e possível falhas.

Obrigado pela atenção.

Eu irei verificar melhor a estrutura do meu code e com passar do tempo se não apresentar nenhuma falha visível irei fazer versões do code disponíveis para gesior acc e morden acc. Assim ambas ficaram mais protegidas.
 
Last edited:
Back
Top