+4

Segurança de Sessão no PHP

criado por Douglas V. Pasqua em 15/04/2010 5:36pm
Session Hijacking

Este ataque é mais difícil de se proteger porém mais difícil de ser explorado também. Supondo que você use o session_regenerate_id() conforme explicado anteriormente, gerando um novo identificador da sessão. O que aconteceria se um usuário malicioso obtesse esse identificador ? Ele poderia facilmente obter acesso à sua sessão. Mas como um atacante poderia ter acesso ao identificador da minha sessão ? Devido ao identificador da sessão estar gravado em um cookie no navegador, o usuário malicioso pode explorar alguma vulnerabilidade do browser ou obter os cookies do navegador através de um ataque muito conhecido chamado de XSS (Cross-Site Scripting). Para que o ataque XSS sejá possível, o site em que a vítima esta logado deverá ter essa vulnerabilidade em alguma das páginas do site. Por incrível que pareça essa vulnerabilidade é fácil de previnir, porém muitos sites estão vulneráveis devido a falta de de cultura do desenvolvedor sobre segurança. Falaremos sobre XSS em outro artigo.

Uma maneira que pode aumentar a segurança e ajudar a previnir session hijacking é checar algum dos headers da requisição. Um header sugerido é o User-Agent, principalmente porquê ele não muda entre as requisições de uma sessão. Você deverá guardar os dados deste header em uma varíáveis de sessão no primeiro acesso do usuário e depois checá-lo nos acessos subsequentes. Uma maneira de dificultar ainda mais o trabalho de um atacante é gravar um hash md5 do valor do header User-Agent. Segue o exemplo:

<?php

session_start();

if (array_key_exists('HTTP_USER_AGENT', $_SESSION))
{
    if ($_SESSION['HTTP_USER_AGENT'] !=
        md5($_SERVER['HTTP_USER_AGENT']))
    {
      /* Acesso inválido. O header User-Agent mudou
       durante a mesma sessão. */
      exit;
    }
}
else
{
  /* Primeiro acesso do usuário, vamos gravar na sessão um
   hash md5 do header User-Agent */
    $_SESSION['HTTP_USER_AGENT'] =
        md5($_SERVER['HTTP_USER_AGENT']);
}
?>

Comentários:

Mostrando 1 - 5 de 5 comentários
Hernani disse:
Muito Bom!
11/11/2016 9:03am (~3 meses atrás)

Juan disse:
Muito legal o artigo!

Obrigado por compartilhar seu conhecimento.
08/04/2014 3:54pm (~2 anos atrás)

Thyago Silva disse:
Perfeito! Valeu pelas recomendações

http://www.cupom.net
18/06/2013 1:37am (~3 anos atrás)

André Luis disse:
Muito bom o artigo, sou inciante na área de web e esse artigo já me deu uma boa base.
01/06/2013 10:36pm (~3 anos atrás)

mauricio disse:
ótimo artigo.
24/02/2013 10:34pm (~4 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)