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

Preview:

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"&gt;

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