Passando, com segurança, a ID de um sessão no modo transparente
No PHP há duas maneiras de propagar a ID de uma sessão entre as páginas de uma aplicação Web: por cookies e por parâmetro na URL. A primeira é mais simples, mas quando o navegador não suportar cookies torna-se ineficiente. Nestas condições a única opção disponível é usar parâmetros na URL.
As variáveis de sessão são armazenadas no servidor em arquivos do tipo texto. Quando uma sessão é iniciada (usando session_start(), por exemplo) automaticamente é criado um arquivo para receber os nomes e os valores das variáveis da sessão. No entanto, quando o internauta fecha o navegador o arquivo não é excluído. Para o arquivo ser excluído é necessário chamar a função session_destroy().
Veja esta situação:
O usuário José da Silva está registrado no seu site. Ele pode acessar áreas restritas e executar tarefas exclusivas de usuários registrados. Entretanto, por um motivo qualquer, você bloqueia este usuário.
Mas José da Silva é daqueles internautas que a cada página visitada, guarda o endereço no bookmark do navegador. No bookmark ele tem o endereço de uma página da área restrita; este endereço está com uma ID de sessão como parâmetro; no servidor, a sessão não foi destruída com session_destroy(). Se o José da Silva acessar a página usando o endereço do bookmark, dependendo de como a aplicação trabalha com as permissões de usuários, ele terá condições de executar tarefas exclusivas de usuários registrados.
A situação acima caracteriza o fator insegurança quando passamos a ID da sessão como um parâmetro na URL.
As variáveis de sessão são armazenadas no servidor em arquivos do tipo texto. Quando uma sessão é iniciada (usando session_start(), por exemplo) automaticamente é criado um arquivo para receber os nomes e os valores das variáveis da sessão. No entanto, quando o internauta fecha o navegador o arquivo não é excluído. Para o arquivo ser excluído é necessário chamar a função session_destroy().
Veja esta situação:
O usuário José da Silva está registrado no seu site. Ele pode acessar áreas restritas e executar tarefas exclusivas de usuários registrados. Entretanto, por um motivo qualquer, você bloqueia este usuário.
Mas José da Silva é daqueles internautas que a cada página visitada, guarda o endereço no bookmark do navegador. No bookmark ele tem o endereço de uma página da área restrita; este endereço está com uma ID de sessão como parâmetro; no servidor, a sessão não foi destruída com session_destroy(). Se o José da Silva acessar a página usando o endereço do bookmark, dependendo de como a aplicação trabalha com as permissões de usuários, ele terá condições de executar tarefas exclusivas de usuários registrados.
A situação acima caracteriza o fator insegurança quando passamos a ID da sessão como um parâmetro na URL.
Páginas:
1
2
Vocês acham que é possível apagar o id da sessão mesmo depois de um session_destroy()?
29/07/2005 10:48am
(~19 anos atrás)
Fiquei satisfeito com a solução apresentada no artigo, supriu minhas necessidades.
valeu
valeu
11/05/2004 12:15pm
(~20 anos atrás)
Se você der unset ou destroy será quase a mesma coisa, mas com destroy vc terá que chamar session_start() novamente, sendo que nas duas situações a sessão continuará com a mesma ID e a sessão estará vazia
O propósito do código é exatamente este: se a sessão expirou, a aplicação deverá ter novos valores nas variáveis e que sejam válidos e seguros.
O propósito do código é exatamente este: se a sessão expirou, a aplicação deverá ter novos valores nas variáveis e que sejam válidos e seguros.
30/04/2004 7:43am
(~20 anos atrás)
OK Daniel,
Eu entendi, vamos supoter que o cara está navegando na minha sessão, fechou o browser, sendo assim não ativou o session_destroy, e o arquivo ficou no servidor.
Vamos supor que outro dia ele volter e use o session ID que estava na URL, ae o SEU código vai ver que o TIME expirou, ae nesse ponto, vc limpa as variaveis com o session_unset, mas ai todas as variaveis foram para o espaco e eu preciso delas pra continuar a aplicação, ou seja, vou ter que mandar o cara ir para o login, já não é melhor eu dar session_destroy???
Abraços,
Max
Eu entendi, vamos supoter que o cara está navegando na minha sessão, fechou o browser, sendo assim não ativou o session_destroy, e o arquivo ficou no servidor.
Vamos supor que outro dia ele volter e use o session ID que estava na URL, ae o SEU código vai ver que o TIME expirou, ae nesse ponto, vc limpa as variaveis com o session_unset, mas ai todas as variaveis foram para o espaco e eu preciso delas pra continuar a aplicação, ou seja, vou ter que mandar o cara ir para o login, já não é melhor eu dar session_destroy???
Abraços,
Max
29/04/2004 10:16pm
(~20 anos atrás)
Estou com um problema grave.
No meu site ao usuário cadastrar-se é enviado um email para confirmação de registro, até ai tudo bem. Porém descobri que se este email for do hotmail e o navegador for Explorer e ele clicar no link pelo servidor hotmail minha página vai abrir como um frame, e consequentemente o Explorer não vai aceitar cookies.
Tudo bem a solução seria passar o id da seção via URL, mas como meu sistema é enorme fica impossivel fcar caçando todos os links.
Existe algum meio de eu passar o ID da seção via URL por meio de uma função ou algo assim, e que isso se propague para todos os links???
No meu site ao usuário cadastrar-se é enviado um email para confirmação de registro, até ai tudo bem. Porém descobri que se este email for do hotmail e o navegador for Explorer e ele clicar no link pelo servidor hotmail minha página vai abrir como um frame, e consequentemente o Explorer não vai aceitar cookies.
Tudo bem a solução seria passar o id da seção via URL, mas como meu sistema é enorme fica impossivel fcar caçando todos os links.
Existe algum meio de eu passar o ID da seção via URL por meio de uma função ou algo assim, e que isso se propague para todos os links???
21/03/2004 3:53pm
(~20 anos atrás)
Não. O ponto que quis abordar não era bem esse... Visei a relação Cookie x Sessions, que pelos que testes que efetuei aqui, não apresentaram relações. Pelo que entendi do seu artigo, sem Cookies, Sessions não funcionam...
Desculpe-me se interpretei de maneira errônea seu artigo.
Desculpe-me se interpretei de maneira errônea seu artigo.
17/03/2004 11:23am
(~20 anos atrás)
Acessei as páginas administrativas que já tenho prontas. Excelente. Salvei a URL nos Favoritos e desabilitei os cookies. Reiniciei o navegador e tentei acessar... Acesso Negado, como já se esperava... Então... Fiz login e a session foi criada normalmente... =)
Testei no IE6 e Firefox... Ambos não apresentaram erros, nem efeitos inesperados...
Testei no IE6 e Firefox... Ambos não apresentaram erros, nem efeitos inesperados...
16/03/2004 3:11pm
(~21 anos atrás)
oi gente..to usando esse codigo q o daniel mandou ai pra gente..numa include...
na pagina q verifica o login...dou um echo na variavel de sessao q criei para o login e ele me mostra o login correto...
nessa mesma pagina..chamo uma funcao q ta em outra engina pra atualizar os dados do cara...e dou, dentro da funcao um outro echo na variavel de sessao do login e me mostra corretamente de nvo...
depois ainda na pagina que verifica o login...eu chamo a funcao url("home.php");
essa funcao nada mais é q um location.href em java script q eu fiz...
na pagina home.php eu dou um terceiro echo na variavel de sessao do loginname
ai ja aparece diferente...
meu login é girakrok..e aparece intranet...
alguem sabe pq isso acontece?
antes de cada echo eu to colocando a include com esse codigo da sessao...
[]´s
na pagina q verifica o login...dou um echo na variavel de sessao q criei para o login e ele me mostra o login correto...
nessa mesma pagina..chamo uma funcao q ta em outra engina pra atualizar os dados do cara...e dou, dentro da funcao um outro echo na variavel de sessao do login e me mostra corretamente de nvo...
depois ainda na pagina que verifica o login...eu chamo a funcao url("home.php");
essa funcao nada mais é q um location.href em java script q eu fiz...
na pagina home.php eu dou um terceiro echo na variavel de sessao do loginname
ai ja aparece diferente...
meu login é girakrok..e aparece intranet...
alguem sabe pq isso acontece?
antes de cada echo eu to colocando a include com esse codigo da sessao...
[]´s
15/03/2004 8:38am
(~21 anos atrás)
Bem eu nao uso Cookie.. somente Session
os unicos Dados eu que deveria armazenar em cookie seria o Idioma escolhido para o usuario, porem este estou armazenando na tabela de usuarios.
Os Sistemas que faço sao para empresas, nao um Forum.. e nao armazeno usuario e senha, para outra pessoa nao utilizar o nome de outro.
Mas normal.. é só verificar se esta ativo ou nao... e bola pra frente..
os unicos Dados eu que deveria armazenar em cookie seria o Idioma escolhido para o usuario, porem este estou armazenando na tabela de usuarios.
Os Sistemas que faço sao para empresas, nao um Forum.. e nao armazeno usuario e senha, para outra pessoa nao utilizar o nome de outro.
Mas normal.. é só verificar se esta ativo ou nao... e bola pra frente..
14/03/2004 5:37pm
(~21 anos atrás)