PROGRAMANDO PHP COM MAIS Segurança
Programando PHP Com Mais Segurança!
Nome: Michael Araújo
Julho/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!

Programando php com mais segurança

  • 1.
    PROGRAMANDO PHP COMMAIS Segurança Programando PHP Com Mais Segurança! Nome: Michael Araújo Julho/2016
  • 2.
    CONHECENDO O PALESTRANTE Criadore 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
  • 3.
  • 4.
    CONHECENDO O PALESTRANTE Livro:Zend Certified Engineer - Descomplicando a certificação PHP.
  • 5.
  • 6.
    LARAVEL CONFERENCE BRASIL LaravelConference 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!
  • 7.
    INTRODUÇÃO PHP é umalinguagem poderosa e sua curva de aprendizagem é mais curta!
  • 8.
    INTRODUÇÃO Programadores que estãoiniciando se preocupam mais em criar belas estruturas de sistemas, cruds e etc.
  • 9.
    INTRODUÇÃO Segurança, por queé um assunto que normalmente fica para o final do projeto?
  • 10.
  • 11.
    PHP.INI EM DETALHES PHP.ininão apenas um arquivo a ser ignorado!
  • 12.
    PHP.INI EM DETALHES PHPpossui alguns recursos dinâmicos que podem ser interessantes porem trazem consigo alguns potenciais riscos, por exemplo, controle de gravação de arquivos.
  • 13.
    PHP.INI EM DETALHES Agrande questão fica no que devemos limitar em nossa configuração do arquivo php.ini.
  • 14.
    PHP.INI EM DETALHES Maisuma questão que fica, devemos virar especialistas de arquivo php.ini, Alguns exemplos!
  • 15.
    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).
  • 16.
    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
  • 17.
    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 !
  • 18.
    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?
  • 19.
    MD5 ● Trabalha comum 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
  • 20.
    SHA1 ● Mais umalgoritmo 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!
  • 21.
    PASSWORD SALT ● Técnicaque 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.
  • 22.
    RAINBOW TABLE ● Consisteem 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
  • 23.
  • 24.
    VERIFICAÇÃO DO SALT- EXEMPLO MD5
  • 25.
    SALT DINÂMICO ● Oideal é 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.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
    SALT DINÂMICO ACHEIMUITO COMPLICADO!
  • 31.
    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
  • 32.
    PASSWORD HASHING -PASSWORD_HASH
  • 33.
    PASSWORD HASHING -PASSWORD_HASH
  • 34.
  • 35.
    ENTENDI ESSE TALDE PASSWORD HASH!
  • 36.
    E COMO VERIFICARA SENHA DO USUÁRIO?
  • 37.
  • 38.
    CROSS-SITE SCRIPTING ● Algunsconhecem 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?
  • 39.
  • 40.
    CROSS-SITE SCRIPTING ● Agoraque ele obteve o PHPSESSID já se tornou seu usuário!
  • 41.
    CROSS-SITE SCRIPTING ● Omaior problema de segurança que você provavelmente terá é sua confiança no usuário.
  • 42.
  • 43.
  • 44.
    FILTROS DE DADOS- COMO UTILIZAR? ● Utilizando filter_input() ● Constantes aceitas: ○ INPUT_GET ○ INPUT_POST ○ INPUT_COOKIE ○ INPUT_SERVER ○ INPUT_ENV ○ INPUT_SESSION
  • 45.
  • 46.
    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
  • 47.
  • 48.
  • 49.