SlideShare une entreprise Scribd logo
1  sur  49
Télécharger pour lire hors ligne
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!

Contenu connexe

Tendances

Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panosLaís Lima
 
Async/Await Pattern in C#
Async/Await Pattern in C#Async/Await Pattern in C#
Async/Await Pattern in C#Leandro Silva
 
Uma breve introdução ao Terraform
Uma breve introdução ao TerraformUma breve introdução ao Terraform
Uma breve introdução ao TerraformLeandro Silva
 
Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panosLaís Lima
 
JS Experience 2017 - Utilizando a virtualização para simplificar o desenvolvi...
JS Experience 2017 - Utilizando a virtualização para simplificar o desenvolvi...JS Experience 2017 - Utilizando a virtualização para simplificar o desenvolvi...
JS Experience 2017 - Utilizando a virtualização para simplificar o desenvolvi...iMasters
 
C# 6.0 - DotNetBaixada - Novembro/2015
C# 6.0 - DotNetBaixada - Novembro/2015C# 6.0 - DotNetBaixada - Novembro/2015
C# 6.0 - DotNetBaixada - Novembro/2015Renato Groff
 
C# 6.0 - Interopmix 2015
C# 6.0 - Interopmix 2015C# 6.0 - Interopmix 2015
C# 6.0 - Interopmix 2015Renato Groff
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonIgor Sobreira
 
ASP.NET Core: visão geral, exemplos práticos e novidades - .NET SP - Agosto-2017
ASP.NET Core: visão geral, exemplos práticos e novidades - .NET SP - Agosto-2017ASP.NET Core: visão geral, exemplos práticos e novidades - .NET SP - Agosto-2017
ASP.NET Core: visão geral, exemplos práticos e novidades - .NET SP - Agosto-2017Renato Groff
 
Técnicas de frontend para aplicações django - PythonBrasil[9]
Técnicas de frontend para aplicações django  - PythonBrasil[9]Técnicas de frontend para aplicações django  - PythonBrasil[9]
Técnicas de frontend para aplicações django - PythonBrasil[9]Rael Max
 
Azure Functions e Java: Do Desenvolvimento a Produção
Azure Functions e Java: Do Desenvolvimento a ProduçãoAzure Functions e Java: Do Desenvolvimento a Produção
Azure Functions e Java: Do Desenvolvimento a Produçãothomasdacosta
 
Gerenciando sites em WordPress de forma eficiente: do deploy à manutenção
Gerenciando sites em WordPress de forma eficiente: do deploy à manutençãoGerenciando sites em WordPress de forma eficiente: do deploy à manutenção
Gerenciando sites em WordPress de forma eficiente: do deploy à manutençãospirallab
 
Tutorial Django + Python
Tutorial Django + PythonTutorial Django + Python
Tutorial Django + PythonMateus Padua
 
Django para desenvolvimento web; porque ser repetitivo é chato.
Django para desenvolvimento web; porque ser repetitivo é chato.Django para desenvolvimento web; porque ser repetitivo é chato.
Django para desenvolvimento web; porque ser repetitivo é chato.Arthur Furlan
 
Automação de tarefas com grunt
Automação de tarefas com gruntAutomação de tarefas com grunt
Automação de tarefas com gruntRafael Lyra
 

Tendances (20)

Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panos
 
Como fazer boas libs
Como fazer boas libs Como fazer boas libs
Como fazer boas libs
 
Django - Muito além do básico
Django - Muito além do básicoDjango - Muito além do básico
Django - Muito além do básico
 
Laravel 5
Laravel 5Laravel 5
Laravel 5
 
Async/Await Pattern in C#
Async/Await Pattern in C#Async/Await Pattern in C#
Async/Await Pattern in C#
 
Uma breve introdução ao Terraform
Uma breve introdução ao TerraformUma breve introdução ao Terraform
Uma breve introdução ao Terraform
 
Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panos
 
JS Experience 2017 - Utilizando a virtualização para simplificar o desenvolvi...
JS Experience 2017 - Utilizando a virtualização para simplificar o desenvolvi...JS Experience 2017 - Utilizando a virtualização para simplificar o desenvolvi...
JS Experience 2017 - Utilizando a virtualização para simplificar o desenvolvi...
 
C# 6.0 - DotNetBaixada - Novembro/2015
C# 6.0 - DotNetBaixada - Novembro/2015C# 6.0 - DotNetBaixada - Novembro/2015
C# 6.0 - DotNetBaixada - Novembro/2015
 
C# 6.0 - Interopmix 2015
C# 6.0 - Interopmix 2015C# 6.0 - Interopmix 2015
C# 6.0 - Interopmix 2015
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com Python
 
Vagrant sti
Vagrant stiVagrant sti
Vagrant sti
 
Node js - Javascript Server Side
Node js - Javascript Server SideNode js - Javascript Server Side
Node js - Javascript Server Side
 
ASP.NET Core: visão geral, exemplos práticos e novidades - .NET SP - Agosto-2017
ASP.NET Core: visão geral, exemplos práticos e novidades - .NET SP - Agosto-2017ASP.NET Core: visão geral, exemplos práticos e novidades - .NET SP - Agosto-2017
ASP.NET Core: visão geral, exemplos práticos e novidades - .NET SP - Agosto-2017
 
Técnicas de frontend para aplicações django - PythonBrasil[9]
Técnicas de frontend para aplicações django  - PythonBrasil[9]Técnicas de frontend para aplicações django  - PythonBrasil[9]
Técnicas de frontend para aplicações django - PythonBrasil[9]
 
Azure Functions e Java: Do Desenvolvimento a Produção
Azure Functions e Java: Do Desenvolvimento a ProduçãoAzure Functions e Java: Do Desenvolvimento a Produção
Azure Functions e Java: Do Desenvolvimento a Produção
 
Gerenciando sites em WordPress de forma eficiente: do deploy à manutenção
Gerenciando sites em WordPress de forma eficiente: do deploy à manutençãoGerenciando sites em WordPress de forma eficiente: do deploy à manutenção
Gerenciando sites em WordPress de forma eficiente: do deploy à manutenção
 
Tutorial Django + Python
Tutorial Django + PythonTutorial Django + Python
Tutorial Django + Python
 
Django para desenvolvimento web; porque ser repetitivo é chato.
Django para desenvolvimento web; porque ser repetitivo é chato.Django para desenvolvimento web; porque ser repetitivo é chato.
Django para desenvolvimento web; porque ser repetitivo é chato.
 
Automação de tarefas com grunt
Automação de tarefas com gruntAutomação de tarefas com grunt
Automação de tarefas com grunt
 

Similaire à Programando PHP com Segurança

Fortalecendo seus Servidores em Linux(Hardening) - Minimizando os ataques - S...
Fortalecendo seus Servidores em Linux(Hardening) - Minimizando os ataques - S...Fortalecendo seus Servidores em Linux(Hardening) - Minimizando os ataques - S...
Fortalecendo seus Servidores em Linux(Hardening) - Minimizando os ataques - S...Bruno Alexandre
 
Análise de malware com software livre
Análise de malware com software livreAnálise de malware com software livre
Análise de malware com software livreDiego Santos
 
Palestra criando aplicações seguras com php (2)
Palestra  criando aplicações seguras com php (2)Palestra  criando aplicações seguras com php (2)
Palestra criando aplicações seguras com php (2)Leandro Lugaresi
 
Qualitypress - Segurança em Aplicações Web com PHP
Qualitypress - Segurança em Aplicações Web com PHPQualitypress - Segurança em Aplicações Web com PHP
Qualitypress - Segurança em Aplicações Web com PHPQuality Press
 
Slide curso metasploit
Slide curso metasploitSlide curso metasploit
Slide curso metasploitRoberto Soares
 
Aprendendo a criar plugins para o Wordpress - Richard Barros
Aprendendo a criar plugins para o Wordpress - Richard BarrosAprendendo a criar plugins para o Wordpress - Richard Barros
Aprendendo a criar plugins para o Wordpress - Richard BarrosRichard Barros
 
Ferramentas Essenciais para Desenvolvedores de Plugins WordPress
Ferramentas Essenciais para Desenvolvedores de Plugins WordPressFerramentas Essenciais para Desenvolvedores de Plugins WordPress
Ferramentas Essenciais para Desenvolvedores de Plugins WordPressTiago Hillebrandt
 
Criptografia - como utilizar
Criptografia - como utilizarCriptografia - como utilizar
Criptografia - como utilizarFelipe Weckx
 
Apostila php
Apostila phpApostila php
Apostila phpmurilocbs
 
Apostila php
Apostila phpApostila php
Apostila phpkoldm2
 
OpenShift: NoSQL "a la carte" num PaaS 100% Open Source
OpenShift: NoSQL  "a la carte"  num PaaS 100% Open SourceOpenShift: NoSQL  "a la carte"  num PaaS 100% Open Source
OpenShift: NoSQL "a la carte" num PaaS 100% Open SourceEdgar Silva
 
PHP, Presente e Futuro
PHP, Presente e FuturoPHP, Presente e Futuro
PHP, Presente e FuturoFreedom DayMS
 

Similaire à Programando PHP com Segurança (20)

Fortalecendo seus Servidores em Linux(Hardening) - Minimizando os ataques - S...
Fortalecendo seus Servidores em Linux(Hardening) - Minimizando os ataques - S...Fortalecendo seus Servidores em Linux(Hardening) - Minimizando os ataques - S...
Fortalecendo seus Servidores em Linux(Hardening) - Minimizando os ataques - S...
 
Análise de malware com software livre
Análise de malware com software livreAnálise de malware com software livre
Análise de malware com software livre
 
Palestra criando aplicações seguras com php (2)
Palestra  criando aplicações seguras com php (2)Palestra  criando aplicações seguras com php (2)
Palestra criando aplicações seguras com php (2)
 
Pentest conisli07
Pentest conisli07Pentest conisli07
Pentest conisli07
 
Qualitypress - Segurança em Aplicações Web com PHP
Qualitypress - Segurança em Aplicações Web com PHPQualitypress - Segurança em Aplicações Web com PHP
Qualitypress - Segurança em Aplicações Web com PHP
 
Slide curso metasploit
Slide curso metasploitSlide curso metasploit
Slide curso metasploit
 
Squid proxy
Squid proxySquid proxy
Squid proxy
 
Aprendendo a criar plugins para o Wordpress - Richard Barros
Aprendendo a criar plugins para o Wordpress - Richard BarrosAprendendo a criar plugins para o Wordpress - Richard Barros
Aprendendo a criar plugins para o Wordpress - Richard Barros
 
Ferramentas Essenciais para Desenvolvedores de Plugins WordPress
Ferramentas Essenciais para Desenvolvedores de Plugins WordPressFerramentas Essenciais para Desenvolvedores de Plugins WordPress
Ferramentas Essenciais para Desenvolvedores de Plugins WordPress
 
Criptografia - como utilizar
Criptografia - como utilizarCriptografia - como utilizar
Criptografia - como utilizar
 
Apostila php
Apostila phpApostila php
Apostila php
 
Apostila php
Apostila phpApostila php
Apostila php
 
Apostila php
Apostila phpApostila php
Apostila php
 
Apostila php
Apostila phpApostila php
Apostila php
 
Apostila php
Apostila phpApostila php
Apostila php
 
Casa hacker openwrt
Casa hacker openwrtCasa hacker openwrt
Casa hacker openwrt
 
OpenShift: NoSQL "a la carte" num PaaS 100% Open Source
OpenShift: NoSQL  "a la carte"  num PaaS 100% Open SourceOpenShift: NoSQL  "a la carte"  num PaaS 100% Open Source
OpenShift: NoSQL "a la carte" num PaaS 100% Open Source
 
Dicas de segurança para o PHP e seus amigos
Dicas de segurança para o PHP e seus amigosDicas de segurança para o PHP e seus amigos
Dicas de segurança para o PHP e seus amigos
 
PHP, Presente e Futuro
PHP, Presente e FuturoPHP, Presente e Futuro
PHP, Presente e Futuro
 
Novidades do PHP 5.3 e 6
Novidades do PHP 5.3 e 6Novidades do PHP 5.3 e 6
Novidades do PHP 5.3 e 6
 

Programando PHP com Segurança

  • 1. PROGRAMANDO PHP COM MAIS Segurança Programando PHP Com Mais Segurança! Nome: Michael Araújo Julho/2016
  • 2. 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
  • 4. CONHECENDO O PALESTRANTE Livro: Zend Certified Engineer - Descomplicando a certificação PHP.
  • 6. 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!
  • 7. INTRODUÇÃO PHP é uma linguagem poderosa e sua curva de aprendizagem é mais curta!
  • 8. INTRODUÇÃO Programadores que estão iniciando 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?
  • 11. PHP.INI EM DETALHES PHP.ini não apenas um arquivo a ser ignorado!
  • 12. 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.
  • 13. PHP.INI EM DETALHES A grande questão fica no que devemos limitar em nossa configuração do arquivo php.ini.
  • 14. PHP.INI EM DETALHES Mais uma 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 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
  • 20. 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!
  • 21. 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.
  • 22. 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
  • 24. VERIFICAÇÃO DO SALT - EXEMPLO MD5
  • 25. 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.
  • 30. SALT DINÂMICO ACHEI MUITO 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. PASSWORD HASHING - HASH 666 ?
  • 35. ENTENDI ESSE TAL DE PASSWORD HASH!
  • 36. E COMO VERIFICAR A SENHA DO USUÁRIO?
  • 38. 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?
  • 40. CROSS-SITE SCRIPTING ● Agora que ele obteve o PHPSESSID já se tornou seu usuário!
  • 41. CROSS-SITE SCRIPTING ● O maior problema de segurança que você provavelmente terá é sua confiança no usuário.
  • 44. FILTROS DE DADOS - COMO UTILIZAR? ● Utilizando filter_input() ● Constantes aceitas: ○ INPUT_GET ○ INPUT_POST ○ INPUT_COOKIE ○ INPUT_SERVER ○ INPUT_ENV ○ INPUT_SESSION
  • 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