Jump to content


Photo

[ Função ] Token Session Id


  • Faça o login para participar
7 replies to this topic

#1 Carlos Eduardo.

Carlos Eduardo.

    Novato no fórum

  • Usuários
  • 7 posts
  • Sexo:Masculino
  • Localidade:Penápolis

Posted 24/02/2011, 23:34

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, onde é necessário uma grande estrutura em termos de segurança,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.


Posted Image


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
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.

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.

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:

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:

Posted Image


*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:

Posted Image


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:

logout();


Posted Image


*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:

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.


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.

Edição feita por: Carlos Eduardo., 24/02/2011, 23:39.

believed and gifted programmers since 1994
and you? a programmer? what are you waiting?


#2 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 25/02/2011, 17:54

Você está reinventando a roda. Basicamente descreveu como sessões funcionam.

#3 Carlos Eduardo.

Carlos Eduardo.

    Novato no fórum

  • Usuários
  • 7 posts
  • Sexo:Masculino
  • Localidade:Penápolis

Posted 25/02/2011, 18:07

Sessões ? sério que existe uma lógica igual a esta ? como nunca fui pensar em, em todo meu tempo de programação.
Seu comentário teve algum intuito ? pelo menos leu tudo ?
Aparentimente sim funciona como sessões, mais esta função é mais complexa, fazendo várias checagens que uma função baseada em sessões as vezes... muitas vezes... não tem.

Obrigado pela observação.

believed and gifted programmers since 1994
and you? a programmer? what are you waiting?


#4 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 25/02/2011, 19:13

O que interessa é a partir do passo 4. Quando se inicia um sessão, um hash é atribuído a ela (o id da sessão), o que seria equivalente ao seu "token".

No passo 5, os valores que você quer guardar no banco pra conferência posterior, podem ser guardados na própria sessão. Como os dados ficam do lado do servidor, a segurança é a mesma. Poderia gravar no banco só pra evitar que o mesmo usuário logasse duas vezes ao mesmo tempo. E o fato de o id da sessão ser passado por cookie faz com que seja desnecessário passá-lo por URL, deixando até mais seguro o sistema, por não deixar esse valor visível pro usuário.

Nos passos 6 e 7, essa função de verificação é a mesma que já se faz pra verificar se o usuário está logado, tem permissão pra acessar o recurso e tudo mais com base nos valores gravados na sessão. Nada de novo.

O passo 8 é uma continuação do anterior. Se a função de verificação falhou, desloga o usuário e manda pra tela de login.

O passo 9 é o que acontece quando a sessão expira ou quando ele faz logout e você limpa os valores dela.

O passo 10 é o mesmo que a perda da sessão quando a pessoa fecha o navegador.

#5 Carlos Eduardo.

Carlos Eduardo.

    Novato no fórum

  • Usuários
  • 7 posts
  • Sexo:Masculino
  • Localidade:Penápolis

Posted 25/02/2011, 19:37

Sobre o atrituto no link da token, você falhou.
Se eu gero uma cookie e insiro a token ela já esta visivelmente disponivel para o usuário.
Vou procurar os links pelo qual li alguns tutoriais sobre segurança e quando achar te passo o link, irá te explicar em detalhes a importância de deixar a get com token no link.
Questão de guarda todos os dados na session e fazer o script checar apenas a cookie e assim autenticar, deixaria uma brexa, caso as cookie do usuario fosse roubadas, quem obte-se as cookie teriam acesso a conta do usuário, seria autenticado pelo sistema já que os atributos precisos estão presente nas cookies. È lógica.


E o sistema de login não checa apenas as sessions criadas por ele no ato do login, ele checa o banco de dados da token, pois lá é inserido dados formecido por ele, caso todos os dados batem, ocorre a permissão para requesição do usuário, caso contrário se ele fazer a checagem dos banco da dados, que seriam accounts e tokens e não baterem os dados inseridos anteriormente, ele retorna logout, pois irá automaticamente identificar que o usuário não esta adequadamente logado.

Edição feita por: Carlos Eduardo., 25/02/2011, 19:40.

believed and gifted programmers since 1994
and you? a programmer? what are you waiting?


#6 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 25/02/2011, 19:42

Pelo visto você não está entendendo a diferença entre cookie e sessão. Com sessão, a única coisa que fica armazenada no cliente é o id dela, não os dados. E você poderia nela mesma gravar coisas como IP e navegador pra detectar roubo, sem precisar usar banco de dados.

#7 LarPhozyHah

LarPhozyHah

    Super Veterano

  • Usuários
  • 14515 posts
  • Sexo:Masculino
  • Localidade:San Miguel de Tucuman

Posted 29/10/2017, 06:10

Cephalexin Taste viagra online pharmacy Viagra 100mg Erfahrung
Cialis GСÐРСÐвÐâСÐСÑРÐÐÂnstig Kaufen 40mg generic viagra Contraindicaciones De Propecia Cialis ... Cheap.... 40mg Cialis In Western Australia For Sale

#8 Miguceamma

Miguceamma

    MiguPenjisse

  • Usuários
  • 13201 posts

Posted 29/10/2017, 08:17

Erectile Dysfunction Medications Online Baclofen Acheter 10mg viagra Buy Synthroid Online No Prescriptionbuy Tadacip 20 Viagra A Sharm Buy Predisone




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq