Uma abordagem sobre técnicas de segurança para aplicações desenvolvidas em PHP, necessárias a qualquer um que tenha interesse em montar um software confiável. Irei abordar maneiras de reduzir os riscos de ataques, maneiras de proteger os usuários da sua aplicação e apresentar algumas bibliotecas e ferramentas Open Source para ajudar neste processo.
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
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