Date post: | 02-Jan-2016 |
Category: |
Documents |
Upload: | nita-mcclain |
View: | 19 times |
Download: | 0 times |
Web – servicesWeb – services
Andrea ManconiAndrea ManconiIASC groupIASC group
DIEE – DIEE – DDepartement of epartement of EEletrical and letrical and EEletronic letronic EEngineeringngineering
[email protected]@diee.unica.it
Andrea ManconiAndrea Manconi
SommarioSommario
Web servicesWeb services Web application (CGI, FastCGI, ASP, Web application (CGI, FastCGI, ASP,
JSP,PHP)JSP,PHP) Servlet vs CGI, FastCGI, ASP, JSP,PHPServlet vs CGI, FastCGI, ASP, JSP,PHP Servlet – persistenzaServlet – persistenza Servlet – cachingServlet – caching Servlet – contenuto HTMLServlet – contenuto HTML Servlet – sessioniServlet – sessioni Servlet – sicurezzaServlet – sicurezza Distribuzione di caricoDistribuzione di carico
Web serviceWeb service
Andrea ManconiAndrea Manconi
Web serviceWeb service
Per web service si intende un servizio Per web service si intende un servizio offerto attraverso il web.offerto attraverso il web.
Esempio: richiesta informazioni Esempio: richiesta informazioni prodotto catalogo. Si invia una prodotto catalogo. Si invia una richiestarichiesta ad un dato URL e il servizio ad un dato URL e il servizio risponderisponde fornendo le informazioni fornendo le informazioni richieste.richieste.
Andrea ManconiAndrea Manconi
Web serviceWeb service
Web page: statica. Non esiste Web page: statica. Non esiste iterazioneiterazione
Web application: dinamica. Iterazione Web application: dinamica. Iterazione con l’utentecon l’utente
Web applicationWeb application
Andrea ManconiAndrea Manconi
Web applicationWeb application
CGICGI FastCGIFastCGI ASPASP JSPJSP PHPPHP Java ServletJava Servlet
Andrea ManconiAndrea Manconi
Web application - CGIWeb application - CGI
Common Gateway InterfaceCommon Gateway Interface Una delle prime tecnologie utilizzateUna delle prime tecnologie utilizzate Nata per definire un metodo standard Nata per definire un metodo standard
per la comunicazione tra un server di per la comunicazione tra un server di informazioni e applicazioni esterneinformazioni e applicazioni esterne
Ciclo di vita: pessimo, un nuovo Ciclo di vita: pessimo, un nuovo processo per ogni richiesta (tempo e processo per ogni richiesta (tempo e risorse del server)risorse del server)
Andrea ManconiAndrea Manconi
Web application - CGIWeb application - CGI
VantaggiVantaggi Semplice da scrivereSemplice da scrivere PortabilitàPortabilità Supporta molti linguaggi: es. C, PerlSupporta molti linguaggi: es. C, Perl
Andrea ManconiAndrea Manconi
Web application - CGIWeb application - CGI
SvantaggiSvantaggi Prestazioni limitatePrestazioni limitate Impossibilità di interazione con il server Impossibilità di interazione con il server
web a causa dei processi separati (es. web a causa dei processi separati (es. non è possibile scrivere sul file log del non è possibile scrivere sul file log del server)server)
Andrea ManconiAndrea Manconi
Web application - CGIWeb application - CGIHelloWorld.cgi (Perl)HelloWorld.cgi (Perl)
#!/usr/bin/perl #!/usr/bin/perl $t = "Hello World!"; $t = "Hello World!"; print <<EOT; print <<EOT; Content-type: text/html Content-type: text/html <Title> $t </Title> <Title> $t </Title> <H1> $t </H1><H1> $t </H1> EOTEOT
Andrea ManconiAndrea Manconi
Web application - Web application - FastCGIFastCGI
FastCGIFastCGI Sviluppata da Open MarketSviluppata da Open Market Elimina la necessità di creare un Elimina la necessità di creare un
nuovo processo per ogni richiesta nuovo processo per ogni richiesta pervenutapervenuta
Tuttavia è necessario attivare almeno Tuttavia è necessario attivare almeno un processo per ogni programma un processo per ogni programma FastCGIFastCGI
Andrea ManconiAndrea Manconi
Web application - Web application - FastCGIFastCGI VantaggiVantaggi
SempliceSemplice Facile migrare da applicazioni CGI ad Facile migrare da applicazioni CGI ad
applicazioni FastCGIapplicazioni FastCGI Alte performance (rispetto a CGI)Alte performance (rispetto a CGI) Molti linguaggi supportatiMolti linguaggi supportati
Andrea ManconiAndrea Manconi
Web application - Web application - FastCGIFastCGI SvantaggiSvantaggi
è necessario attivare almeno un è necessario attivare almeno un processo per ogni programma FastCGI, processo per ogni programma FastCGI, se un programma FastCGI deve gestire se un programma FastCGI deve gestire richieste concorrenti saranno attivati più richieste concorrenti saranno attivati più processiprocessi
continua a mancare l’interazione con il continua a mancare l’interazione con il serverserver
Andrea ManconiAndrea Manconi
Web application - ASPWeb application - ASP
Active Server PagesActive Server Pages Sviluppato da MicrosoftSviluppato da Microsoft Pagina HTML con codice incorporato Pagina HTML con codice incorporato
(in genere VBScript e JScript)(in genere VBScript e JScript) Problema: in piattaforma non Problema: in piattaforma non
Windows potrebbero sorgere problemi Windows potrebbero sorgere problemi legati all’assenza della libreria COM di legati all’assenza della libreria COM di WindowsWindows
Andrea ManconiAndrea Manconi
Web application - ASPWeb application - ASP
VantaggiVantaggi Facile da usareFacile da usare Ottimizzato per piccoli contenuti Ottimizzato per piccoli contenuti
dinamicidinamici
Andrea ManconiAndrea Manconi
Web application - ASPWeb application - ASP
SvantaggiSvantaggi Portabilità: Portabilità:
1) il supporto ASP è contenuto in Microsoft 1) il supporto ASP è contenuto in Microsoft Internet Information Server 3.0, disponibile Internet Information Server 3.0, disponibile gratuitamente, mentre il supporto per altri gratuitamente, mentre il supporto per altri server web è disponibile come prodotto server web è disponibile come prodotto commercialecommerciale
2) su piattaforme non Windows problemi 2) su piattaforme non Windows problemi legati all’assenza della libreria COMlegati all’assenza della libreria COM
Andrea ManconiAndrea Manconi
Web application - ASPWeb application - ASPHelloWorld.aspHelloWorld.asp<HTML><HTML>
<BODY><BODY><% For i = 3 To 7 %><% For i = 3 To 7 %> <FONT SIZE=" <FONT SIZE="<% = i %><% = i %>">Hello World!">Hello World!
<BR> <BR> <% Next %><% Next %> </BODY> </BODY> </HTML></HTML>
Andrea ManconiAndrea Manconi
Web application - ASPWeb application - ASP
Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!
Andrea ManconiAndrea Manconi
Web application - JSPWeb application - JSP
Java Server PagesJava Server Pages Alternativa ad ASP basata su JavaAlternativa ad ASP basata su Java Sviluppata da SUNSviluppata da SUN Forte legame con le servletForte legame con le servlet
Andrea ManconiAndrea Manconi
Web application - JSPWeb application - JSP
VantaggiVantaggi Standard: implementato da moltissimi Standard: implementato da moltissimi
produttori su tutte le piattaformeproduttori su tutte le piattaforme Semplice passare da ASP a JSP per chi Semplice passare da ASP a JSP per chi
conosce JAVAconosce JAVA
Andrea ManconiAndrea Manconi
Web application - JSPWeb application - JSP
SvantaggiSvantaggi Un solo linguaggio di script: JAVAUn solo linguaggio di script: JAVA Ottimizzato per piccoli contenuti Ottimizzato per piccoli contenuti
dinamicidinamici
Andrea ManconiAndrea Manconi
Web application - JSPWeb application - JSP
HelloWorld.jspHelloWorld.jsp
<HTML><HTML>
<BODY> <BODY>
Hello World! The time is now Hello World! The time is now <%=new <%=new java.util.Date() %>java.util.Date() %>
</BODY> </BODY>
</HTML> </HTML>
Andrea ManconiAndrea Manconi
Web application - PHPWeb application - PHP
È un linguaggio di scripting open-È un linguaggio di scripting open-source per la creazione di contenuti source per la creazione di contenuti dinamicidinamici
Il codice PHP viene scritto come Il codice PHP viene scritto come codice embedded all’interno delle codice embedded all’interno delle pagine HTMLpagine HTML
Andrea ManconiAndrea Manconi
Web application - PHPWeb application - PHPHelloWorld.phpHelloWorld.php
/* void echo ( string arg1 [, string argn...]) *//* void echo ( string arg1 [, string argn...]) */
__________________________________________________________________________________<html> <html>
<head> <head> <title>Test PHP</title> <title>Test PHP</title>
</head> </head> <body><body>
<?php echo "Hello World!<p>"; ?> <?php echo "Hello World!<p>"; ?> </body> </body> </html> </html>
Andrea ManconiAndrea Manconi
Web application - PHPWeb application - PHP
Interfaccia verso i più comuni Interfaccia verso i più comuni database (oracle, MySQL …)database (oracle, MySQL …)
Sintassi simile a quella del C e di PerlSintassi simile a quella del C e di Perl Cross-platform compatibility: Cross-platform compatibility:
significa che gli script PHP sono significa che gli script PHP sono supportati da tutti gli Internet serverssupportati da tutti gli Internet servers
Andrea ManconiAndrea Manconi
Web application - PHPWeb application - PHP
Vantaggi:Vantaggi: Open – source !!!Open – source !!! Non è proprietario, e quindi non è Non è proprietario, e quindi non è
ristretto a determinate piattaformeristretto a determinate piattaforme Facile da utilizzareFacile da utilizzare
Andrea ManconiAndrea Manconi
Web application - PHPWeb application - PHP
SvantaggiSvantaggi Forte consumo di memoria da parte Forte consumo di memoria da parte
dell’interprete (variabili non dell’interprete (variabili non necessariamente dichiarate)necessariamente dichiarate)
Andrea ManconiAndrea Manconi
Web application - ServletWeb application - Servlet
ServletServlet E’ pensabile come ad una estensione E’ pensabile come ad una estensione
che è possibile collegare ad un server che è possibile collegare ad un server al fine di migliorarne ed estenderne le al fine di migliorarne ed estenderne le funzionalità. funzionalità.
L’esecuzione avviene all’interno di una L’esecuzione avviene all’interno di una JVM e pertanto è sicura e portabileJVM e pertanto è sicura e portabile
Andrea ManconiAndrea Manconi
Web application - ServletWeb application - Servlet
Tutte le servlet vengono gestite da Tutte le servlet vengono gestite da thread separati all’interno dello thread separati all’interno dello stesso processostesso processo
Portabilità: sia rispetto ai sistemi Portabilità: sia rispetto ai sistemi operativi, sia verso i server weboperativi, sia verso i server web
Andrea ManconiAndrea Manconi
Web application - ServletWeb application - Servlet
Le servlet operano all’interno del Le servlet operano all’interno del dominio del server, pertanto a dominio del server, pertanto a differenza delle applet non differenza delle applet non richiedono che il browser supporti richiedono che il browser supporti JAVAJAVA
Andrea ManconiAndrea Manconi
Servlet vs CGIServlet vs CGI
Servlet sono una soluzione Sun alle Servlet sono una soluzione Sun alle CGICGI
Entrambi generano contenuti dinamiciEntrambi generano contenuti dinamici Le Servlet sono sicureLe Servlet sono sicure Le Servlet sono indipendenti dalla Le Servlet sono indipendenti dalla
piattaformapiattaforma Le Servlet hanno un migliore supporto Le Servlet hanno un migliore supporto
per i componenti riusabiliper i componenti riusabili
Andrea ManconiAndrea Manconi
Servlet vs CGIServlet vs CGI
Servlet: vantaggiServlet: vantaggi associate a thread del web server, non a associate a thread del web server, non a
processi separatiprocessi separati Servlet: svantaggiServlet: svantaggi
Possono essere scritte esclusivamente Possono essere scritte esclusivamente in Javain Java
Andrea ManconiAndrea Manconi
Servlet vs CGIServlet vs CGI
L’esecuzione di una CGI è indipendente L’esecuzione di una CGI è indipendente dalle altre. La comunicazione tra diverse dalle altre. La comunicazione tra diverse istanze è complessaistanze è complessa
Una servlet è sempre in esecuzione e la Una servlet è sempre in esecuzione e la comunicazione tra i vari thread è comunicazione tra i vari thread è semplificatasemplificata
Un processo per ogni richiesta. Ad n Un processo per ogni richiesta. Ad n richieste n copie dell’applicazione in richieste n copie dell’applicazione in memoriamemoria
Andrea ManconiAndrea Manconi
Servlet vs CGIServlet vs CGI
ServletServlet CGI CGI ScriptsScripts
CreazioneCreazione MediaMedia MediaMedia
Efficienza di Efficienza di esecuzioneesecuzione
AltaAlta BassaBassa
Indipendenza Indipendenza dalla piattaformadalla piattaforma
Molto altaMolto alta MediaMedia
Andrea ManconiAndrea Manconi
Servlet vs FastCGIServlet vs FastCGI
Servlet: gestione semplificata delle Servlet: gestione semplificata delle sessionisessioni
FastCGI: possibilità di scelta tra più FastCGI: possibilità di scelta tra più linguaggilinguaggi
Servlet: PORTABILITA’Servlet: PORTABILITA’
Andrea ManconiAndrea Manconi
Servlet vs ASPServlet vs ASP
Le Servlet sono portabili verso Le Servlet sono portabili verso altri sistemi operativi altri sistemi operativi web serverweb server
Le Servlet sono più potenti per Le Servlet sono più potenti per applicazioni complesseapplicazioni complesse
Migliore supporto per componenti Migliore supporto per componenti riusabili riusabili
Andrea ManconiAndrea Manconi
Servlet vs JSPServlet vs JSP
Esiste una forte relazione tra le servlet Esiste una forte relazione tra le servlet e JSPe JSP
Servlet: codice JAVA che legge e Servlet: codice JAVA che legge e scrive HTMLscrive HTML
JSP: HTML con codice JAVA JSP: HTML con codice JAVA embeddedembedded
Andrea ManconiAndrea Manconi
Servlet vs PHPServlet vs PHP
Java è ottimo per progetti complessiJava è ottimo per progetti complessi Librerie Librerie PHP utilizza i cookie ma non ha una PHP utilizza i cookie ma non ha una
gestione delle sessionigestione delle sessioni
Andrea ManconiAndrea Manconi
Web serverWeb server WebSphere (IBM)WebSphere (IBM)
http://www-3.ibm.com/software/info1/websphere/index.jsphttp://www-3.ibm.com/software/info1/websphere/index.jsp
WebLogic (BEA)WebLogic (BEA) http://www.bea.comhttp://www.bea.com
9i Application Server (Oracle)9i Application Server (Oracle) http://www.oracle.com/ip/deploy/ias/http://www.oracle.com/ip/deploy/ias/
Jrun (Allaire) Jrun (Allaire) www.allaire.com/products/jrunwww.allaire.com/products/jrun
Sun Java Web ServerSun Java Web Server www.sun.com/software/jwebserver/trywww.sun.com/software/jwebserver/try
Tomcat (Apache)Tomcat (Apache) http://jakarta.apache.orghttp://jakarta.apache.org
ServletServlet
Andrea ManconiAndrea Manconi
J2EEJ2EE
J2EE raccoglie diverse API lato serverJ2EE raccoglie diverse API lato server Servlet APIServlet API JSPJSP EJBEJB JavaMailJavaMail JMS (Java Messaging Service)JMS (Java Messaging Service) JTA (Java Transactions)JTA (Java Transactions) CorbaCorba JDBCJDBC JAXP (Java API for XML Parsing)JAXP (Java API for XML Parsing) JNDI (Java Naming and Directory Interface)JNDI (Java Naming and Directory Interface)
PersistenzaPersistenza
Andrea ManconiAndrea Manconi
PersistenzaPersistenza
Nel momento in cui il codice di una Nel momento in cui il codice di una servlet viene caricato, il server crea servlet viene caricato, il server crea una singola istanza, per gestire tutte una singola istanza, per gestire tutte le richieste.le richieste.
Andrea ManconiAndrea Manconi
PersistenzaPersistenza
Vantaggi:Vantaggi: Ridotto consumo di memoriaRidotto consumo di memoria Riduzione del carico di lavoro, altrimenti Riduzione del carico di lavoro, altrimenti
necessario per creare un nuovo oggetto necessario per creare un nuovo oggetto ad ogni richiestaad ogni richiesta
Permette la persistenzaPermette la persistenza
Andrea ManconiAndrea Manconi
PersistenzaPersistenza
Cosa si intende per persistenza ?Cosa si intende per persistenza ?
Le web application fanno in genere Le web application fanno in genere riferimento ad un db. Si immagini cosa riferimento ad un db. Si immagini cosa significa stabilire una connessione al db significa stabilire una connessione al db per ogni richiesta che viene effettuata. È per ogni richiesta che viene effettuata. È evidente il vantaggio della persistenza evidente il vantaggio della persistenza della connessione con una singolo della connessione con una singolo istanza della servlet che gestisce la istanza della servlet che gestisce la connessione.connessione.
Andrea ManconiAndrea Manconi
PersistenzaPersistenza
import java.io.*;import java.io.*;import javax.servlet.*;import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.http.*;
public class SimpleCounter extends HttpServlet {public class SimpleCounter extends HttpServlet {
int count = 0; int count = 0;
public void doGet(HttpServletRequest req, HttpServletResponse public void doGet(HttpServletRequest req, HttpServletResponse res)res)
throws ServletException, IOException {throws ServletException, IOException { res.setContentType("text/plain");res.setContentType("text/plain"); PrintWriter out = res.getWriter();PrintWriter out = res.getWriter(); count++;count++; out.println(“Numero di accessi: " + count);out.println(“Numero di accessi: " + count); }}}}
Andrea ManconiAndrea Manconi
PersistenzaPersistenza
Problema:Problema:
se si utilizzano variabili locali non se si utilizzano variabili locali non esistono problemi di interazione tra i esistono problemi di interazione tra i thread, ma se si utilizzano variabili thread, ma se si utilizzano variabili non locali …non locali …
Andrea ManconiAndrea Manconi
PersistenzaPersistenza
Si consideri contatore mostrato in Si consideri contatore mostrato in precedenza, cosa accade se due precedenza, cosa accade se due utenti accedono alla servlet quasi utenti accedono alla servlet quasi contemporaneamente ?contemporaneamente ?
Entrambi i thread saranno colpevoli Entrambi i thread saranno colpevoli di incrementare lo stesso valore del di incrementare lo stesso valore del contatore, mostrando a video lo contatore, mostrando a video lo stesso risultato.stesso risultato.
Andrea ManconiAndrea Manconi
PersistenzaPersistenza
Il problema è dovuto alla necessità di Il problema è dovuto alla necessità di sincronizzare l’utilizzo della variabile sincronizzare l’utilizzo della variabile count, in modo che un thread alla count, in modo che un thread alla volta possa operare su essa.volta possa operare su essa.
In java questo viene fatto utilizzando In java questo viene fatto utilizzando la parola chiave la parola chiave synchronizedsynchronized
Andrea ManconiAndrea Manconi
PersistenzaPersistenza
Possibili soluzioni:Possibili soluzioni:
public syncronized void public syncronized void doGet(HttpServletRequest req, doGet(HttpServletRequest req, HttpServletResponse res) …HttpServletResponse res) …
Andrea ManconiAndrea Manconi
PersistenzaPersistenza
Un’altra soluzione …Un’altra soluzione …
PrintWriter out = res.getWriter();PrintWriter out = res.getWriter();
syncronized(this) syncronized(this) {{
count++;count++;
out.println(“Numero di accessi” + out.println(“Numero di accessi” + count);count);
} }
Andrea ManconiAndrea Manconi
PersistenzaPersistenza
Problematiche legate:Problematiche legate: L’utilizzo della sincronizzazione L’utilizzo della sincronizzazione
(monitor) implica un carico elevato(monitor) implica un carico elevato Nel periodo in cui un thread esegue un Nel periodo in cui un thread esegue un
blocco syncronized gli altri thread blocco syncronized gli altri thread possono essere bloccati in attesa del possono essere bloccati in attesa del rilascio delle risorse !!!rilascio delle risorse !!!
Andrea ManconiAndrea Manconi
PersistenzaPersistenza
Altre problematiche: Altre problematiche:
cosa accade se il server “cade”, cosa accade se il server “cade”, oppure se per qualche motivo è oppure se per qualche motivo è necessario ricaricare la servlet ?necessario ricaricare la servlet ?
Andrea ManconiAndrea Manconi
PersistenzaPersistenza
… … il contatore inizia a contare da zeroil contatore inizia a contare da zero
Andrea ManconiAndrea Manconi
PersistenzaPersistenza
Metodi init() e destroy()Metodi init() e destroy()
il metodo init() definisce le operazioni il metodo init() definisce le operazioni di inizializzazione della servlet, quelle di inizializzazione della servlet, quelle che devono essere effettuate al che devono essere effettuate al momento del suo caricamento, momento del suo caricamento, mentre il metodo destroy() mentre il metodo destroy() implementa le operazioni per la implementa le operazioni per la distruzione della servlet.distruzione della servlet.
Andrea ManconiAndrea Manconi
PersistenzaPersistenza
Con l’utilizzo di questi due metodi, il Con l’utilizzo di questi due metodi, il problema del contatore può essere risolto problema del contatore può essere risolto facilmente interfacciandoci con un db o facilmente interfacciandoci con un db o con l’utilizzo di un file. con l’utilizzo di un file.
init(): inizializzazione del contatore a zero init(): inizializzazione del contatore a zero al primo accesso in assoluto o lettura del al primo accesso in assoluto o lettura del suo valore da file o dbsuo valore da file o db
destroy(): memorizzazione del nuovo destroy(): memorizzazione del nuovo valore del contatorevalore del contatore
Andrea ManconiAndrea Manconi
PersistenzaPersistenza
Singolo threadSingolo thread Esiste la possibilità di caricare per una Esiste la possibilità di caricare per una
servlet un pool di istanze. Non tutti i servlet un pool di istanze. Non tutti i server permettono di fare questo.server permettono di fare questo.
È necessario che la servlet implementi È necessario che la servlet implementi l’interfaccia l’interfaccia javax.servlet.SingleThreadModel (è javax.servlet.SingleThreadModel (è un’interfaccia vuota !!!)un’interfaccia vuota !!!)
CachingCaching
Andrea ManconiAndrea Manconi
CachingCaching
Molti browser per ridurre il tempo di Molti browser per ridurre il tempo di acceso ad una pagina web accedono acceso ad una pagina web accedono alla loro copia in cache.alla loro copia in cache.
Dal punto di vista delle web-Dal punto di vista delle web-application questo “vantaggio” può application questo “vantaggio” può essere un grosso problema !!! Infatti essere un grosso problema !!! Infatti si scontra con l’histrory del client.si scontra con l’histrory del client.
Andrea ManconiAndrea Manconi
CachingCaching
Si pensi ad un sistema di e-commerce in cui Si pensi ad un sistema di e-commerce in cui esistono due pagine, una pagina che mostra esistono due pagine, una pagina che mostra il carrello e una pagina dei prodotti in il carrello e una pagina dei prodotti in catalogo. Se ogni volta che l’utente carica catalogo. Se ogni volta che l’utente carica un nuovo prodotto nel carrello il browser un nuovo prodotto nel carrello il browser ricarica la sua copia nella cache della ricarica la sua copia nella cache della pagina che mostra il carrello, invece di pagina che mostra il carrello, invece di inoltrare la richiesta al web server, l’utente inoltrare la richiesta al web server, l’utente non avrà visione di quello che decide di non avrà visione di quello che decide di acquistareacquistare
Andrea ManconiAndrea Manconi
CachingCaching
La maggior parte dei server web, La maggior parte dei server web, restituisce, ad ogni richiesta, un restituisce, ad ogni richiesta, un intestazione intestazione LastModifiedLastModified : :
Sun, 07-Jul-1974 01:10:00 GMTSun, 07-Jul-1974 01:10:00 GMT
Lato browser web, viene inclusa nella Lato browser web, viene inclusa nella propria richiesta un’intestazione propria richiesta un’intestazione identica identica IfModifiedSinceIfModifiedSince..
Andrea ManconiAndrea Manconi
CachingCaching
Dallo scambio di queste informazioni Dallo scambio di queste informazioni il server decide se re-inviare una il server decide se re-inviare una pagina più recente oppure no. In pagina più recente oppure no. In quest’ultimo caso: codice di stato quest’ultimo caso: codice di stato 304 Not Modified304 Not Modified
Andrea ManconiAndrea Manconi
CachingCaching
Nel caso di contenuto dinamico (servlet) Nel caso di contenuto dinamico (servlet) è cosa buona e giusta che il server è cosa buona e giusta che il server assuma che il contenuto cambi in assuma che il contenuto cambi in continuazione. continuazione.
Questo implica lo svantaggio di dovere Questo implica lo svantaggio di dovere effettivamente ricaricare le pagine effettivamente ricaricare le pagine dinamiche lato client, e carico di lavoro dinamiche lato client, e carico di lavoro lato server, ma previene da eventuali lato server, ma previene da eventuali malfunzionamenti !!!malfunzionamenti !!!
Andrea ManconiAndrea Manconi
CachingCaching
Per impostare il ricaricamento delle pagine, Per impostare il ricaricamento delle pagine, la servlet può implementare il metodola servlet può implementare il metodo
protected long protected long getLastModified(HttpServletRequest)getLastModified(HttpServletRequest)
Il server interroga questo metodo per Il server interroga questo metodo per scoprire quando è stata l’ultima volta che la scoprire quando è stata l’ultima volta che la servlet ha modificato il suo outputservlet ha modificato il suo output..
Contenuto HTMLContenuto HTML
Andrea ManconiAndrea Manconi
Contenuto HTMLContenuto HTML
Principalmente una servlet scrive Principalmente una servlet scrive codice HTML dinamico. Una servlet codice HTML dinamico. Una servlet contiene “HTML embedded” !!!contiene “HTML embedded” !!!
Andrea ManconiAndrea Manconi
Contenuto HTMLContenuto HTML
private void privateArea ( HttpServletRequest request, HttpServletResponse response) private void privateArea ( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{throws ServletException, IOException{
String sqlCommand;String sqlCommand; PrintWriter out = response.getWriter();PrintWriter out = response.getWriter(); try{try{ sqlCommand = "SELECT * FROM shop ORDER BY shopid";sqlCommand = "SELECT * FROM shop ORDER BY shopid"; acs.rs = acs.stmt.executeQuery(sqlCommand);acs.rs = acs.stmt.executeQuery(sqlCommand); out.printlnout.println("<HTML"+("<HTML"+ "<HEAD><TITLE>Comune di Sestu - E-commerce - Sestu "<HEAD><TITLE>Comune di Sestu - E-commerce - Sestu
2010</TITLE></HEAD>\n"+2010</TITLE></HEAD>\n"+ "<BODY bgcolor='#FFFFFF' text='#666666' link='#3366FF' "<BODY bgcolor='#FFFFFF' text='#666666' link='#3366FF'
vlink='#CCCCCC'ALINK='#666666'>\n"+vlink='#CCCCCC'ALINK='#666666'>\n"+ "<FONT FACE='VERDANA' size=+1>\n"+"<FONT FACE='VERDANA' size=+1>\n"+ "<TABLE ALIGN='CENTER' BORDER='0'>\n"+"<TABLE ALIGN='CENTER' BORDER='0'>\n"+ "<TR>\n"+"<TR>\n"+ "<TD ALIGN='CENTER' COLSPAN='2'>\n"+"<TD ALIGN='CENTER' COLSPAN='2'>\n"+ "<FONT SIZE=+2> Area Privata. Solo autorizzati\n"+"<FONT SIZE=+2> Area Privata. Solo autorizzati\n"+ "</TD>\n"+"</TD>\n"+ "</TR>\n"+"</TR>\n"+
Andrea ManconiAndrea Manconi
Acquisire contenuto dai Acquisire contenuto dai formform
In una web application spesso risulta In una web application spesso risulta necessario acquisire informazioni necessario acquisire informazioni dall’utente. Si pensi al classico dall’utente. Si pensi al classico servizio di registrazione utente.servizio di registrazione utente.
Andrea ManconiAndrea Manconi
Acquisire contenuto dai Acquisire contenuto dai formform"<FORM METHOD=POST ACTION="+response.encodeURL("/IndexServlet/CustomerServlet?"<FORM METHOD=POST ACTION="+response.encodeURL("/IndexServlet/CustomerServlet?
registercustomer=")+">\n"+registercustomer=")+">\n"+ "<TABLE BORDER='0' cellspacing='0' cellpadding='1' BGCOLOR='#4A7B99' "<TABLE BORDER='0' cellspacing='0' cellpadding='1' BGCOLOR='#4A7B99'
ALIGN='CENTER'>\n"+ALIGN='CENTER'>\n"+ "<TR>\n"+"<TR>\n"+ "<TD ALIGN='CENTER' COLSPAN='2' BGCOLOR='#CCCCCC'><FONT SIZE='4' "<TD ALIGN='CENTER' COLSPAN='2' BGCOLOR='#CCCCCC'><FONT SIZE='4'
COLOR='#4A7B99'>Compila il modulo di registrazione</FONT></TD>\n"+COLOR='#4A7B99'>Compila il modulo di registrazione</FONT></TD>\n"+ "</TR>\n"+"</TR>\n"+ "<TR>\n"+"<TR>\n"+ "<TD ALIGN='RIGHT'><FONT COLOR='#E78A27'>User name:</FONT></TD><TD> <INPUT "<TD ALIGN='RIGHT'><FONT COLOR='#E78A27'>User name:</FONT></TD><TD> <INPUT
TYPE="+"text"TYPE="+"text"+ + "name="+"userid"+""name="+"userid"+" MAXLENGTH="+"10"+"></TD>\n"+ MAXLENGTH="+"10"+"></TD>\n"+ "</TR>\n"+"</TR>\n"+ "<TR>\n"+"<TR>\n"+ "<TD ALIGN='RIGHT'><FONT COLOR='#E78A27'>Password:</FONT></TD><TD> <INPUT "<TD ALIGN='RIGHT'><FONT COLOR='#E78A27'>Password:</FONT></TD><TD> <INPUT
TYPE="+"password"TYPE="+"password"+ + "name="+"newpswid""name="+"newpswid"+"></TD>\n"++"></TD>\n"+ "</TR>\n"+"</TR>\n"+ "<TR>\n"+ "<TD ALIGN='RIGHT'><FONT COLOR='#E78A27'>Ridigitare la "<TR>\n"+ "<TD ALIGN='RIGHT'><FONT COLOR='#E78A27'>Ridigitare la
password:</FONT></TD><TD> <INPUT TYPE="+"password"+ " name="+"newpswid2"+"></TD>\password:</FONT></TD><TD> <INPUT TYPE="+"password"+ " name="+"newpswid2"+"></TD>\n"+n"+
"</TR>\n"+"</TR>\n"+ "<TR>\n"+ "<TR>\n"+ "<TD ALIGN='RIGHT'><FONT COLOR='#E78A27'>Nome:</FONT></TD><TD> <INPUT "<TD ALIGN='RIGHT'><FONT COLOR='#E78A27'>Nome:</FONT></TD><TD> <INPUT
TYPE="+"text"+ TYPE="+"text"+ " name="+"firstname"" name="+"firstname"+"></TD>\n"++"></TD>\n"+ "</TR>\n"+"</TR>\n"+ "<TR>\n"+"<TR>\n"+
Andrea ManconiAndrea Manconi
Acquisire contenuto dai Acquisire contenuto dai formformpublic public StringString getParametergetParameter((StringString name) name)
il metodo permette di acquisire i valori il metodo permette di acquisire i valori associati al campo del form individuato dal associati al campo del form individuato dal parametro “name”.parametro “name”.
Il metodo è definito dall’interfaccia Il metodo è definito dall’interfaccia javax.servlet.javax.servlet.ServletRequestServletRequest ed è ed è ereditato da ereditato da javax.servlet.javax.servlet.HttpServletRequestHttpServletRequest
Andrea ManconiAndrea Manconi
Acquisire contenuto dai Acquisire contenuto dai formformsqlCommand = "INSERT INTO custinfo VALUES “+ sqlCommand = "INSERT INTO custinfo VALUES “+
"('"+request.getParameter(""('"+request.getParameter("useriduserid")+")+"',"',MD5MD5('"+request.getParameter("('"+request.getParameter("newpswidnewpswid")")+"'),+"'),'“+request.getParameter("'“+request.getParameter("firstnamefirstname")+"'"+")+"'"+
Session trackingSession tracking
Andrea ManconiAndrea Manconi
Session trackingSession tracking
HTTP: è stateless, cioè non permette HTTP: è stateless, cioè non permette la memorizzazione di una sequenza la memorizzazione di una sequenza di richieste, o meglio non permette di di richieste, o meglio non permette di associare questa sequenza ad un associare questa sequenza ad un dato utente.dato utente.
Andrea ManconiAndrea Manconi
Session trackingSession tracking
Esempio: si pensi all’applicazione e-Esempio: si pensi all’applicazione e-commerce. E’ necessario memorizzare commerce. E’ necessario memorizzare lo stato per “ricordare” l’history lo stato per “ricordare” l’history dell’utente !!!!dell’utente !!!!
Andrea ManconiAndrea Manconi
Session trackingSession tracking
Autenticazione utente: Autenticazione utente:
processo che porta a riconoscere un client tramite user processo che porta a riconoscere un client tramite user name e una password, con l’aiuto del metodoname e una password, con l’aiuto del metodo
String getRemoteUser() String getRemoteUser()
metodo definito nella classe HttpServletRequest metodo definito nella classe HttpServletRequest
E’ possibile dare l’accesso ad alcune risorse solo a utenti E’ possibile dare l’accesso ad alcune risorse solo a utenti identificati da user name e password noti.identificati da user name e password noti.
Andrea ManconiAndrea Manconi
Session trackingSession tracking
VantaggiVantaggi Facile da realizzareFacile da realizzare Indipendente dalla macchina dalla quale si Indipendente dalla macchina dalla quale si
connetteconnette
SvantaggiSvantaggi Registrazione obbligatoriaRegistrazione obbligatoria Login obbligatorioLogin obbligatorio Logout solo disconnettendosi dal browserLogout solo disconnettendosi dal browser
Andrea ManconiAndrea Manconi
Session trackingSession tracking
Cookie: Cookie:
è un’informazione inviata al browser è un’informazione inviata al browser da un server web. Quando riceve un da un server web. Quando riceve un cookie lo salva e poi lo rinvia al cookie lo salva e poi lo rinvia al server ogni volta che accede a una server ogni volta che accede a una pagina su di esso.pagina su di esso.
Andrea ManconiAndrea Manconi
Session trackingSession tracking
Un cookie ha un nome, un valore, e Un cookie ha un nome, un valore, e alcuni attributi facoltativi come una alcuni attributi facoltativi come una descrizione, una data di scadenza, un descrizione, una data di scadenza, un numero di versione e così via.numero di versione e così via.
Andrea ManconiAndrea Manconi
Session trackingSession tracking
I cookie vengono ritrasmessi verso il I cookie vengono ritrasmessi verso il server HTTP ogni volta che:server HTTP ogni volta che:
il cookie non è scadutoil cookie non è scaduto il dominio che interroghiamo è il il dominio che interroghiamo è il
dominio di persistenza del cookiedominio di persistenza del cookie
Andrea ManconiAndrea Manconi
Session trackingSession tracking
Limitazioni: i browser accettanoLimitazioni: i browser accettano 20 cookie per sito20 cookie per sito 300 cookie per utente300 cookie per utente 4096 byte per cookie4096 byte per cookie
Andrea ManconiAndrea Manconi
Session trackingSession tracking
Le servlet API definiscono la classe Le servlet API definiscono la classe javax.servlet.http.Cookiejavax.servlet.http.Cookie per la per la gestione dei cookiegestione dei cookie
Una servlet recupera Una servlet recupera tuttitutti i cookie che i cookie che ha inviato attraverso il metodoha inviato attraverso il metodo
public Cookie[] public Cookie[] HttpServletRequest.getCookies()HttpServletRequest.getCookies()
Andrea ManconiAndrea Manconi
Session trackingSession tracking
Per default i cookie sono restituiti Per default i cookie sono restituiti solo all’host che li ha salvatisolo all’host che li ha salvati
È possibile impostare la scadenza per È possibile impostare la scadenza per un cookie utilizzando il metodoun cookie utilizzando il metodo
public void Cookie.setMaxAge(int public void Cookie.setMaxAge(int expiry)expiry)
Andrea ManconiAndrea Manconi
Session trackingSession tracking
VantaggiVantaggi Anonimo e trasparenteAnonimo e trasparente
SvantaggiSvantaggi Fortemente legato alla macchina, i Fortemente legato alla macchina, i
cookie sono memorizzati su disco !!!cookie sono memorizzati su disco !!! Il browser può non supportare i cookieIl browser può non supportare i cookie
Andrea ManconiAndrea Manconi
Session trackingSession tracking
Servlet Session TrackingServlet Session Tracking Quando un utente accede ad una web Quando un utente accede ad una web
application gli viene assegnato un ID unico application gli viene assegnato un ID unico di sessionedi sessione
L’ID di sessione viene salvato sul client in L’ID di sessione viene salvato sul client in un cookie chiamato JSESSIONID. Se il client un cookie chiamato JSESSIONID. Se il client non supporta i cookie, l’ID di sessione viene non supporta i cookie, l’ID di sessione viene inviato come parte di un URL modificato. inviato come parte di un URL modificato.
La session può essere invalidata con la La session può essere invalidata con la chiusura del browser o impostando un chiusura del browser o impostando un timeout per la sessione.timeout per la sessione.
Andrea ManconiAndrea Manconi
Session trackingSession tracking
Un’HttpSession è ottenibile tramite la Un’HttpSession è ottenibile tramite la HttpServletRequestHttpServletRequest
public void doPost(HttpServletRequest public void doPost(HttpServletRequest req,HttpServletResponse res) req,HttpServletResponse res) {{
……..
HttpSession session HttpSession session = = req.getSession(true);req.getSession(true);
}}
Andrea ManconiAndrea Manconi
Session trackingSession tracking
Per la gestione degli oggettiPer la gestione degli oggetti
public voi setAttribute(String name, Object public voi setAttribute(String name, Object value)value)
public Object getAttribute(String name)public Object getAttribute(String name)
public void removeAttribute(String name)public void removeAttribute(String name)
SicurezzaSicurezza
Andrea ManconiAndrea Manconi
SicurezzaSicurezza
Autenticazione: Autenticazione: identificare il clientidentificare il client
Autorizzazione: Autorizzazione: limitare l’accesso alle risorse ad un insieme limitare l’accesso alle risorse ad un insieme selezionato di utentiselezionato di utenti
Riservatezza:Riservatezza:garanzia che soltanto le parti coinvolte possano garanzia che soltanto le parti coinvolte possano comprendere la comunicazionecomprendere la comunicazione
Integrità:Integrità:garantire che il contenuto della comunicazione non è garantire che il contenuto della comunicazione non è mutato durante la trasmissionemutato durante la trasmissione
Andrea ManconiAndrea Manconi
SicurezzaSicurezza
Autenticazione HTTP: detta Autenticazione HTTP: detta autenticazione di base.autenticazione di base.Basato su un semplice modello Basato su un semplice modello challenge/response – challenge/response – username/password.username/password.Il server web mantiene un database di Il server web mantiene un database di username e password e identifica quali username e password e identifica quali risorse devono essere protette tramite il risorse devono essere protette tramite il meccanismo di autenticazione utente. meccanismo di autenticazione utente.
Andrea ManconiAndrea Manconi
Sicurezza – Autenticazione Sicurezza – Autenticazione HTTPHTTP
Codifica Base64 per la trasmissione Codifica Base64 per la trasmissione delle password (facilmente delle password (facilmente reversibile)reversibile)
Password scritte in chiaro sul serverPassword scritte in chiaro sul server
Andrea ManconiAndrea Manconi
Sicurezza – Autenticazione Sicurezza – Autenticazione HTTPHTTP<?xml version="1.0" encoding="ISO-8859-1" ?> <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE web-app<!DOCTYPE web-app (View Source for full doctype...) (View Source for full doctype...)> > <web-app><web-app>
<servlet><servlet> <servlet-name><servlet-name>secretsecret</servlet-name></servlet-name> <servlet-class><servlet-class>SalaryServerSalaryServer</servlet-class></servlet-class> </servlet></servlet>
<security-constraint><security-constraint>
<web-resource-collection><web-resource-collection>
<web-resource-name><web-resource-name>SecretProtectionSecretProtection</web-resource-name</web-resource-name> > <url-pattern><url-pattern>/servlet/SalaryServer/servlet/SalaryServer</url-pattern></url-pattern> <url-pattern><url-pattern>/servlet/secret/servlet/secret</url-pattern></url-pattern> <http-method>GET</http-method> <http-method>GET</http-method> <http-method>POST</http-method> <http-method>POST</http-method>
</web-resource-collection></web-resource-collection>
Andrea ManconiAndrea Manconi
Sicurezza – Autenticazione Sicurezza – Autenticazione HTTPHTTP
<auth-constraint><auth-constraint> <role-name>manager</role-name> <role-name>manager</role-name>
</auth-constraint></auth-constraint> </security-constraint></security-constraint>
<login-config><login-config> <auth-method><auth-method> BASIC <!-- BASIC, DIGEST, FORM, CLIENT-CERT --> BASIC <!-- BASIC, DIGEST, FORM, CLIENT-CERT --> </auth-method></auth-method> <realm-name><realm-name> Default <!-- optional, only useful for BASIC --> Default <!-- optional, only useful for BASIC --> </realm-name></realm-name> </login-config></login-config> <security-role><security-role> <role-name>manager</role-name> <role-name>manager</role-name> </security-role></security-role> </web-app></web-app>
Andrea ManconiAndrea Manconi
Sicurezza – Autenticazione Sicurezza – Autenticazione HTTPHTTP
<security-constraint><security-constraint> protegge un protegge un elemento elemento <web-resource-collection><web-resource-collection> in in modo da consentire l’accesso solo ai ruoli modo da consentire l’accesso solo ai ruoli indicati da indicati da <auth-constraint>.<auth-constraint>.
Se non è specificata alcuna voce Se non è specificata alcuna voce <http-<http-method>method> vengono protetti tutti i metodi vengono protetti tutti i metodi HTTP.HTTP.
La metodologia di autenticazione è La metodologia di autenticazione è specificata da specificata da <auth-method><auth-method>..
Andrea ManconiAndrea Manconi
Sicurezza – Autenticazione Sicurezza – Autenticazione HTTPHTTP Il file utilizzato per l’autenticazione HTTPIl file utilizzato per l’autenticazione HTTP (con tomcat web server (con tomcat web server tomcat-users.xmltomcat-users.xml))
<tomcat-users><tomcat-users> <user name="Dilbert" password="dnrc" <user name="Dilbert" password="dnrc"
roles="engineer" /> roles="engineer" /> <user name="Wally" password="iluvalice“ <user name="Wally" password="iluvalice“
roles="engineer,slacker" /> roles="engineer,slacker" /> <user name="MrPointyHair" password="MrPointyHair" <user name="MrPointyHair" password="MrPointyHair"
roles="manager,slacker" /> roles="manager,slacker" /> </tomcat-users></tomcat-users>
Andrea ManconiAndrea Manconi
Sicurezza – Autenticazione Sicurezza – Autenticazione HTTPHTTP Recupero parametri di autenticazioneRecupero parametri di autenticazione
public String HttpServletRequest.getRemoteUser()public String HttpServletRequest.getRemoteUser()/* restituisce il nome dell’utente che effettua la richiesta /* restituisce il nome dell’utente che effettua la richiesta
*/*/public String HttpServletRequest.getAuthType()public String HttpServletRequest.getAuthType()/* restituisce il tipo di autorizzazione usata *//* restituisce il tipo di autorizzazione usata */public boolean public boolean
HttpServletRequest.isUserInRole(String role)HttpServletRequest.isUserInRole(String role)/* restituisce true solo se l’utente autenticato appartiene /* restituisce true solo se l’utente autenticato appartiene
al ruolo specificato */al ruolo specificato */
Andrea ManconiAndrea Manconi
Sicurezza – Autenticazione Sicurezza – Autenticazione basata su modulobasata su modulo
A differenza della autenticazione A differenza della autenticazione base, permette di entrare nel sito con base, permette di entrare nel sito con una pagina di login documentata.una pagina di login documentata.
Come per l’autenticazione base anche Come per l’autenticazione base anche in questo caso le password sono in in questo caso le password sono in chiaro sul server e facilmente chiaro sul server e facilmente individuabili.individuabili.
Andrea ManconiAndrea Manconi
Sicurezza – Autenticazione Sicurezza – Autenticazione basata su modulobasata su modulo
Vengono impostate due pagine Vengono impostate due pagine HTML, una per il login corretto e una HTML, una per il login corretto e una pagina di errore.pagina di errore.
Le pagine sono indicate nel web.xmlLe pagine sono indicate nel web.xml
Andrea ManconiAndrea Manconi
Sicurezza – Autenticazione Sicurezza – Autenticazione basata su modulobasata su modulo<?xml version="1.0" encoding="ISO-8859-1" ?> <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE web-app<!DOCTYPE web-app (View Source for full doctype...) (View Source for full doctype...)> > <web-app><web-app> <servlet><servlet> <servlet-name><servlet-name>secretsecret</servlet-name> </servlet-name> <servlet-class><servlet-class>SalaryServerSalaryServer</servlet-class> </servlet-class> </servlet></servlet> <security-constraint><security-constraint> <web-resource-collection><web-resource-collection> <web-resource-name><web-resource-name>SecretProtectionSecretProtection</web-resource-name> </web-resource-name> <url-pattern><url-pattern>/servlet/SalaryServer/servlet/SalaryServer</url-pattern> </url-pattern> <url-pattern><url-pattern>/servlet/secret/servlet/secret</url-pattern> </url-pattern> <http-method><http-method>GETGET</http-method> </http-method> <http-method><http-method>POSTPOST</http-method> </http-method> </web-resource-collection></web-resource-collection>
Andrea ManconiAndrea Manconi
Sicurezza – Autenticazione Sicurezza – Autenticazione basata su modulobasata su modulo<auth-constraint><auth-constraint> <role-name><role-name>managermanager</role-name> </role-name> </auth-constraint></auth-constraint> </security-constraint></security-constraint><login-config><login-config> <auth-method><auth-method> FORMFORM <!-- BASIC, DIGEST, FORM, CLIENT-CERT <!-- BASIC, DIGEST, FORM, CLIENT-CERT --> --> </auth-method></auth-method> <form-login-config> <!-- only useful for FORM <form-login-config> <!-- only useful for FORM --> --> <form-login-page>/loginpage.html</form-login-page> <form-login-page>/loginpage.html</form-login-page> <form-error-page>/errorpage.html</form-error-page> <form-error-page>/errorpage.html</form-error-page> </form-login-config></form-login-config> </login-config></login-config> <security-role><security-role> <role-name><role-name>managermanager</role-name> </role-name> </security-role></security-role> </web-app> </web-app>
Andrea ManconiAndrea Manconi
Sicurezza – Autenticazione Sicurezza – Autenticazione personalizzatapersonalizzata
Sfrutta l’autenticazione HTTPSfrutta l’autenticazione HTTP Potenzialità: Potenzialità:
gestione all’accesso di una servlet gestione all’accesso di una servlet (user/password)(user/password)
gestione all’accesso di una risorsa in base gestione all’accesso di una risorsa in base alla nazione di appartenenza (vedi alla nazione di appartenenza (vedi embargo)embargo)
gestione dell’accesso ad una risorsa in gestione dell’accesso ad una risorsa in base all’IPbase all’IP
Andrea ManconiAndrea Manconi
Sicurezza – Autenticazione Sicurezza – Autenticazione personalizzatapersonalizzata L’autenticazione personalizzata fa in L’autenticazione personalizzata fa in
genere riferimento a password genere riferimento a password memorizzate in scuro su file o database.memorizzate in scuro su file o database.
In questo caso si aggiungono altri livelli In questo caso si aggiungono altri livelli di sicurezza, quello del database, di sicurezza, quello del database, protetto da password, e inoltre si protetto da password, e inoltre si possono utilizzare altri algoritmi di possono utilizzare altri algoritmi di codifica per le passoword utente come codifica per le passoword utente come l’MD5l’MD5
Andrea ManconiAndrea Manconi
Sicurezza – Autenticazione Sicurezza – Autenticazione personalizzatapersonalizzata
L’MD5 è un algoritmo di codifica a L’MD5 è un algoritmo di codifica a 128 bit.128 bit.
In java può essere utilizzato con In java può essere utilizzato con l’ausilio del package java.securityl’ausilio del package java.security
Andrea ManconiAndrea Manconi
Sicurezza – Autenticazione Sicurezza – Autenticazione personalizzatapersonalizzata
Molti database, supportano l’MD5 Molti database, supportano l’MD5 come istruzione da linea di come istruzione da linea di commando. Il vantaggio è quello di commando. Il vantaggio è quello di eliminare la necessità di scrivere eliminare la necessità di scrivere codice JAVA aggiuntivo, alleggerendo codice JAVA aggiuntivo, alleggerendo il lavoro. il lavoro.
Andrea ManconiAndrea Manconi
Sicurezza – Autenticazione Sicurezza – Autenticazione personalizzatapersonalizzata Una servlet utilizza i codici di stato HTTP Una servlet utilizza i codici di stato HTTP
per gestire il proprio criterio di per gestire il proprio criterio di protezione. Per fare questo utilizza le protezione. Per fare questo utilizza le credenziali dell’utente codificate credenziali dell’utente codificate nell’intestazione nell’intestazione AuthorizationAuthorization. Nel caso . Nel caso le credenziali vengano rifiutate la servlet le credenziali vengano rifiutate la servlet imposta l’invio del codice di stato imposta l’invio del codice di stato SC_UNAUTHORIZED SC_UNAUTHORIZED e un’intestazione e un’intestazione WWW-AuthenticateWWW-Authenticate che descrive le che descrive le credenziali desiderate.credenziali desiderate.
Andrea ManconiAndrea Manconi
Sicurezza – Autenticazione Sicurezza – Autenticazione personalizzatapersonalizzatapublic void doGet(HttpServletRequest req, HttpServletResponse res)public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {throws ServletException, IOException { res.setContentType("text/plain");res.setContentType("text/plain"); PrintWriter out = res.getWriter();PrintWriter out = res.getWriter();
// Imposta l’header Authorization// Imposta l’header Authorization String auth = req.getHeader("Authorization");String auth = req.getHeader("Authorization");
// richiama un metodo che si interfaccia con un db per valutare l’autenticazione// richiama un metodo che si interfaccia con un db per valutare l’autenticazione if (!allowUser(auth)) {if (!allowUser(auth)) { // Accesso non permesso, notifica// Accesso non permesso, notifica res.setHeader("WWW-Authenticate", "BASIC realm=\"users\"");res.setHeader("WWW-Authenticate", "BASIC realm=\"users\""); res.sendError(res.SC_UNAUTHORIZED);res.sendError(res.SC_UNAUTHORIZED);
}} else {else { // Accesso permesso// Accesso permesso out.println(“link to diee out.println(“link to diee www.diee.unica.itwww.diee.unica.it "); "); }} }}
Andrea ManconiAndrea Manconi
Sicurezza: Certificati Sicurezza: Certificati DigitaliDigitali
I certificati digitali offrono un livello I certificati digitali offrono un livello di sicurezza superioredi sicurezza superiore
Chiave asimmetrica: esistono due Chiave asimmetrica: esistono due chiavichiavi
PrivataPrivata PubblicaPubblica
Andrea ManconiAndrea Manconi
Sicurezza: Certificati Sicurezza: Certificati DigitaliDigitali
Esempio: si consideri il caso in cui Esempio: si consideri il caso in cui due utenti debbano scambiarsi dei due utenti debbano scambiarsi dei messaggi. Identifichiamo i due utenti messaggi. Identifichiamo i due utenti come come AA e e BB
Andrea ManconiAndrea Manconi
Sicurezza: Certificati Sicurezza: Certificati DigitaliDigitali AA codifica il messaggio che deve codifica il messaggio che deve
inviare con la chiave pubblica di inviare con la chiave pubblica di BB BB decodifica il messaggio che ha decodifica il messaggio che ha
inviato inviato AA con la sua chiave privata con la sua chiave privata Questo sistema di chiavi è detto Questo sistema di chiavi è detto
asimmetrico perché ogni chiave può asimmetrico perché ogni chiave può decodificare i messaggi codificati con decodificare i messaggi codificati con l’altra chiavel’altra chiave
Andrea ManconiAndrea Manconi
Sicurezza: Certificati Sicurezza: Certificati DigitaliDigitali
Problema: questo sistema non risolve Problema: questo sistema non risolve il problema dell’autenticazione. il problema dell’autenticazione. L’utente L’utente BB non ha alcuna certezza non ha alcuna certezza che il messaggio che ha ricevuto è che il messaggio che ha ricevuto è stato inviato da stato inviato da AA o da un terzo o da un terzo utente utente CC sotto mentite spoglie !!! sotto mentite spoglie !!!
Andrea ManconiAndrea Manconi
Sicurezza: Certificati Sicurezza: Certificati DigitaliDigitali
Per risolvere il problema si sfrutta Per risolvere il problema si sfrutta l’asimmetria delle chiavi come segue:l’asimmetria delle chiavi come segue:
AA codifica l’informazione con la sua chiave codifica l’informazione con la sua chiave privata, e poi ancora con la chiave privata, e poi ancora con la chiave pubblica di pubblica di BB
BB decodifica l’informazione con la sua decodifica l’informazione con la sua chiave privata e poi con la chiave pubblica chiave privata e poi con la chiave pubblica di di AA, che deve possedere, che deve possedere
Andrea ManconiAndrea Manconi
Sicurezza: Certificati Sicurezza: Certificati DigitaliDigitali Visto che solo Visto che solo AA può codificare i può codificare i
messaggi con la sua chiave privata, messaggi con la sua chiave privata, l’autenticazione è garantita …. tuttavia l’autenticazione è garantita …. tuttavia permane ancora un problema. La permane ancora un problema. La certificazione dell’identità. Cioè come certificazione dell’identità. Cioè come può un utente garantire che è chi dice di può un utente garantire che è chi dice di essere ? A questo proposito essere ? A questo proposito intervengono le autorità di certificazione intervengono le autorità di certificazione (es VeriSign, Thawte Consulting, Entrust (es VeriSign, Thawte Consulting, Entrust Technologies)Technologies)
Andrea ManconiAndrea Manconi
Sicurezza: Certificati Sicurezza: Certificati DigitaliDigitali Lo svantaggio delle chiavi asimmetriche è la Lo svantaggio delle chiavi asimmetriche è la
potenza di calcolo elevata !!!potenza di calcolo elevata !!!
In genere molti sistemi utilizzano un In genere molti sistemi utilizzano un compromesso tra chiavi simmetriche e compromesso tra chiavi simmetriche e asimmetriche. Utilizzano le chiavi asimmetriche. Utilizzano le chiavi asimmetriche per identificarsi reciprocamente asimmetriche per identificarsi reciprocamente poi si scambiano una chiave simmetrica poi si scambiano una chiave simmetrica separata per cifrare gli scambi. Chiave basata separata per cifrare gli scambi. Chiave basata sulla tecnologia sulla tecnologia DES DES (Data Encryption (Data Encryption Standard)Standard)
Andrea ManconiAndrea Manconi
SSLSSL
SSL: Secure Sockets Layer.SSL: Secure Sockets Layer. Si interpone tra l’HTTP e il TCP/IPSi interpone tra l’HTTP e il TCP/IP Si occupa della sicurezza con il ricorso Si occupa della sicurezza con il ricorso
della crittografia a chiave pubblica per della crittografia a chiave pubblica per lo scambio di chiavi simmetriche che lo scambio di chiavi simmetriche che cifrano la comunicazione client-server.cifrano la comunicazione client-server.
La tecnologia SSL è stata sviluppata La tecnologia SSL è stata sviluppata da Netscapeda Netscape
Andrea ManconiAndrea Manconi
SSLSSL
Funzionamento:Funzionamento: L’utente si connette al sito sicuro SSL. I siti L’utente si connette al sito sicuro SSL. I siti
protetti con SSL hanno URL del tipo protetti con SSL hanno URL del tipo https://.... (HTTP più SSL)https://.... (HTTP più SSL)
Il server firma la sua chiave pubblica con Il server firma la sua chiave pubblica con la sua chiave privatala sua chiave privata
Il browser usa la chiave pubblica del Il browser usa la chiave pubblica del server per verificare che la persona che ha server per verificare che la persona che ha firmato la chiave sia effettivamente il suo firmato la chiave sia effettivamente il suo proprietarioproprietario
Andrea ManconiAndrea Manconi
SSLSSL
Il browser verifica se un’autorità di Il browser verifica se un’autorità di certificazione fidata ha firmato la certificazione fidata ha firmato la chiave.chiave.Se non c’è questo tipo di firma il Se non c’è questo tipo di firma il browser chiede all’utente di accettare browser chiede all’utente di accettare o meno la firma.o meno la firma.
Il client genera una chiave simmetrica Il client genera una chiave simmetrica che viene cifrata con la chiave pubblica che viene cifrata con la chiave pubblica del server e rinviata a quest’ultimo.del server e rinviata a quest’ultimo.
Distribuzione di caricoDistribuzione di carico
Andrea ManconiAndrea Manconi
Distribuzione di caricoDistribuzione di carico
Problema:Problema: Gestione di siti ad alto trafficoGestione di siti ad alto traffico
Soluzione:Soluzione: elaborazione tra più server backend elaborazione tra più server backend
(suddivisione del carico e maggiore (suddivisione del carico e maggiore affidabilità)affidabilità)
Andrea ManconiAndrea Manconi
Distribuzione di caricoDistribuzione di carico
VantaggiVantaggi Maggiore robustezzaMaggiore robustezza Prestazioni ottimizzate (più richieste)Prestazioni ottimizzate (più richieste)
SvantaggiSvantaggi Regole severe da seguireRegole severe da seguire Risultati apprezzabili solo sotto eccessivo Risultati apprezzabili solo sotto eccessivo
caricocarico Aumento dei tempi e dei costi di realizzazioneAumento dei tempi e dei costi di realizzazione
Andrea ManconiAndrea Manconi
Distribuzione di caricoDistribuzione di carico
Spesso il costo di un’applicazione Spesso il costo di un’applicazione distribuita è talmente oneroso che si distribuita è talmente oneroso che si preferisce spendere a livello di preferisce spendere a livello di hardwarehardware
Andrea ManconiAndrea Manconi
Distribuzione di caricoDistribuzione di carico
Stili di distribuzioneStili di distribuzione
No clustering:No clustering:
le servlet vengono eseguite su un’unica JVM le servlet vengono eseguite su un’unica JVM (Tomcat)(Tomcat)
Andrea ManconiAndrea Manconi
Distribuzione di caricoDistribuzione di carico
Clustering senza migrazione di Clustering senza migrazione di sessionesessione
le servlet di un’applicazione web possono le servlet di un’applicazione web possono essere eseguite su più macchine, mentre essere eseguite su più macchine, mentre le richieste di sessione sono legate al le richieste di sessione sono legate al server backend sul quale sono state server backend sul quale sono state inizialmente avviateinizialmente avviateSvantaggio: crash server => sessioni Svantaggio: crash server => sessioni interrotteinterrotte
Andrea ManconiAndrea Manconi
Distribuzione di caricoDistribuzione di carico
Clustering con migrazione di sessioneClustering con migrazione di sessione
migrazione delle sessioni per migliorare migrazione delle sessioni per migliorare il bilanciamento di carico. Per evitare il bilanciamento di carico. Per evitare problemi di concomitanza si garantisce problemi di concomitanza si garantisce che tutte le richieste che fanno parte di che tutte le richieste che fanno parte di una sessione possono essere gestite una sessione possono essere gestite solo su un’unica VM alla voltasolo su un’unica VM alla volta
Andrea ManconiAndrea Manconi
RiferimentiRiferimenti http://java.sun.com/webservices/docs/1.0/tuthttp://java.sun.com/webservices/docs/1.0/tut
orial/orial/ http://jakarta.apache.org/http://jakarta.apache.org/ http://java.sun.com/j2ee/1.4/docs/api/http://java.sun.com/j2ee/1.4/docs/api/ http://servlets.comhttp://servlets.com http://oreilly.com/catalog/jservlet2http://oreilly.com/catalog/jservlet2 http://www.fastcgi.comhttp://www.fastcgi.com http://www.activeserverpages.comhttp://www.activeserverpages.com http://www.java.sun.com/products/jsphttp://www.java.sun.com/products/jsp http://www.php.nethttp://www.php.net