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

Web - service servlet