0
Segurança em PHP: o
que você precisa saber
Jota Júnior
Tolos ignoram complexidade, enquanto
pragmáticos sofrem com ela. Alguns até
conseguem evitar.
Gênios a removem.
Epigrams i...
Há duas formas de escrever programas sem erros;
só a terceira realmente funciona.
Epigrams in Programming(http://www.cs.ya...
“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://w...
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
XSS
Cross-Site Scripting
- Permite inserir código que persiste na
página
- Usuário pode inserir código malicioso e
tornar ...
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 prontas
para facilitar.
Exemplo do framework CodeIgniter
(http://ellislab.com/codeignite...
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ário
a executar ações indesejadas.
CSRF
Como?
<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 esta...
CSRF
4- Ao receber alguma requisição, verifique se o token
foi enviado e, caso tenha sido, se é igual ao
armazenado em ses...
CSRF
Outras considerações:
Complicações podem existir caso o token seja
previsível ou acessível (normalmente se existe out...
CSRF
Como o Facebook trata CSRF no PHP SDK:
https://github.com/facebook/facebook-php-sdk/blob/master/src/base_facebook.php...
CSRF
Passo 3: Envia o token estabelecido para a requisição
CSRF
Passo 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 ...
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 po...
File Upload
Código retirado do site da OWASP
Gasta mais recursos, mas faz uma verificação muito mai
confiável, pois obtém ...
File Upload
Outras considerações:
- GIFs são do mal. Quando possível, não
aceite;
- O velho getimagesize(); é burlável
(po...
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?arqui...
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/shado
w
Path Traversal
É necessário impor limites, não deixar que o usuário
vá a qualquer lugar do sistema. Ele só pode inserir o
...
Path Traversal
Simplesmente não.
Path Traversal
Simples como isso, sem REGEX.
Dessa forma, ../../../anything vira só anything, e
nenhum arquivo indevido é ...
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...
Obrigado :-)
Segurança em PHP: O que você precisa saber
Upcoming SlideShare
Loading in...5
×

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

1,030

Published on

Published in: Technology
2 Comments
4 Likes
Statistics
Notes
No Downloads
Views
Total Views
1,030
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
43
Comments
2
Likes
4
Embeds 0
No embeds

No notes for slide

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

  1. 1. Segurança em PHP: o que você precisa saber Jota Júnior
  2. 2. 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)
  3. 3. Há duas formas de escrever programas sem erros; só a terceira realmente funciona. Epigrams in Programming(http://www.cs.yale.edu/quotes.html)
  4. 4. “Não confie em estranhos.” Sua mãe
  5. 5. Sempre haverá um “ZzboladozZ” Acreditem, já vi este nick! Ele se dizia “ráquer”
  6. 6. Vamos lá! • OWASP • SQL Injection • XSS • CSRF • File Upload • Path Traversal
  7. 7. Vamos lá! • OWASP • SQL Injection • XSS • CSRF • File Upload • Path Traversal
  8. 8. 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/
  9. 9. Vamos lá! • OWASP • SQL Injection • XSS • CSRF • File Upload • Path Traversal
  10. 10. SQL Injection Um dado proveniente do usuário nunca pode virar código diretamente.
  11. 11. SQL Injection
  12. 12. SQL Injection
  13. 13. SQL Injection Existe o jeito complexo e o jeito certo. A escolha é sua.
  14. 14. SQL Injection E quando a query é dinâmica, ou existe alguma limitação para os prepared statements?
  15. 15. SQL Injection
  16. 16. SQL Injection
  17. 17. Vamos lá! • OWASP • SQL Injection • XSS • CSRF • File Upload • Path Traversal
  18. 18. XSS Cross-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
  19. 19. XSS <embed src="http://www.orkut.com.br/GLogin.aspx ?cmd=logout"&gt;
  20. 20. XSS Retirado do site da OWASP Simples como essa função. http://br2.php.net/htmlspecialchars
  21. 21. XSS Novamente, várias ferramentas prontas para facilitar. Exemplo do framework CodeIgniter (http://ellislab.com/codeigniter/user-guide/libraries/input.html)
  22. 22. Vamos lá! • OWASP • SQL Injection • XSS • CSRF • File Upload • Path Traversal
  23. 23. CSRF Chega de proteger o sistema. Proteja também seu usuário.
  24. 24. CSRF Cross Site Request Forgery Permite forjar requisições, levando seu usuário a executar ações indesejadas.
  25. 25. CSRF Como? <a href=”http://bancoruim.com/usuario/transferir/jota/1000”> Download </a>
  26. 26. CSRF Você tem um controller que modifica determinado dado quando requisitado. Como saber que é uma requisição legítima?
  27. 27. CSRF 1- Crie um token aleatório e complexo, como chave de segurança, provavelmente na hora da autenticação.
  28. 28. 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).
  29. 29. 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).
  30. 30. 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.
  31. 31. 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).
  32. 32. CSRF Como 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
  33. 33. CSRF Passo 3: Envia o token estabelecido para a requisição
  34. 34. CSRF Passo 4: Ao receber a requisição, verifica se o código enviado é o mesmo da sessão
  35. 35. Vamos lá! • OWASP • SQL Injection • XSS • CSRF • File Upload • Path Traversal
  36. 36. File Upload Aquele upload de imagens inofensivo pode se tornar uma grande dor de cabeça.
  37. 37. File Upload Alguns dados, aparentemente confiáveis, podem ser maliciosamente manipulados. Entre eles, estão os cabeçalhos HTTP.
  38. 38. File Upload Confira, sempre.
  39. 39. File Upload Uma forma de verificar a imagem é verificando a extensão e o MIME-Type.
  40. 40. File Upload A extensão é bem simples.
  41. 41. 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.
  42. 42. File Upload Código retirado do site da OWASP Gasta mais recursos, mas faz uma verificação muito mai confiável, pois obtém o real MIME-Type.
  43. 43. File Upload Outras considerações: - GIFs são do mal. Quando possível, não aceite; - O velho getimagesize(); é burlável (por GIFs, inclusive!)
  44. 44. Vamos lá! • OWASP • SQL Injection • XSS • CSRF • File Upload • Path Traversal
  45. 45. Path Traversal Imponha limites.
  46. 46. 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
  47. 47. Path Traversal O que você recebe como parâmetro está em um diretório específico, construído para esse fim.
  48. 48. Path Traversal Mas eis que surge o “ZzboladozZ”... http://www.site.com/download.php?arquivo=../../../../etc/shado w
  49. 49. 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.
  50. 50. Path Traversal Simplesmente não.
  51. 51. Path Traversal Simples como isso, sem REGEX. Dessa forma, ../../../anything vira só anything, e nenhum arquivo indevido é acessado.
  52. 52. Path Traversal 1. Quando possível, pode usar identificadores numéricos para os arquivos, e não caminhos.
  53. 53. 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
  54. 54. Obrigado :-)
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×