55
Segurança em PHP: o que você precisa saber Jota Júnior

Segurança em PHP: O que você precisa saber

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Segurança em PHP: O que você precisa saber

Segurança em PHP: o que você precisa

saberJota Júnior

Page 2: Segurança em PHP: O que você precisa saber

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)

Page 3: Segurança em PHP: O que você precisa saber

Há duas formas de escrever programas sem erros; só a terceira realmente funciona.

Epigrams in Programming(http://www.cs.yale.edu/quotes.html)

Page 4: Segurança em PHP: O que você precisa saber
Page 5: Segurança em PHP: O que você precisa saber

“Não confie em estranhos.”

Sua mãe

Page 6: Segurança em PHP: O que você precisa saber

Sempre haverá um “ZzboladozZ”Acreditem, já vi este nick! Ele se dizia “ráquer”

Page 7: Segurança em PHP: O que você precisa saber

Vamos lá!

•OWASP

•SQL Injection

•XSS

•CSRF

•File Upload

•Path Traversal

Page 8: Segurança em PHP: O que você precisa saber

Vamos lá!

•OWASP

•SQL Injection

•XSS

•CSRF

•File Upload

•Path Traversal

Page 9: Segurança em PHP: O que você precisa saber

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/

Page 10: Segurança em PHP: O que você precisa saber

Vamos lá!

•OWASP

•SQL Injection

•XSS

•CSRF

•File Upload

•Path Traversal

Page 11: Segurança em PHP: O que você precisa saber

SQL Injection

Um dado proveniente do usuário nunca pode virar código diretamente.

Page 12: Segurança em PHP: O que você precisa saber

SQL Injection

Page 13: Segurança em PHP: O que você precisa saber

SQL Injection

Page 14: Segurança em PHP: O que você precisa saber

SQL Injection

Existe o jeito complexo e o jeito certo. A escolha é sua.

Page 15: Segurança em PHP: O que você precisa saber

SQL Injection

E quando a query é dinâmica, ou existe alguma limitação para os

prepared statements?

Page 16: Segurança em PHP: O que você precisa saber

SQL Injection

Page 17: Segurança em PHP: O que você precisa saber

SQL Injection

Page 18: Segurança em PHP: O que você precisa saber

Vamos lá!

•OWASP

•SQL Injection

•XSS

•CSRF

•File Upload

•Path Traversal

Page 19: Segurança em PHP: O que você precisa saber

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

Page 20: Segurança em PHP: O que você precisa saber

XSS<embed src="http://www.orkut.com.br/GLogin.aspx?cmd=logout"&gt;

Page 21: Segurança em PHP: O que você precisa saber

XSS

Retirado do site da OWASP

Simples como essa função.

http://br2.php.net/htmlspecialchars

Page 22: Segurança em PHP: O que você precisa saber

XSS

Novamente, várias ferramentas prontaspara facilitar.

Exemplo do framework CodeIgniter(http://ellislab.com/codeigniter/user-guide/libraries/input.html)

Page 23: Segurança em PHP: O que você precisa saber

Vamos lá!

•OWASP

•SQL Injection

•XSS

•CSRF

•File Upload

•Path Traversal

Page 24: Segurança em PHP: O que você precisa saber

CSRF

Chega de proteger o sistema. Proteja também seu usuário.

Page 25: Segurança em PHP: O que você precisa saber

CSRF

Cross Site Request Forgery

Permite forjar requisições, levando seu usuárioa executar ações indesejadas.

Page 26: Segurança em PHP: O que você precisa saber

CSRFComo?

<a href=”http://bancoruim.com/usuario/transferir/jota/1000

”>Download

</a>

Page 27: Segurança em PHP: O que você precisa saber

CSRF

Você tem um controller que modifica determinado dado quando requisitado.

Como saber que é uma requisição legítima?

Page 28: Segurança em PHP: O que você precisa saber

CSRF

1- Crie um token aleatório e complexo, como chave de segurança, provavelmente na hora da

autenticação.

Page 29: Segurança em PHP: O que você precisa saber

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).

Page 30: Segurança em PHP: O que você precisa saber

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).

Page 31: Segurança em PHP: O que você precisa saber

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.

Page 32: Segurança em PHP: O que você precisa saber

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).

Page 33: Segurança em PHP: O que você precisa saber

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

Page 34: Segurança em PHP: O que você precisa saber

CSRFPasso 3: Envia o token estabelecido para a requisição

Page 35: Segurança em PHP: O que você precisa saber

CSRFPasso 4: Ao receber a requisição, verifica se o

código enviado é o mesmo da sessão

Page 36: Segurança em PHP: O que você precisa saber

Vamos lá!

•OWASP

•SQL Injection

•XSS

•CSRF

•File Upload

•Path Traversal

Page 37: Segurança em PHP: O que você precisa saber

File Upload

Aquele upload de imagens inofensivo pode se tornar uma grande dor de cabeça.

Page 38: Segurança em PHP: O que você precisa saber

File Upload

Alguns dados, aparentemente confiáveis, podem ser maliciosamente manipulados.Entre eles, estão os cabeçalhos HTTP.

Page 39: Segurança em PHP: O que você precisa saber

File Upload

Confira, sempre.

Page 40: Segurança em PHP: O que você precisa saber

File Upload

Uma forma de verificar a imagem é verificando a extensão

e o MIME-Type.

Page 41: Segurança em PHP: O que você precisa saber

File Upload

A extensão é bem simples.

Page 42: Segurança em PHP: O que você precisa saber

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.

Page 43: Segurança em PHP: O que você precisa saber

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.

Page 44: Segurança em PHP: O que você precisa saber

File UploadOutras considerações:

- GIFs são do mal. Quando possível, não aceite;

- O velho getimagesize(); é burlável(por GIFs, inclusive!)

Page 45: Segurança em PHP: O que você precisa saber

Vamos lá!

•OWASP

•SQL Injection

•XSS

•CSRF

•File Upload

•Path Traversal

Page 46: Segurança em PHP: O que você precisa saber

Path Traversal

Imponha limites.

Page 47: Segurança em PHP: O que você precisa saber

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

Page 48: Segurança em PHP: O que você precisa saber

Path Traversal

O que você recebe como parâmetro está em um diretório específico, construído para esse

fim.

Page 49: Segurança em PHP: O que você precisa saber

Path Traversal

Mas eis que surge o “ZzboladozZ”...

http://www.site.com/download.php?arquivo=../../../../etc/shadow

Page 50: Segurança em PHP: O que você precisa saber

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.

Page 51: Segurança em PHP: O que você precisa saber

Path Traversal

Simplesmente não.

Page 52: Segurança em PHP: O que você precisa saber

Path Traversal

Simples como isso, sem REGEX.

Dessa forma, ../../../anything vira só anything, e nenhum arquivo indevido é acessado.

Page 53: Segurança em PHP: O que você precisa saber

Path Traversal

1. Quando possível, pode usar identificadores numéricos para os arquivos, e não caminhos.

Page 54: Segurança em PHP: O que você precisa saber

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

Page 55: Segurança em PHP: O que você precisa saber

Obrigado :-)