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

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

  • 1.
    Criando aplicações segurascom 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 entradadeve 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 OGoogle 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
  • 13.