Segurança PHP - por Samyr Abdo

2.151 visualizações

Publicada em

Apresentação que tem como objetivo mostrar algumas técnicas de segurança em programas desenvolvidos em PHP.

0 comentários
3 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
2.151
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
77
Comentários
0
Gostaram
3
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Segurança PHP - por Samyr Abdo

  1. 1. SEGURANÇA PHP Samyr Abdo
  2. 2. XSS
  3. 3. XSS XSS(Cross Site Scripting) é uma técnica utilizada para roubar sessões (cookies) em uma aplicação web. Como funciona? Injeção de tags html e comandos javascript em alguma função de um sistema.
  4. 4. XSS Como atacar? Simulando o ataque: http://localhost/seguranca/xss.php?temp=<script>alert(doc ument.cookie)</script>
  5. 5. XSS Como se proteger? htmlspecialchars() htmlentities()  Converte caracteres especiais para a realidade HTML
  6. 6. SESSIONS
  7. 7. SESSIONS Como funciona? Principais ataques:  Session fixation  Session hijacking.
  8. 8. SESSIONS - SESSION FIXATION Como atacar? <a href="http://www.dominio- exemplo.com?PHPSESSID=987654321">Acessar< /a>
  9. 9. SESSIONS - SESSION FIXATION Simulando o ataque:<?php session_start(); if (!array_key_exists(visitas, $_SESSION)) $_SESSION[visitas] = 1; else $_SESSION[visitas]++; echo $_SESSION[visitas];?>
  10. 10. SESSIONS - SESSION FIXATION Testando a vulnerabilidade  url + ?PHPSESSID=654321
  11. 11. SESSIONS - SESSION FIXATION Como se proteger?  Basta gerar novamente o identificador de sessão toda vez que o usuário autenticar.Ex.: <?php if (usuario_autenticado()) { session_regenerate_id(); } ?>
  12. 12. SESSIONS - SESSSION HIJACKING Ataque mais difícil de se proteger, porém mais difícil de ser explorado. Devido ao identificador da sessão estar gravado em um cookie no navegador, o usuário malicioso pode explorar alguma vulnerabilidade do browser ou obter os cookies do navegador através de um ataque chamado XSS.
  13. 13. SESSIONS - SESSSION HIJACKING Como se proteger?  Chegar algum dos headers da aplicação.  Criptografia md5
  14. 14. SESSIONS - SESSSION HIJACKING Header “HTTP_USER_AGENT”  Exemplo do Header no Mozilla: Mozilla/5.0 (Windows NT 6.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1  Exemplo do Header no Chrome: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.77 Safari/535.7
  15. 15. SESSIONS - SESSSION HIJACKING Ex: <?php session_start(); if (array_key_exists(HTTP_USER_AGENT, $_SESSION)) { if ($_SESSION[HTTP_USER_AGENT] != md5($_SERVER[HTTP_USER_AGENT])) { /* Acesso inválido. O header User-Agent mudou durante a mesma sessão. */ exit; } } else { /* Primeiro acesso do usuário, vamos gravar na sessão um hash md5 do header User-Agent */ $_SESSION[HTTP_USER_AGENT] = md5($_SERVER[HTTP_USER_AGENT]); } ?>
  16. 16. INCLUDE X REQUIRE
  17. 17. INCLUDE X REQUIRE  Include(): Tenta incluir uma página. Em caso de erro, o script retorna um warning (aviso) e prossegue com a execução do script.  Require(): Tenta incluir uma página. Em caso de erro, o script retorna um fatal error e aborta a execução do script.
  18. 18. INCLUDE X REQUIRE  Como atacar? RFI (Remote File Inclusion) e LFI (Local File Inclusion) Ex: Endereço: index.php?url=[Parâmetro] <?php if (isset($_GET[url])) { $pg = $_GET[url]; include($pg); } ?>
  19. 19. INCLUDE X REQUIRE  Como se proteger?  RFI (Remote File Inclusion) – uso de expressões regulares Endereço: index.php?url=[Parâmetro] <?php if (isset($_GET[url])) { $pg = $_GET[url]; $testa = /([http])([:]{1})/; if (preg_match($testa,$pg) != TRUE) include($pg); else echo „ERRADO‟; } ?>
  20. 20. INCLUDE X REQUIRE  Como se proteger?  LFI (Local File Inclusion) – configuração do php.ini  allow_url_fopen = Off permite abrir ou processar uma página ou arquivo externo dentro do script php.
  21. 21. PHP.INI
  22. 22. PHP.INI expose_php = off Permite reduzir a quantidade de informações disponíveis para o invasor.
  23. 23. PHP.INI – OCULTANDO ERROS error_reporting = E_ALL display_errors = Off Para que não seja exibido qualquer erro, aviso ou notice no site ou aplicativo.
  24. 24. PHP.INI – OCULTANDO ERROSEx: Ocorreu um erro no banco de dados Error Number: 1054 Unknown column ordem in order clause SELECT `compra_contrata`.* FROM `compra_contrata` WHERE `status` = 1 AND `data_final` >= 2012-01-30 ORDER BY `ordem`
  25. 25. INICIALIZAÇÃO DE VARIÁVEIS
  26. 26. INICIALIZAÇÃO DE VARIÁVEIS Como atacar? <?php if (authenticated_user()) { $authorized = true; } ?> auth.php?authorized=1
  27. 27. INICIALIZAÇÃO DE VARIÁVEIS Como se proteger ? <?php $authorized = false; if (authenticated_user()) { $authorized = true; } ?>
  28. 28. SQL INJECTION
  29. 29. SQL INJECTION Como atacar? "SELECT * FROM usuarios WHERE usuario= „{$usuario}‟ AND senha = „{ $senha }‟"
  30. 30. SQL INJECTION Como atacar? ‘or 1=‘1 SELECT * FROM usuarios WHERE usuario = „ „ AND senha = „ ‟ OR 1=„1‟
  31. 31. SQL INJECTION Como se proteger? addslashes()/stripslashes(): insere o caracter de escape antes de aspas simples ou duplas, antes da barra invertida e antes do caracter NULL. mysql_real_escape_string(): Escapa os caracteres especiais numa string para usar em um comando SQL

×