programando php com mais segurança

49
PROGRAMANDO PHP COM MAIS Segurança Programando PHP Com Mais Segurança! Nome: Michael Araújo Julho/2016

Upload: michael-douglas

Post on 15-Apr-2017

758 views

Category:

Technology


7 download

TRANSCRIPT

Page 1: Programando php com mais segurança

PROGRAMANDO PHP COM MAIS Segurança

Programando PHP Com Mais Segurança!

Nome: Michael AraújoJulho/2016

Page 2: Programando php com mais segurança

CONHECENDO O PALESTRANTE

Criador e mantenedor:

https://www.facebook.com/groups/silexbrasil https://www.facebook.com/groups/laravelsp https://www.facebook.com/groups/doctrinebrasil https://www.facebook.com/group/sonicpibrasil

Instrutor:

4 Linux Webschool.io

Page 3: Programando php com mais segurança

CONHECENDO O PALESTRANTE

https://github.com/michaeldouglas

https://twitter.com/mdba_araujo

https://facebook.com/mdba.araujo

Page 4: Programando php com mais segurança

CONHECENDO O PALESTRANTE

Livro: Zend Certified Engineer - Descomplicando a certificação PHP.

Page 5: Programando php com mais segurança

LARAVEL PAGSEGURO

Laravel Pagseguro

https://github.com/michaeldouglas/laravel-pagseguro

Page 6: Programando php com mais segurança

LARAVEL CONFERENCE BRASIL

Laravel Conference Brasil

http://laraconfbrasil.com.br

Data do Evento:

08 de Outubro de 2016

Serão sorteados 2 ingressos:

Combinado hoje iremos verificar com a

PHP SP :) - By Marcelo!

Page 7: Programando php com mais segurança

INTRODUÇÃO

PHP é uma linguagem poderosa e sua curva de aprendizagem é mais curta!

Page 8: Programando php com mais segurança

INTRODUÇÃO

Programadores que estão iniciando se preocupam mais em criar belas estruturas de sistemas, cruds e etc.

Page 9: Programando php com mais segurança

INTRODUÇÃO

Segurança, por que é um assunto que normalmente fica para o final do projeto?

Page 10: Programando php com mais segurança

INTRODUÇÃO

Prazo curto, segurança de menos!

Page 11: Programando php com mais segurança

PHP.INI EM DETALHES

PHP.ini não apenas um arquivo a ser ignorado!

Page 12: Programando php com mais segurança

PHP.INI EM DETALHES

PHP possui alguns recursos dinâmicos que podem ser interessantes porem trazem consigo alguns potenciais riscos, por exemplo, controle de gravação de arquivos.

Page 13: Programando php com mais segurança

PHP.INI EM DETALHES

A grande questão fica no que devemos limitar em nossa configuração do arquivo php.ini.

Page 14: Programando php com mais segurança

PHP.INI EM DETALHES

Mais uma questão que fica, devemos virar especialistas de arquivo php.ini, Alguns exemplos!

Page 15: Programando php com mais segurança

ALLOW_URL_FOPEN E ALLOW_URL_INCLUDE

● Permite que arquivos que não estão no mesmo servidor da sua aplicação possam incluir arquivos.

● Então, se eu precisar habilitar ? ○ allow_url_fopen = On○ allow_url_include = On

● E com esse simples exemplo, podemos ter problemas com: RFI (Remote File Inclusion).

Page 16: Programando php com mais segurança

MAX_EXECUTION_TIME E MAX_IMPUT_TIME

● Configurações que determinam em segundos o quanto seus scripts estão permitidos a executar.

● Max_execution_time: Tempo máximo, em segundos.● Max_input_time: Tempo máximo, em segundos, que um script está

permitido a interpretar, por exemplo, GET E POST. ○ max_execution_time = 30○ max_input_time = 60

Page 17: Programando php com mais segurança

UTILIZAÇÃO DE MEMÓRIA

● Configurações de limite de memória determinam o máximo de memória que seu script poderá alocar.

● Ajuda você a mitigar um problema onde o invasor tenta consumir toda a memória do seu servidor. Exemplos:○ memory_limit = 16M○ upload_max_filesize = 2M○ post_max_size = 8M○ max_input_nesting_levels = 64M

Configurações do PHP um mundo a ser explorado !

Page 18: Programando php com mais segurança

CRIPTOGRAFIA DE DADOS

● O ganho que possuímos com criptografia é que protegemos nossa informação de um invasor. Ou seja, agora, para o invasor decodificar esses dados, ele precisará conhecer o padrão de criptografia que foi usado.

● Uma das criptografias mais famosas é o MD5.● Porém será que só ao utilizar MD5 já estou com senhas seguras?● Existe um site: https://hashkiller.co.uk/md5-decrypter.aspx ela

quebra todos os tipos de cálculo de hash MD5?

Page 19: Programando php com mais segurança

MD5

● Trabalha com um algoritmo conhecido como RSA Data Security.● O RSA aplicado a uma quantidade arbitrária de dados gera um hash

de tamanho fixo de 128 bits.● Em php para utilizar a função: md5().● Hash Md5 123456: e10adc3949ba59abbe56e057f20f883e● Facilmente hashkiller saberá sua senha:

https://hashkiller.co.uk/md5-decrypter.aspx

Page 20: Programando php com mais segurança

SHA1

● Mais um algoritmo muito utilizado por desenvolvedores PHP.● Para utilizar em PHP basta chamar a função sha1().● Hash sha1 123456: 7c4a8d09ca3762af61e59520943dc26494f8941b● Facilmente hashkiller saberá sua senha:

https://hashkiller.co.uk/sha1-decrypter.aspx

● MD5 e SHA1, pode ser bem prático, porém não tende a ser tão seguro da forma que o implementamos!

Page 21: Programando php com mais segurança

PASSWORD SALT

● Técnica que ajuda a melhor a segurança dos cálculos de Hash MD5, SHA1 e etc.

● Gera uma lógica que apenas o seu sistema conhece e que saiba descriptografar.

● Só de implementar SALT em minhas senhas já posso dormir tranquilo?

● Não! Pois o invasor pode descobrir através das seguintes formas:○ O salt presente em um arquivo de configuração.○ O salt presente no banco de dados.○ O atacante pode gerar uma Rainbow Table.

Page 22: Programando php com mais segurança

RAINBOW TABLE

● Consiste em uma tabela (como a de um banco de dados) que o invasor cria para realizar consultas de transação na memória RAM.

● Os resultados computados serão armazenados nessa tabela e, com isso, ele pode descobrir seu algoritmo de hash.

● Programas que fazem Rainbow Table:○ http://rainbowtables.shmoo.com○ http://ophcrack.sourceforge.net

Page 23: Programando php com mais segurança

SALT EXEMPLO MD5

Page 24: Programando php com mais segurança

VERIFICAÇÃO DO SALT - EXEMPLO MD5

Page 25: Programando php com mais segurança

SALT DINÂMICO

● O ideal é que você não deixe o hash de suas senhas fixas.● Solucionar o problema não é tão complexo assim!● A solução é unir um salt dinâmico com nosso hash de senha.● A cada nova requisição de criação de senha, ou atualização, seu

sistema gera um novo padrão para o nosso usuário.

Page 26: Programando php com mais segurança

SALT DINÂMICO EXEMPLO

Page 27: Programando php com mais segurança

SALT DINÂMICO EXEMPLO

Page 28: Programando php com mais segurança

SALT DINÂMICO EXEMPLO

Page 29: Programando php com mais segurança

SALT DINÂMICO EXEMPLO

Page 30: Programando php com mais segurança

SALT DINÂMICO ACHEI MUITO COMPLICADO!

Page 31: Programando php com mais segurança

PASSWORD HASHING API

● Ainda bem que existe password_hash().● O segundo parâmetro é algoritmo a ser utilizado para o cálculo de

hash que são:○ PASSWORD_DEFAULT - Usa o algoritmo bcrypt○ PASSWORD_BCRYPT - o algoritmo utilizado será o

CRYPT_BLOWFISH

Page 32: Programando php com mais segurança

PASSWORD HASHING - PASSWORD_HASH

Page 33: Programando php com mais segurança

PASSWORD HASHING - PASSWORD_HASH

Page 34: Programando php com mais segurança

PASSWORD HASHING - HASH 666 ?

Page 35: Programando php com mais segurança

ENTENDI ESSE TAL DE PASSWORD HASH!

Page 36: Programando php com mais segurança

E COMO VERIFICAR A SENHA DO USUÁRIO?

Page 37: Programando php com mais segurança

PASSWORD_VERIFY

Page 38: Programando php com mais segurança

CROSS-SITE SCRIPTING

● Alguns conhecem o ataque XSS (Cross-site scripting) mas não se importam muito.

● Java script é inofensivo não preciso ficar preocupado com isso!● E se o invasor conseguir a sessão do seu usuário?

Page 39: Programando php com mais segurança

CROSS-SITE SCRIPTING

Page 40: Programando php com mais segurança

CROSS-SITE SCRIPTING

● Agora que ele obteve o PHPSESSID já se tornou seu usuário!

Page 41: Programando php com mais segurança

CROSS-SITE SCRIPTING

● O maior problema de segurança que você provavelmente terá é sua confiança no usuário.

Page 42: Programando php com mais segurança

FILTROS DE DADOS

Page 43: Programando php com mais segurança

FILTROS DE DADOS

Page 44: Programando php com mais segurança

FILTROS DE DADOS - COMO UTILIZAR?

● Utilizando filter_input()● Constantes aceitas:

○ INPUT_GET○ INPUT_POST○ INPUT_COOKIE○ INPUT_SERVER○ INPUT_ENV○ INPUT_SESSION

Page 45: Programando php com mais segurança

FILTER_INPUT

Page 46: Programando php com mais segurança

FILTROS DE DADOS - COMO UTILIZAR?

● Utilizando filter_var()● Constantes aceitas:

○ FILTER_VALIDATE_EMAIL○ FILTER_VALIDATE_URL○ FILTER_VALIDATE_BOOLEAN○ FILTER_VALIDATE_FLOAT○ FILTER_VALIDATE_INT○ FILTER_VALIDATE_IP○ E entre outros:○ http://php.net/manual/en/filter.filters.validate.php

Page 47: Programando php com mais segurança

FILTER_VAR

Page 48: Programando php com mais segurança

DÚVIDAS ?

Page 49: Programando php com mais segurança

Obrigado!