Upload
jota-junior
View
884
Download
9
Embed Size (px)
DESCRIPTION
Citation preview
Segurança em PHP: o que você precisa
saberJota Júnior
Tolos ignoram complexidade, enquanto pragmáticos sofrem com ela. Alguns até
conseguem evitar.Gênios a removem.
Epigrams in Programming(http://www.cs.yale.edu/quotes.html)
Há duas formas de escrever programas sem erros; só a terceira realmente funciona.
Epigrams in Programming(http://www.cs.yale.edu/quotes.html)
“Não confie em estranhos.”
Sua mãe
Sempre haverá um “ZzboladozZ”Acreditem, já vi este nick! Ele se dizia “ráquer”
Vamos lá!
•OWASP
•SQL Injection
•XSS
•CSRF
•File Upload
•Path Traversal
Vamos lá!
•OWASP
•SQL Injection
•XSS
•CSRF
•File Upload
•Path Traversal
Uma boa fonte é mais importante do que uma boa memória.
https://www.owasp.org/index.php/PHP_Security_Cheat_Sheet
https://www.owasp.org/
Vamos lá!
•OWASP
•SQL Injection
•XSS
•CSRF
•File Upload
•Path Traversal
SQL Injection
Um dado proveniente do usuário nunca pode virar código diretamente.
SQL Injection
SQL Injection
SQL Injection
Existe o jeito complexo e o jeito certo. A escolha é sua.
SQL Injection
E quando a query é dinâmica, ou existe alguma limitação para os
prepared statements?
SQL Injection
SQL Injection
Vamos lá!
•OWASP
•SQL Injection
•XSS
•CSRF
•File Upload
•Path Traversal
XSSCross-Site Scripting
- Permite inserir código que persiste na página
- Usuário pode inserir código malicioso e tornar seus outros usuários vítimas
XSS<embed src="http://www.orkut.com.br/GLogin.aspx?cmd=logout">
XSS
Retirado do site da OWASP
Simples como essa função.
http://br2.php.net/htmlspecialchars
XSS
Novamente, várias ferramentas prontaspara facilitar.
Exemplo do framework CodeIgniter(http://ellislab.com/codeigniter/user-guide/libraries/input.html)
Vamos lá!
•OWASP
•SQL Injection
•XSS
•CSRF
•File Upload
•Path Traversal
CSRF
Chega de proteger o sistema. Proteja também seu usuário.
CSRF
Cross Site Request Forgery
Permite forjar requisições, levando seu usuárioa executar ações indesejadas.
CSRFComo?
<a href=”http://bancoruim.com/usuario/transferir/jota/1000
”>Download
</a>
CSRF
Você tem um controller que modifica determinado dado quando requisitado.
Como saber que é uma requisição legítima?
CSRF
1- Crie um token aleatório e complexo, como chave de segurança, provavelmente na hora da
autenticação.
CSRF
2- Armazene este token também em uma sessão (ou outra fonte de dados persistente
similar, não acessível ao usuário).
CSRF
3- Ao executar qualquer ação dentro do site, como submeter um formulário em AJAX, envie também o token (que pode estar guardado em
um hidden input).
CSRF
4- Ao receber alguma requisição, verifique se o token foi enviado e, caso tenha sido, se é igual
ao armazenado em sessão. Se não, negue.
CSRF
Outras considerações:Complicações podem existir caso o token seja previsível ou acessível (normalmente se existe outra falha associada, como do navegador ou
de sessão).
CSRFComo o Facebook trata CSRF no PHP SDK:
https://github.com/facebook/facebook-php-sdk/blob/master/src/base_facebook.php
Passo 1 e 2: Cria token e guarda em sessão
CSRFPasso 3: Envia o token estabelecido para a requisição
CSRFPasso 4: Ao receber a requisição, verifica se o
código enviado é o mesmo da sessão
Vamos lá!
•OWASP
•SQL Injection
•XSS
•CSRF
•File Upload
•Path Traversal
File Upload
Aquele upload de imagens inofensivo pode se tornar uma grande dor de cabeça.
File Upload
Alguns dados, aparentemente confiáveis, podem ser maliciosamente manipulados.Entre eles, estão os cabeçalhos HTTP.
File Upload
Confira, sempre.
File Upload
Uma forma de verificar a imagem é verificando a extensão
e o MIME-Type.
File Upload
A extensão é bem simples.
File Upload
O índice type do $_FILES traz o MIME-Type do arquivo,mas o que ele diz ter. É manipulável e, portanto,
não pode ser utilizado.
File Upload
Código retirado do site da OWASP
Gasta mais recursos, mas faz uma verificação muito maisconfiável, pois obtém o real MIME-Type.
File UploadOutras considerações:
- GIFs são do mal. Quando possível, não aceite;
- O velho getimagesize(); é burlável(por GIFs, inclusive!)
Vamos lá!
•OWASP
•SQL Injection
•XSS
•CSRF
•File Upload
•Path Traversal
Path Traversal
Imponha limites.
Path Traversal
Você recebe o caminho de um arquivo, e executa alguma ação com isso.
http://www.site.com/download.php?arquivo=carro.jpg
Path Traversal
O que você recebe como parâmetro está em um diretório específico, construído para esse
fim.
Path Traversal
Mas eis que surge o “ZzboladozZ”...
http://www.site.com/download.php?arquivo=../../../../etc/shadow
Path Traversal
É necessário impor limites, não deixar que o usuário vá a qualquer lugar do sistema. Ele só
pode inserir o nome do arquivo, e não um caminho.
Path Traversal
Simplesmente não.
Path Traversal
Simples como isso, sem REGEX.
Dessa forma, ../../../anything vira só anything, e nenhum arquivo indevido é acessado.
Path Traversal
1. Quando possível, pode usar identificadores numéricos para os arquivos, e não caminhos.
Path Traversal
Não funciona para poucos casos, como arquivos Phar.
E realpath requer que o caminho exista (caso não exista, retorna falso).
2. Caso queira que sejam permitidos diretórios no caminho, mas só “abaixo”,
pode usar o
Obrigado :-)