Warning: Call-time pass-by-reference has been deprecated; If you would like to pass it by reference, modify the declaration of [runtime function name](). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file in /home/plugmasters/www/sys/admin/includes/classes/class.install.php on line 543
Se protegendo contra roubo de sessões, por Gabriel Sobrinho

  » Início » Programação » PHP » Se protegendo contra roubo de sessões
 
Avaliação: | Publicado em: 05/03/2008
Se protegendo contra roubo de sessões
Gabriel Sobrinho Programador WEB por aproximadamente 2 anos (2007)! Dedico meu trabalho para oferecer soluções simples e práticas para o dia-a-dia de outros programdores.


Muitos já devem ter ouvido falar sobre roubo de sessões. Vou exemplificar um roubo de SID:

Usuário: "Tava vendo esse tópico nesse fórum e gostei... Dá uma olhada:"
http://meuforum.com/topic-2.html?PHPSESSID=a5e8a5e8f2c5d"
Considere que o usuário que postou o link estava logado no fórum e quem acessou, acessou num pequeno intervalo de tempo. Quem acessar vai ficar logado na conta do usuário que postou o link... É lógico que todos os fóruns hoje tem proteção contra isso, isso foi só um exemplo.

A lógica é bem simples:

1. Configurar o tempo de sessão para 1 hora (Padrão do php: 3 horas);
2. Configurar os cookies de sessão para não serem acessados via JS (Ataques XSS);
3. Configurar o php para não recuperar sessões via URL (Exemplo acima);
<?php
// Iniciamos a sessão.
@ini_set('session.cache_expire', 60);
@ini_set('session.cookie_httponly', true);
@ini_set('session.use_only_cookie', );

session_start();
?>
Caso o servidor não aceite ini_set, os erros serão ocultos pelo @. Também fazemos outra proteção que verifica se foi digitada uma id de sessão na URL. Se tiver, nós destruímos a sessão e geramos outra id para a seção.
<?php
if(strpos(strtolower($_SERVER['REQUEST_URI'])
, 'phpsessid') !== >false)
{
session_destroy();
session_regenerate_id();
session_start();
}
?>
Ficando assim nosso script final:
<?php
// Iniciamos a sessão.
@ini_set('session.cache_expire', 60);
@ini_set('session.cookie_httponly', true);
@ini_set('session.use_only_cookie', );

session_start();

if(strpos(strtolower($_SERVER['REQUEST_URI']),
'phpsessid') !== >false)
{
session_destroy();
session_start();
session_regenerate_id();
}
?>

Roubo de sessão via url agora está bloqueado, porém existem outros tipos de roubo de sessão, como por exemplo via XSS que é mais complicado de exemplificar.

Então fica aí a dica, abraços!

valeu cara eu sabia desse tal roubo mas não tinha me animado a ir atras ainda