SlideShare uma empresa Scribd logo
Criando aplicações 
seguras com PHP 
Leandro Lugaresi 
TcheLinux - Bento Gonçalves - 08/11/14
Quem sou eu? 
→ Graduado em Análise e 
desenvolvimento de sistemas pela 
Ftec Bento Gonçalves 
→ Desenvolvedor com 3 anos de 
experiência em PHP/MySQL 
→ Apaixonado por segurança e pelo 
mundo open source 
https://github.com/leandro-lugaresi 
http://www.leandrolugaresi.com.br/
Por onde começar? 
→ Estude! 
⤷ http://br.phptherightway.com/ 
⤷ https://www.owasp.org 
⤷ https://github.com/php/php-langspec/ 
⤷ http://www.amazon.com/Essential-PHP-Security-Chris- 
Shiflett/dp/059600656X/ 
⤷ http://www.amazon.com/Pro-PHP-Security-Application- 
Implementation/dp/1430233184/ 
⤷ http://www.phpit.com.br/artigos/hangout-construindo-uma-aplicacao-php- 
a-prova-de-balas.phpit 
→ Não confie no seu usuário 
→ Utilize bibliotecas e frameworks (modernos) reconhecidos pelo mercado.
OWASP top 10 
https://www.owasp.org/index.php/Main_Page 
http://owasptop10.googlecode.com/files/OWASP_Top_10_-_2013_Brazilian_Portuguese.
Códigos de terceiros 
O Composer foi sem dúvidas uma das melhores coisas que aconteceram para 
o PHP nos últimos anos. Ele tornou a obtenção de código de terceiros muito 
mais fácil, porém deve se ter alguns cuidados na sua utilização. 
→ Utilize bibliotecas e complementos estáveis e que tenham uma 
comunidade em torno delas; 
→ Identificar os componentes e suas versões que você está usando, 
incluindo todas as suas dependências; 
→ Monitorar a segurança destes componentes. 
Ferramentas para auxiliar no trabalho: 
→ https://security.sensiolabs.org/check 
→ https://www.versioneye.com/
Trabalhando com 
Erros 
Funções: 
→ error_reporting() - Nível de erro a ser reportado 
→ display_errors() - Exibir ou não os erros na tela 
Aprenda a trabalhar com logs! 
Bibliotecas: 
→ monolog/monolog 
→ zendframework/zend-log
Sanitização 
Toda entrada deve ser filtrada e toda saída deve ser “escapada” 
Funções do php: 
→ htmlspecialchars() 
→ htmlentities() 
→ escapeshellcmd() 
→ escapeshellarg() 
→ filter_input() 
→ strip_tags() 
Bibliotecas: 
→ HTMLPurifier 
→ OWASP AntiSamy 
→ Templates Engines (Twig, 
Smarty)
SQL Injection 
Definição: Injeção de instruções SQL dentro de uma consulta (query). 
Como evitar: 
→ addslashes() 
→ mysql_real_scape_string() 
→ Prepared Statements 
→ ORM* 
ORM librarys: 
→ Doctrine 2 
→ RedBean 
→ Propel
Passwords 
Opções inseguras: 
→ Texto plano/ base64 
→ MD4, MD5 
→ SHA1, SHA256, SHA512 
Problemas: 
→ Foram feitos para serem velozes 
→ GPUs modernas podem realizar 
200M/s interações SHA512 - 
hashcat 
Opções seguras: 
→ Bcrypt 
→ PBKDF2 
Observações: 
→ Bcrypt cost >= 14 
→ PBKDF2 interations = 100000
Criptografia 
Não utilize: 
→ DES 
→ 3DES 
→ ECB mode 
Opções seguras: 
→ AES (rijndael-128) 
→ rijndael-256 
→ blowfish 
Bibliotecas: 
→ zendframework/zend-crypt 
→ http://phpsec.owasp.org/ 
Importante! Não utilize rand() e 
mt_rand(), elas não são opções 
seguras. Utilize 
openssl_random_pseudo_bytes() ou 
mcrypt_create_iv() com o parâmetro 
MCRYPT_DEV_URANDOM.
Two Step Authentication 
Para o usuário ter a senha roubada é mais fácil do que você pensa! A 
verificação em duas etapas (2FA) pode ajudar a manter afastadas pessoas má 
intencionadas, mesmo que elas saibam a senha do seu usuário. 
Funcionamento: 
Adição de uma camada a mais de segurança. Após o login ser feito o servidor 
manda um código verificador através de SMS, e-mail, hardware token ou 
algum app instalado em seu smartphone. 
Problemas: 
A implementação de um sistema 2FA é geralmente custosa pois é necessário 
a contratação de uma empresa que preste este serviço.
Google Authenticator 
O Google Authenticator é um aplicativo para Android, IPhone e BlackBarry, ele 
é utilizado pelo Google nas verificações em duas etapas de seus serviços. 
O aplicativo acabou virando um serviço gratuito e pode ser utilizado por outros 
sistemas que queiram implementar o 2FA. 
Informações complementares: 
→ https://www.google.com/landing/2step/index.html 
→ https://code.google.com/p/google-authenticator/ 
→ https://github.com/leandro-lugaresi/google-authenticator
Muito Obrigado :)

Mais conteúdo relacionado

Mais procurados

por Bruno Milreu Filipe "Casos avançados de teste de invasão – Indo além do “...
por Bruno Milreu Filipe "Casos avançados de teste de invasão – Indo além do “...por Bruno Milreu Filipe "Casos avançados de teste de invasão – Indo além do “...
por Bruno Milreu Filipe "Casos avançados de teste de invasão – Indo além do “...
SegInfo
 
Aula 8 - SQL Injection
Aula 8 - SQL InjectionAula 8 - SQL Injection
Aula 8 - SQL Injection
Carlos Henrique Martins da Silva
 
Introdução ao teste de intrusão em redes
Introdução ao teste de intrusão em redesIntrodução ao teste de intrusão em redes
Introdução ao teste de intrusão em redes
Alisson Fuckner
 
Conceitos de Ajax
Conceitos de AjaxConceitos de Ajax
Conceitos de Ajax
Handerson Frota
 
Direct Web Remoting Sun Tech Days2007
Direct Web Remoting Sun Tech Days2007Direct Web Remoting Sun Tech Days2007
Direct Web Remoting Sun Tech Days2007
Handerson Frota
 
Palestra: Pentest - Intrusão de Redes
Palestra: Pentest - Intrusão de RedesPalestra: Pentest - Intrusão de Redes
Palestra: Pentest - Intrusão de Redes
Bruno Alexandre
 
Construindo uma Aplicação PHP à Prova de Balas - 2010
Construindo uma Aplicação PHP à Prova de Balas - 2010Construindo uma Aplicação PHP à Prova de Balas - 2010
Construindo uma Aplicação PHP à Prova de Balas - 2010
Rafael Jaques
 
Segurança Web com PHP5
Segurança Web com PHP5Segurança Web com PHP5
Segurança Web com PHP5
Douglas V. Pasqua
 
Segurança em Aplicações ASP.NET (XSS e CSRF)
Segurança em Aplicações ASP.NET (XSS e CSRF)Segurança em Aplicações ASP.NET (XSS e CSRF)
Segurança em Aplicações ASP.NET (XSS e CSRF)
Luciano Gerhardt
 
Aula 9 - Backdoor
Aula 9 - BackdoorAula 9 - Backdoor
Escrevendo códigos php seguros
Escrevendo códigos php segurosEscrevendo códigos php seguros
Escrevendo códigos php seguros
Douglas V. Pasqua
 
Struts2 remote codeexecution
Struts2 remote codeexecutionStruts2 remote codeexecution
Struts2 remote codeexecution
Tiago Natel de Moura
 
A1 - Sql Injection na Prática Parte 01
A1 - Sql Injection na Prática Parte 01A1 - Sql Injection na Prática Parte 01
A1 - Sql Injection na Prática Parte 01
Reinaldo Junior
 
Segurança no desenvolvimento web
Segurança no desenvolvimento webSegurança no desenvolvimento web
Segurança no desenvolvimento web
Rafael Monteiro
 
Invasão e Segurança
Invasão e SegurançaInvasão e Segurança
Invasão e Segurança
Carlos Henrique Martins da Silva
 
Desenvolvimento de software seguro
Desenvolvimento de software seguroDesenvolvimento de software seguro
Desenvolvimento de software seguro
Charles Fortes
 
Reverse Ajax Dwr
Reverse Ajax DwrReverse Ajax Dwr
Reverse Ajax Dwr
Handerson Frota
 
MSDN Webcast - Melhores práticas cross browser
MSDN Webcast - Melhores práticas cross browserMSDN Webcast - Melhores práticas cross browser
MSDN Webcast - Melhores práticas cross browser
JP Clementi
 
Comet - ReverseAjax com DWR - Resumo
Comet - ReverseAjax com DWR - ResumoComet - ReverseAjax com DWR - Resumo
Comet - ReverseAjax com DWR - Resumo
Handerson Frota
 
Desenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHPDesenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHP
Flavio Souza
 

Mais procurados (20)

por Bruno Milreu Filipe "Casos avançados de teste de invasão – Indo além do “...
por Bruno Milreu Filipe "Casos avançados de teste de invasão – Indo além do “...por Bruno Milreu Filipe "Casos avançados de teste de invasão – Indo além do “...
por Bruno Milreu Filipe "Casos avançados de teste de invasão – Indo além do “...
 
Aula 8 - SQL Injection
Aula 8 - SQL InjectionAula 8 - SQL Injection
Aula 8 - SQL Injection
 
Introdução ao teste de intrusão em redes
Introdução ao teste de intrusão em redesIntrodução ao teste de intrusão em redes
Introdução ao teste de intrusão em redes
 
Conceitos de Ajax
Conceitos de AjaxConceitos de Ajax
Conceitos de Ajax
 
Direct Web Remoting Sun Tech Days2007
Direct Web Remoting Sun Tech Days2007Direct Web Remoting Sun Tech Days2007
Direct Web Remoting Sun Tech Days2007
 
Palestra: Pentest - Intrusão de Redes
Palestra: Pentest - Intrusão de RedesPalestra: Pentest - Intrusão de Redes
Palestra: Pentest - Intrusão de Redes
 
Construindo uma Aplicação PHP à Prova de Balas - 2010
Construindo uma Aplicação PHP à Prova de Balas - 2010Construindo uma Aplicação PHP à Prova de Balas - 2010
Construindo uma Aplicação PHP à Prova de Balas - 2010
 
Segurança Web com PHP5
Segurança Web com PHP5Segurança Web com PHP5
Segurança Web com PHP5
 
Segurança em Aplicações ASP.NET (XSS e CSRF)
Segurança em Aplicações ASP.NET (XSS e CSRF)Segurança em Aplicações ASP.NET (XSS e CSRF)
Segurança em Aplicações ASP.NET (XSS e CSRF)
 
Aula 9 - Backdoor
Aula 9 - BackdoorAula 9 - Backdoor
Aula 9 - Backdoor
 
Escrevendo códigos php seguros
Escrevendo códigos php segurosEscrevendo códigos php seguros
Escrevendo códigos php seguros
 
Struts2 remote codeexecution
Struts2 remote codeexecutionStruts2 remote codeexecution
Struts2 remote codeexecution
 
A1 - Sql Injection na Prática Parte 01
A1 - Sql Injection na Prática Parte 01A1 - Sql Injection na Prática Parte 01
A1 - Sql Injection na Prática Parte 01
 
Segurança no desenvolvimento web
Segurança no desenvolvimento webSegurança no desenvolvimento web
Segurança no desenvolvimento web
 
Invasão e Segurança
Invasão e SegurançaInvasão e Segurança
Invasão e Segurança
 
Desenvolvimento de software seguro
Desenvolvimento de software seguroDesenvolvimento de software seguro
Desenvolvimento de software seguro
 
Reverse Ajax Dwr
Reverse Ajax DwrReverse Ajax Dwr
Reverse Ajax Dwr
 
MSDN Webcast - Melhores práticas cross browser
MSDN Webcast - Melhores práticas cross browserMSDN Webcast - Melhores práticas cross browser
MSDN Webcast - Melhores práticas cross browser
 
Comet - ReverseAjax com DWR - Resumo
Comet - ReverseAjax com DWR - ResumoComet - ReverseAjax com DWR - Resumo
Comet - ReverseAjax com DWR - Resumo
 
Desenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHPDesenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHP
 

Destaque

Doctrine 2 camada de persistência para php
Doctrine 2   camada de persistência para phpDoctrine 2   camada de persistência para php
Doctrine 2 camada de persistência para php
Fabio B. Silva
 
Doctrine 2.0: A evolução da persistência em PHP
Doctrine 2.0: A evolução da persistência em PHPDoctrine 2.0: A evolução da persistência em PHP
Doctrine 2.0: A evolução da persistência em PHP
Guilherme Blanco
 
Doctrine2 In 10 Minutes
Doctrine2 In 10 MinutesDoctrine2 In 10 Minutes
Doctrine2 In 10 Minutes
Ryan Weaver
 
Prevenindo XSS: Execute apenas o SEU código
Prevenindo XSS: Execute apenas o SEU códigoPrevenindo XSS: Execute apenas o SEU código
Prevenindo XSS: Execute apenas o SEU código
Er Galvão Abbott
 
Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5
Lucas Augusto Carvalho
 
Aplicações realtime com gRPC
Aplicações realtime com gRPCAplicações realtime com gRPC
Aplicações realtime com gRPC
Leandro Lugaresi
 
Microservices e RabbitMQ
Microservices e RabbitMQMicroservices e RabbitMQ
Microservices e RabbitMQ
Leandro Lugaresi
 

Destaque (7)

Doctrine 2 camada de persistência para php
Doctrine 2   camada de persistência para phpDoctrine 2   camada de persistência para php
Doctrine 2 camada de persistência para php
 
Doctrine 2.0: A evolução da persistência em PHP
Doctrine 2.0: A evolução da persistência em PHPDoctrine 2.0: A evolução da persistência em PHP
Doctrine 2.0: A evolução da persistência em PHP
 
Doctrine2 In 10 Minutes
Doctrine2 In 10 MinutesDoctrine2 In 10 Minutes
Doctrine2 In 10 Minutes
 
Prevenindo XSS: Execute apenas o SEU código
Prevenindo XSS: Execute apenas o SEU códigoPrevenindo XSS: Execute apenas o SEU código
Prevenindo XSS: Execute apenas o SEU código
 
Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5
 
Aplicações realtime com gRPC
Aplicações realtime com gRPCAplicações realtime com gRPC
Aplicações realtime com gRPC
 
Microservices e RabbitMQ
Microservices e RabbitMQMicroservices e RabbitMQ
Microservices e RabbitMQ
 

Semelhante a Palestra criando aplicações seguras com php (2)

PHP Desenvolvimento Seguro
PHP Desenvolvimento SeguroPHP Desenvolvimento Seguro
PHP Desenvolvimento Seguro
Flávio Lisboa
 
Segurança de Aplicações WEB e OpenSource
Segurança de Aplicações WEB e OpenSourceSegurança de Aplicações WEB e OpenSource
Segurança de Aplicações WEB e OpenSource
Alexandre Jesus Marcolino
 
Segurança em Aplicativos Web
Segurança em Aplicativos WebSegurança em Aplicativos Web
Segurança em Aplicativos Web
Sergio Henrique
 
TDC2018SP | Trilha Arq PHP - Seguranca de aplicacoes web com o uso de Boas pr...
TDC2018SP | Trilha Arq PHP - Seguranca de aplicacoes web com o uso de Boas pr...TDC2018SP | Trilha Arq PHP - Seguranca de aplicacoes web com o uso de Boas pr...
TDC2018SP | Trilha Arq PHP - Seguranca de aplicacoes web com o uso de Boas pr...
tdc-globalcode
 
Segurança em PHP
Segurança em PHPSegurança em PHP
Segurança em PHP
Augusto Pascutti
 
Java security
Java securityJava security
Java security
armeniocardoso
 
Palestra - Darkmira Tour PHP 2016 - A ilusão das referências sobre desenvolv...
Palestra - Darkmira Tour PHP 2016  - A ilusão das referências sobre desenvolv...Palestra - Darkmira Tour PHP 2016  - A ilusão das referências sobre desenvolv...
Palestra - Darkmira Tour PHP 2016 - A ilusão das referências sobre desenvolv...
Thiago Dieb
 
Pentest conisli07
Pentest conisli07Pentest conisli07
Pentest conisli07
Roberto Castro
 
Proteja sua Hovercraft: Mantendo sua nave livre dos Sentinelas ( Versão Segi...
 Proteja sua Hovercraft: Mantendo sua nave livre dos Sentinelas ( Versão Segi... Proteja sua Hovercraft: Mantendo sua nave livre dos Sentinelas ( Versão Segi...
Proteja sua Hovercraft: Mantendo sua nave livre dos Sentinelas ( Versão Segi...
Alexandro Silva
 
Proteja sua Hovercraft: Mantendo sua nave livre dos Sentinelas
Proteja sua Hovercraft: Mantendo sua nave livre dos SentinelasProteja sua Hovercraft: Mantendo sua nave livre dos Sentinelas
Proteja sua Hovercraft: Mantendo sua nave livre dos Sentinelas
SegInfo
 
Fisl 16 – Nem tudo o que reluz é ouro. hackeando as principais dicas de desen...
Fisl 16 – Nem tudo o que reluz é ouro. hackeando as principais dicas de desen...Fisl 16 – Nem tudo o que reluz é ouro. hackeando as principais dicas de desen...
Fisl 16 – Nem tudo o que reluz é ouro. hackeando as principais dicas de desen...
Thiago Dieb
 
Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...
Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...
Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...
As Zone
 
XSS Desvendado
XSS DesvendadoXSS Desvendado
XSS Desvendado
ricardophp
 
Introdução à Segurança da Informação
Introdução à Segurança da InformaçãoIntrodução à Segurança da Informação
Introdução à Segurança da Informação
Vinicius Marangoni
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
PrinceGuru MS
 
Depurando aplicações PHP like a BOSS
Depurando aplicações PHP like a BOSSDepurando aplicações PHP like a BOSS
Depurando aplicações PHP like a BOSS
Thiago Rodrigues
 
Aplicações Web ‐ Seu site está seguro?
Aplicações Web ‐ Seu site está seguro?Aplicações Web ‐ Seu site está seguro?
Aplicações Web ‐ Seu site está seguro?
Alex Hübner
 
Palestra - PHPESTE 2015 - Hacker do bem, quebrando as principais dicas de des...
Palestra - PHPESTE 2015 - Hacker do bem, quebrando as principais dicas de des...Palestra - PHPESTE 2015 - Hacker do bem, quebrando as principais dicas de des...
Palestra - PHPESTE 2015 - Hacker do bem, quebrando as principais dicas de des...
Thiago Dieb
 
Sql injection
Sql injectionSql injection
Sql injection
Tiago Natel de Moura
 
Teste de segurança do lado servidor - Nível 1
Teste de segurança do lado servidor - Nível 1Teste de segurança do lado servidor - Nível 1
Teste de segurança do lado servidor - Nível 1
Kleitor Franklint Correa Araujo
 

Semelhante a Palestra criando aplicações seguras com php (2) (20)

PHP Desenvolvimento Seguro
PHP Desenvolvimento SeguroPHP Desenvolvimento Seguro
PHP Desenvolvimento Seguro
 
Segurança de Aplicações WEB e OpenSource
Segurança de Aplicações WEB e OpenSourceSegurança de Aplicações WEB e OpenSource
Segurança de Aplicações WEB e OpenSource
 
Segurança em Aplicativos Web
Segurança em Aplicativos WebSegurança em Aplicativos Web
Segurança em Aplicativos Web
 
TDC2018SP | Trilha Arq PHP - Seguranca de aplicacoes web com o uso de Boas pr...
TDC2018SP | Trilha Arq PHP - Seguranca de aplicacoes web com o uso de Boas pr...TDC2018SP | Trilha Arq PHP - Seguranca de aplicacoes web com o uso de Boas pr...
TDC2018SP | Trilha Arq PHP - Seguranca de aplicacoes web com o uso de Boas pr...
 
Segurança em PHP
Segurança em PHPSegurança em PHP
Segurança em PHP
 
Java security
Java securityJava security
Java security
 
Palestra - Darkmira Tour PHP 2016 - A ilusão das referências sobre desenvolv...
Palestra - Darkmira Tour PHP 2016  - A ilusão das referências sobre desenvolv...Palestra - Darkmira Tour PHP 2016  - A ilusão das referências sobre desenvolv...
Palestra - Darkmira Tour PHP 2016 - A ilusão das referências sobre desenvolv...
 
Pentest conisli07
Pentest conisli07Pentest conisli07
Pentest conisli07
 
Proteja sua Hovercraft: Mantendo sua nave livre dos Sentinelas ( Versão Segi...
 Proteja sua Hovercraft: Mantendo sua nave livre dos Sentinelas ( Versão Segi... Proteja sua Hovercraft: Mantendo sua nave livre dos Sentinelas ( Versão Segi...
Proteja sua Hovercraft: Mantendo sua nave livre dos Sentinelas ( Versão Segi...
 
Proteja sua Hovercraft: Mantendo sua nave livre dos Sentinelas
Proteja sua Hovercraft: Mantendo sua nave livre dos SentinelasProteja sua Hovercraft: Mantendo sua nave livre dos Sentinelas
Proteja sua Hovercraft: Mantendo sua nave livre dos Sentinelas
 
Fisl 16 – Nem tudo o que reluz é ouro. hackeando as principais dicas de desen...
Fisl 16 – Nem tudo o que reluz é ouro. hackeando as principais dicas de desen...Fisl 16 – Nem tudo o que reluz é ouro. hackeando as principais dicas de desen...
Fisl 16 – Nem tudo o que reluz é ouro. hackeando as principais dicas de desen...
 
Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...
Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...
Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...
 
XSS Desvendado
XSS DesvendadoXSS Desvendado
XSS Desvendado
 
Introdução à Segurança da Informação
Introdução à Segurança da InformaçãoIntrodução à Segurança da Informação
Introdução à Segurança da Informação
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
 
Depurando aplicações PHP like a BOSS
Depurando aplicações PHP like a BOSSDepurando aplicações PHP like a BOSS
Depurando aplicações PHP like a BOSS
 
Aplicações Web ‐ Seu site está seguro?
Aplicações Web ‐ Seu site está seguro?Aplicações Web ‐ Seu site está seguro?
Aplicações Web ‐ Seu site está seguro?
 
Palestra - PHPESTE 2015 - Hacker do bem, quebrando as principais dicas de des...
Palestra - PHPESTE 2015 - Hacker do bem, quebrando as principais dicas de des...Palestra - PHPESTE 2015 - Hacker do bem, quebrando as principais dicas de des...
Palestra - PHPESTE 2015 - Hacker do bem, quebrando as principais dicas de des...
 
Sql injection
Sql injectionSql injection
Sql injection
 
Teste de segurança do lado servidor - Nível 1
Teste de segurança do lado servidor - Nível 1Teste de segurança do lado servidor - Nível 1
Teste de segurança do lado servidor - Nível 1
 

Palestra criando aplicações seguras com php (2)

  • 1. Criando aplicações seguras com PHP Leandro Lugaresi TcheLinux - Bento Gonçalves - 08/11/14
  • 2. Quem sou eu? → Graduado em Análise e desenvolvimento de sistemas pela Ftec Bento Gonçalves → Desenvolvedor com 3 anos de experiência em PHP/MySQL → Apaixonado por segurança e pelo mundo open source https://github.com/leandro-lugaresi http://www.leandrolugaresi.com.br/
  • 3. Por onde começar? → Estude! ⤷ http://br.phptherightway.com/ ⤷ https://www.owasp.org ⤷ https://github.com/php/php-langspec/ ⤷ http://www.amazon.com/Essential-PHP-Security-Chris- Shiflett/dp/059600656X/ ⤷ http://www.amazon.com/Pro-PHP-Security-Application- Implementation/dp/1430233184/ ⤷ http://www.phpit.com.br/artigos/hangout-construindo-uma-aplicacao-php- a-prova-de-balas.phpit → Não confie no seu usuário → Utilize bibliotecas e frameworks (modernos) reconhecidos pelo mercado.
  • 4. OWASP top 10 https://www.owasp.org/index.php/Main_Page http://owasptop10.googlecode.com/files/OWASP_Top_10_-_2013_Brazilian_Portuguese.
  • 5. Códigos de terceiros O Composer foi sem dúvidas uma das melhores coisas que aconteceram para o PHP nos últimos anos. Ele tornou a obtenção de código de terceiros muito mais fácil, porém deve se ter alguns cuidados na sua utilização. → Utilize bibliotecas e complementos estáveis e que tenham uma comunidade em torno delas; → Identificar os componentes e suas versões que você está usando, incluindo todas as suas dependências; → Monitorar a segurança destes componentes. Ferramentas para auxiliar no trabalho: → https://security.sensiolabs.org/check → https://www.versioneye.com/
  • 6. Trabalhando com Erros Funções: → error_reporting() - Nível de erro a ser reportado → display_errors() - Exibir ou não os erros na tela Aprenda a trabalhar com logs! Bibliotecas: → monolog/monolog → zendframework/zend-log
  • 7. Sanitização Toda entrada deve ser filtrada e toda saída deve ser “escapada” Funções do php: → htmlspecialchars() → htmlentities() → escapeshellcmd() → escapeshellarg() → filter_input() → strip_tags() Bibliotecas: → HTMLPurifier → OWASP AntiSamy → Templates Engines (Twig, Smarty)
  • 8. SQL Injection Definição: Injeção de instruções SQL dentro de uma consulta (query). Como evitar: → addslashes() → mysql_real_scape_string() → Prepared Statements → ORM* ORM librarys: → Doctrine 2 → RedBean → Propel
  • 9. Passwords Opções inseguras: → Texto plano/ base64 → MD4, MD5 → SHA1, SHA256, SHA512 Problemas: → Foram feitos para serem velozes → GPUs modernas podem realizar 200M/s interações SHA512 - hashcat Opções seguras: → Bcrypt → PBKDF2 Observações: → Bcrypt cost >= 14 → PBKDF2 interations = 100000
  • 10. Criptografia Não utilize: → DES → 3DES → ECB mode Opções seguras: → AES (rijndael-128) → rijndael-256 → blowfish Bibliotecas: → zendframework/zend-crypt → http://phpsec.owasp.org/ Importante! Não utilize rand() e mt_rand(), elas não são opções seguras. Utilize openssl_random_pseudo_bytes() ou mcrypt_create_iv() com o parâmetro MCRYPT_DEV_URANDOM.
  • 11. Two Step Authentication Para o usuário ter a senha roubada é mais fácil do que você pensa! A verificação em duas etapas (2FA) pode ajudar a manter afastadas pessoas má intencionadas, mesmo que elas saibam a senha do seu usuário. Funcionamento: Adição de uma camada a mais de segurança. Após o login ser feito o servidor manda um código verificador através de SMS, e-mail, hardware token ou algum app instalado em seu smartphone. Problemas: A implementação de um sistema 2FA é geralmente custosa pois é necessário a contratação de uma empresa que preste este serviço.
  • 12. Google Authenticator O Google Authenticator é um aplicativo para Android, IPhone e BlackBarry, ele é utilizado pelo Google nas verificações em duas etapas de seus serviços. O aplicativo acabou virando um serviço gratuito e pode ser utilizado por outros sistemas que queiram implementar o 2FA. Informações complementares: → https://www.google.com/landing/2step/index.html → https://code.google.com/p/google-authenticator/ → https://github.com/leandro-lugaresi/google-authenticator