Upload
leandro-lugaresi
View
128
Download
1
Embed Size (px)
Citation preview
Criando aplicações
seguras com PHPLeandro 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
http://owasptop10.googlecode.com/files/OWASP_Top_10_-_2013_Brazilian_Portuguese.
https://www.owasp.org/index.php/Main_Page
Códigos de terceirosO 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
ErrosFunçõ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
Funções do php:
→ htmlspecialchars()
→ htmlentities()
→ escapeshellcmd()
→ escapeshellarg()
→ filter_input()
→ strip_tags()
Toda entrada deve ser filtrada e toda saída deve ser “escapada”
Bibliotecas:
→ HTMLPurifier
→ OWASP AntiSamy
→ Templates Engines (Twig,
Smarty)
SQL InjectionDefiniçã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
PasswordsOpçõ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
CriptografiaNã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 AuthenticationPara 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 AuthenticatorO 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 :)