O documento discute técnicas avançadas de segurança e programação defensiva em PHP. Ele aborda tópicos como planejamento, filtragem de dados, injeção de código, upload de arquivos, cookies e sessões. O objetivo é ensinar desenvolvedores a criarem aplicações PHP seguras.
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques
1. PHP no Campo
de Batalha
Segurança Avançada
e Programação
Defensiva
Rafael Jaques
@rafajaques
2. “Porque Deus amou o mundo de tal maneira que deu o seu
Filho Unigênito, para que todo aquele que nele crê não pereça,
mas tenha a vida eterna. Portanto, Deus enviou o seu Filho ao
mundo não para condenar o mundo, mas para que o mundo
fosse salvo por meio dele.” (João 3.16-17)
3. Rafael Jaques
Professor do Instituto Federal de
Educação, Ciência e Tecnologia do
Rio Grande do Sul.
Graduado em Análise e
Desenvolvimento de Sistemas.
Pós-graduado em Gestão e
Docência do Ensino Superior.
Desenvolvedor web e viciado em
segurança.
25. Warning: Cannot modify header information -
headers already sent by (output started at /
path/to/script.php:1) in script.php on line 55
Omita as tags
de fechamento
Boas práticas
41. Type Casting
Assegure-se dos tipos de dados
$numero = (int) $variavel;
$numero = (float) $variavel;
Filtragem de dados
42. Type Casting
Assegure-se dos tipos de dados
$numero = settype($variavel, ‘integer’);
$bool = settype($variavel, ‘boolean’);
$texto = settype($variavel, ‘string’);
Filtragem de dados
43. Type Casting
Assegure-se dos tipos de dados
$numero = intval($variavel);
$numero = floatval($variavel);
$texto = strval($variavel);
Filtragem de dados
59. Abusodeformmail
From: Fulaninho
Bcc: um@email.com, spam@enviar.com, <meu@email.com>
To: email@seguro.com
Subject: Contato via site
Aqui coloco uma mensagem de SPAM sobre viagra ou algo assim!
Possível
112. Servidor
session_start()
Verifica se a sessão
existe
Procura pelo SESSID
em um cookie
Procura pelo SESSID
numa querystring
Busca os dados e
cria a $_SESSION
Sim
Sim
Não
Cria uma nova
SESSID
Não
Cookies e Sessions
120. Exposição de Sessão
Dados de sessão podem ser
visualizados via sniff quando
não criptografado com HTTPS
121. Hospedagens compartilhadas podem
vazar dados dentro dos diretórios com
permissões de leitura a todos
Utilize session_set_save_handler() para alterar o
comportamento de gravação dos dados de sessão
Exposição de Sessão
122. Não é o roubo de um
ID de sessão.
É a imposição de um!
Fixação de Sessão
123. Não permita que sejam utilizados
SID não gerados pela aplicação
Fixação de Sessão
124. Gere um novo SID em
cada requisição
Utilize session_regenerate_id()
Páginas com muito tráfego acabam gerando SID inválidos
Fixação de Sessão
126. Roubo de Sessão
É possível fixar um SID,
forjar ou até mesmo
capturar um cookie!
127. Algumas sugestões para evitar roubo de sessão (tente
equilibrar usabilidade e segurança):
Gerar tokens únicos por usuário
Verificar User-Agent e IP
Utilizar sessões apenas via cookies
Roubo de Sessão
139. Destrua a sessão antes de
alterar o nível de
permissão de usuário
autenticado
Impede que uma sessão de guest seja utilizada para
um usuário autenticado