programando php com mais segurança

Post on 15-Apr-2017

760 Views

Category:

Technology

7 Downloads

Preview:

Click to see full reader

TRANSCRIPT

PROGRAMANDO PHP COM MAIS Segurança

Programando PHP Com Mais Segurança!

Nome: Michael AraújoJulho/2016

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

CONHECENDO O PALESTRANTE

https://github.com/michaeldouglas

https://twitter.com/mdba_araujo

https://facebook.com/mdba.araujo

CONHECENDO O PALESTRANTE

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

LARAVEL PAGSEGURO

Laravel Pagseguro

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

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!

INTRODUÇÃO

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

INTRODUÇÃO

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

INTRODUÇÃO

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

INTRODUÇÃO

Prazo curto, segurança de menos!

PHP.INI EM DETALHES

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

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.

PHP.INI EM DETALHES

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

PHP.INI EM DETALHES

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

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

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

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 !

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?

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

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!

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.

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

SALT EXEMPLO MD5

VERIFICAÇÃO DO SALT - EXEMPLO MD5

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.

SALT DINÂMICO EXEMPLO

SALT DINÂMICO EXEMPLO

SALT DINÂMICO EXEMPLO

SALT DINÂMICO EXEMPLO

SALT DINÂMICO ACHEI MUITO COMPLICADO!

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

PASSWORD HASHING - PASSWORD_HASH

PASSWORD HASHING - PASSWORD_HASH

PASSWORD HASHING - HASH 666 ?

ENTENDI ESSE TAL DE PASSWORD HASH!

E COMO VERIFICAR A SENHA DO USUÁRIO?

PASSWORD_VERIFY

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?

CROSS-SITE SCRIPTING

CROSS-SITE SCRIPTING

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

CROSS-SITE SCRIPTING

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

FILTROS DE DADOS

FILTROS DE DADOS

FILTROS DE DADOS - COMO UTILIZAR?

● Utilizando filter_input()● Constantes aceitas:

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

FILTER_INPUT

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

FILTER_VAR

DÚVIDAS ?

Obrigado!

top related