__ Università degli studi di Ferrara Indice 1. Introduzione .................................................................................................... 3 2. Il progetto dell’applicazione “Fatture On-Line”................................................ 6 2.1. La vecchia applicazione del Comune per la gestione delle fatture ..........6 2.2. Specifiche e requisiti del progetto ............................................................9 2.3. Architettura Generale del sistema..........................................................10 2.4. Sistema di autenticazione ......................................................................11 2.5. Livelli di autorizzazione ..........................................................................13 2.6. Architettura Base di dati .........................................................................14 2.7. Architettura filesystem............................................................................15 2.8. Interfaccia Web ......................................................................................17 2.9. Struttura pagine Web .............................................................................18 3. Accessibilità .................................................................................................. 21 4. Tecnologie utilizzate ..................................................................................... 25 5. 4.1. SQL e Microsoft SQL Server..................................................................25 4.2. Server Web Apache ...............................................................................26 4.3. HTML e CSS ..........................................................................................29 4.4. PHP........................................................................................................31 4.5. JavaScript ..............................................................................................33 Realizzazione della nuova applicazione....................................................... 37 5.1. Architettura della rete del Comune.........................................................37 5.2. Tabelle database....................................................................................38 5.3. Sistema di autenticazione ......................................................................42 5.4. Interfaccia web .......................................................................................49 5.5. Struttura script........................................................................................50 5.6. Ricerca e visualizzazione.......................................................................51 5.7. Accessibilità e stampa............................................................................55 5.8. Amministrazione utenti e fornitori...........................................................57 5.9. Statistiche...............................................................................................59 5.10. Altre Funzionalità ................................................................................61 5.11. Test del servizio ..................................................................................65 1 __ Università degli studi di Ferrara 6. Conclusioni ................................................................................................... 66 7. Riferimenti..................................................................................................... 67 8. Indice delle figure.......................................................................................... 68 2 __ Università degli studi di Ferrara 1. Introduzione Le Pubbliche Amministrazioni (PA), sono responsabili della gestione dei dati dei cittadini e offrono servizi per la loro consultazione. I cittadini ne possono usufruire di persona tramite gli sportelli comunali, o a distanza utilizzando i servizi telefonici o accedendo al Web. Negli ultimi anni le P.A. hanno colto l’importanza dei moderni mezzi di comunicazione intraprendendo sempre più progetti riguardanti il mondo di Internet, data la sua utilità come strumento di comunicazione che permette di raggiungere in modo più efficiente i cittadini. Affinché i servizi Web siano facilmente utilizzabili dai cittadini, si devono tenere in considerazione le caratteristiche di usabilità e accessibilità per permettere al maggior numero di utenti di poter usufruire dei servizi. Inoltre si devono tenere in considerazione le persone disabili che necessitano, per non essere penalizzate nell’utilizzo, di interfacce adeguate così da riuscire a servirsi a pieno dei sevizi messi a loro disposizione. Il problema dell’accessibilità è stato valutato a livello nazionale, ed è stata introdotta nel 2004 la legge Stanca, la quale pone i requisiti che i servizi web delle P.A. devono offrire per poter essere considerati sufficientemente accessibili. Essa specifica inoltre le caratteristiche che devono presentare i servizi, in base alle tecnologie impiegate, alla tipologia, allo scopo e agli strumenti utilizzati per accedervi, inoltre definisce le linee guida per la presentazione dei contenuti come testo, colori, suoni, video e animazioni. Il Comune di Cento è uno dei comuni più informatizzati d’Italia, offre un portale per i cittadini, con comunicazioni, eventi e molto altro ed è presente nel Web ormai da molto tempo, prima ancora dell’introduzione della legge Stanca. Questo ha determinato, negli ultimi anni, lavori di ristrutturazione del portale del comune e dei suoi servizi in modo da rendere i contenuti più funzionali e accessibili. Questa tesi descrive la progettazione e realizzazione del rinnovo e ampliamento del servizio “Fatture On-Line” precedentemente offerto dal comune, risultato ormai inadeguato avendo limiti di funzionalità, come la creazione della base di dati utilizzata e alcune funzionalità scarse o mancanti, ma soprattutto di 3 __ Università degli studi di Ferrara accessibilità. Il risultato è una nuova versione, più completa, più funzionale e provvista di una interfaccia rispettante i requisiti di usabilità e le normative di accessibilità. Il servizio “Fatture On-line” ha come scopo principale quello di offrire ai fornitori e ai dipendenti del Comune la possibilità di consultare le fatture. L’accesso è suddiviso in due sezioni: una per i fornitori che permette la consultazione, la ricerca delle proprie fatture e la visualizzazione dei dettagli; e una per i dipendenti del comune, che permette la consultazione, la ricerca di tutte le fatture e la visualizzazione delle informazioni sui fornitori. E’ presente un’ulteriore sezione di amministrazione a cui possono accedere solo un gruppo ristretto di utenti, nella quale è possibile gestire gli utenti interni e l’accesso per i fornitori. Il progetto, che ha preceduto la realizzazione dell’applicazione, è partito con l’ampliamento della struttura del database già utilizzato: oltre ai dati delle fatture e dei fornitori sono stati considerati anche quelli degli utenti, in questo modo è possibile consentire, limitare o negare l’accesso, identificando gruppi di utenti e i relativi privilegi. Sono stati individuati due gruppi principali: Utenti di Dominio, suddivisi in tre livelli, con privilegi crescenti per separare l’amministrazione dalla sola consultazione, e Utenti Fornitori con accesso limitato alla consultazione delle fatture di un singolo fornitore. Un ulteriore passo del progetto è stato quello della sicurezza, progettando il filesystem in maniera tale da separare la parte accessibile ai fornitori da quella dedicata ai dipendenti del comune, e la realizzazione di un sistema di accesso sicuro. Nel corso del progetto si è prestata particolare attenzione all’accessibilità e usabilità dell’applicazione (uno dei motivi principali di questo progetto) progettando un’interfaccia semplice ma nello stesso tempo funzionale e, per quanto possibile, esente da limitazioni per utenti disabili, ad esempio utilizzando colori con contrasti adeguati, access key per la facile fruizione del servizio con l’ausilio della sola tastiera. Infine è stata progettata un’architettura di base degli script per la facile realizzazione e manutenzione dell’applicazione. A questo punto si è passati alla fase di realizzazione, mettendo in pratica le idee, gli schemi e le procedure ideate in fase di progettazione. Sono state 4 __ Università degli studi di Ferrara create le tabelle necessarie, è stato sviluppato il sistema di autenticazione e sono state implementate nuove funzionalità di ricerca, amministrazione e statistica. Questa tesi è il frutto di un tirocinio svolto presso il Servizio Sistemi Informativi (SSI) del Comune di Cento che si occupa della gestione e amministrazione hardware e software della rete civica, l’amministrazione della intranet comunale, del portale del Comune, la gestione e realizzazione di servizi on-line e siti Web strettamente collegati al Comune. 5 __ Università degli studi di Ferrara 2. Il progetto dell’applicazione “Fatture On-Line” Il progetto prevede lo sviluppo di un sistema per la consultazione dei fornitori e delle fatture via web, chiamato “Fatture On-Line”, comprendente un’interfaccia web a uso degli utenti interni e dei fornitori dell’ente per il monitoraggio delle fatture di fornitura, dalla loro registrazione al pagamento. Viene creata un’ulteriore interfaccia di amministrazione per la gestione degli utenti. Tutte le interfacce vengono create nel rispetto delle norme di accessibilità ed usabilità previste per la P.A.. L’applicazione è suddivisa in due sezioni, una per l’accesso degli utenti esterni (fornitori), e una per l’accesso degli utenti di dominio (dipendenti del comune). La prima modalità di accesso permette ai fornitori del comune di Cento di poter cercare e visualizzare le proprie fatture, mostrandone i dettagli e lo stato in cui si trovano. La seconda modalità permette ai dipendenti del comune di poter cercare e visualizzare tutte le fatture e relativi dettagli con la possibilità di gestire l’accesso dei fornitori al servizio. 2.1. La vecchia applicazione del Comune per la gestione delle fatture Il Comune di Cento, sensibile al discorso Web, ha creato un portale per offrire ai cittadini, con un nuovo approccio, i propri servizi. Tra questi servizi è presente un applicativo Web per la gestione delle fatture on-line in cui sono molto evidenti le limitazioni di utilizzo e di gestione del servizio, che non erano state previste o risolte nella progettazione precedente: - l’applicazione permetteva di visualizzare le fatture dell’anno in corso e dei due anni precedenti, il numero degli anni in cui considerare le fatture era impostato a mano con cadenza annuale, in una fase di batch che genera la base di dati finale; - non esisteva un accesso specifico per gli utenti interni alla sede del comune e mancava una sezione di amministrazione adeguata; - non c’era una gestione dei fornitori ( ad esempio non si poteva cambiare la password di un fornitore ); 6 __ - Università degli studi di Ferrara la procedura di conversione e preparazione della base di dati utilizzata dal servizio web ( fase di batch ) era molto lunga: o estrapolazione dei dati dal database del gestionale su macchina unix in un file di testo; o una macchina Windows si prendeva carico di importare il file di testo e caricarlo in un database Access; o ulteriore normalizzazione e associazione dei dati come fatture e dettagli; o conversione database Access in un database PostgreSQL. - interfaccia web non rispettante le normative sull’accessibilità e usabilità per la P.A; - interfaccia web non rispettante le caratteristiche di usabilità. Dalle immagini di figura 1,2 e 3, si può notare come l’applicazione presenta colorazioni non idonee, e non dispone di un interfaccia abbastanza intuitiva. Questi particolari sono stati dei motivi più che sufficienti per decidere di riorganizzare e aggiornare il servizio, da questo nasce anche l’esigenza di creare una nuova interfaccia più efficiente e funzionale. Figura 1: Pagina principale di accesso al servizio 7 __ Università degli studi di Ferrara Figura 2: Pagina di ricerca Figura 3: Risultati ricerca 8 __ 2.2. Università degli studi di Ferrara Specifiche e requisiti del progetto Le specifiche del progetto sono diverse per gli utenti di dominio e per i fornitori: La parte di accesso per gli utenti di dominio prevede: - 4 livelli di autenticazione ( Dominio, Utente, Amministratore e Super Amministratore ); - visualizzazione di tutte le fatture; - ricerca per fattura; - ricerca per fornitore; - sezione di BackOffice per l’amministrazione del servizio che comprende: o amministrazione accesso fornitori; o amministrazione permessi utenti di dominio; o statistiche accessi. La parte riguardante i fornitori prevede: - accesso solo previa abilitazione del servizio; - cambio Password al primo utilizzo; - cambio password allo scadere di 60 giorni dall’ultimo accesso; - visualizzazione delle proprie fatture; - ricerca delle proprie fatture; - possibilità di invio modulo di richiesta informazioni su una specifica fattura. L’intera applicazione rispetta le specifiche di accessibilità e usabilità, permettendo la consultazione del servizio anche a utenti disabili senza particolari disagi, utilizzando programmi specifici come lettori audio di testo per non vedenti, o altre tipologie di programmi, e periferiche di visualizzazione che supportano risoluzioni diverse. 9 __ 2.3. Università degli studi di Ferrara Architettura Generale del sistema L’applicazione prevede un’architettura generale su cui basarsi, e da cui partire per la progettazione delle singole parti. Ogni singola parte offre un’interfaccia per poter comunicare con le atre, in modo tale da ottenere un approccio modulare che consenta di sostituire o modificare un singolo elemento, senza dover eseguire correzioni in altri componenti. In figura 4 è rappresentato lo schema generale del servizio, in cui possiamo trovare i vari blocchi che compongono il sistema. L’interfaccia Web, accessibile con l’ausilio di un comune browser, rappresenta il tramite che consente all’utente di dialogare con l’applicazione; da qui è possibile scegliere se accedere alla sezione dedicata agli utenti di dominio tramite l’autenticazione di dominio, oppure accedere alla sezione pubblica tramite il sistema di autenticazione e codifica. Solamente dalla sezione di dominio è possibile accedere alla sezione di amministrazione. Nella figura è presente un blocco chiamato “APPLICAZIONE Fatture On-Line” che rappresenta il cuore del servizio, questo contiene le implementazioni delle funzionalità e ne permette la fruizione grazie alla comunicazione con il server Web e con un database che contiene i dati per l’utilizzo del servizio. Figura 4: Schema generale del servizio 10 __ 2.4. Università degli studi di Ferrara Sistema di autenticazione Il sistema di autenticazione è una parte molto importante che permette di proteggere l’accesso alla visualizzazione di informazioni riservate. E’ suddiviso in due sezioni: una sezione di accesso per gli utenti di dominio, e una per l’accesso pubblico. L’autenticazione della sezione riguardante gli utenti di dominio è demandata ad Active Directory [Microsoft Active Directory], che si occupa di proteggere le macchine all’interno della rete del comune e la protezione di aree riservate ai soli utenti di dominio. Riguardo all’autenticazione della sezione di accesso pubblico, è stata adottata una doppia protezione: una basata su Apache e l’altra basata su script PHP e database. La protezione di Apache permette l’accesso al sistema di autenticazione vero e proprio, si è scelto di utilizzare un'unica coppia di nome utente e password, perché questa protezione ha come unico scopo quello di arginare i tentativi di forzatura del sistema da parte di persone che non hanno fatto richiesta di accesso al servizio. La protezione basata su PHP e database permette di autenticare l’accesso dei fornitori al servizio. Sono stati presi in considerazione metodi diversi per la protezione delle informazioni inserite dagli utenti. Tra questi si predilige l’utilizzo di SSL ( Secure Socket Layer ) [Protocollo SSL] che permette, tramite una codifica a chiavi pubblica e privata, di creare un canale di comunicazione sicuro tra client e server, rendendo le intercettazioni della trasmissione non comprensibili e difficilmente decodificabili. Purtroppo per problemi sui server del comune (durante il corso del tirocinio) non è stato ancora possibile attivare la protezione. Per arginare questo problema, sono stati presi in considerazione i metodi di autenticazione “http” come “Basic” e “Digest”. L’autenticazione Basic codifica le informazioni in ingresso, come nome utente e password, in Base64 e le invia al server che provvederà a decodificarle e successivamente ad elaborarle. L’autenticazione Digest è simile alla Basic a differenza del fatto che le informazioni non vengono inviate direttamente, ma a lato client ne viene creato un hash che successivamente verrà inviato al server per una comparazione con i dati presenti nel database. Questi due metodi però permettono una limitata 11 __ Università degli studi di Ferrara modifica della maschera di inserimento dati. Vista la necessità di un sistema che ha bisogno di una personalizzazione della maschera di inserimento e che non permetta la facile intercettazione e comprensione delle informazioni inviate, si è provveduto a creare un metodo personalizzato. E’ stato ideato un sistema che permette di salvaguardare le informazioni di accesso ed evitare nei limiti del possibile l’intercettazione della comunicazione, e l’utilizzo di queste informazioni al di fuori della sessione corrente. In ogni sessione viene generata una chiave alfanumerica che ha la caratteristica di essere univoca, e identifica la sessione corrente. Considerando che ogni volta la chiave di sessione cambia, si è pensato di utilizzarla in fase di accesso al servizio, dopo di che viene effettuato l’hash delle informazioni concatenate con la chiave e inviate al server, che provvede a verificare l’autenticazione con le informazioni reperite dal database. Il tutto è schematizzato in figura 5. Oltre a questo, per aumentare la sicurezza, è stato aggiunto un sistema di codifica per le informazioni sensibili non a conoscenza del server, come ad esempio avviene nel cambio di una password. Il sistema precedentemente descritto, non lo si può applicare a questa situazione, perché funziona solo se il server è già a conoscenza dell’informazione che deve transitare. In questo caso, la nuova password scelta dall’utente è sconosciuta al server e non la si può criptare vista l’impossibilità di ricondursi ad essa, quindi, si è deciso di effettuare una codifica lato client delle informazioni sensibili, tramite l’utilizzo di una chiave random. Il tutto poi viene inviato dal client, successivamente decodificato ed elaborato dal server. Il tutto è schematizzato in figura 6. Figura 5: Schema di cifratura Figura 6: Schema di codifica 12 __ 2.5. Università degli studi di Ferrara Livelli di autorizzazione Sono stati definiti 4 livelli di autorizzazione per la parte relativa all’accesso di dominio, aventi le seguenti caratteristiche: - Dominio: o Utente precedentemente autentificato nel dominio, che all’interno del servizio è considerato come un utente senza autorizzazione (per ora questo livello viene considerato come il livello “Utente” così che tutti i dipendenti del comune possono accedere al servizio, è stata prevista l’inabilitazione dell’autorizzazione “Dominio” nell’eventualità che possano sorgere problematiche interne). - Utente: o Utente con permessi di visualizzazione delle fatture di tutti i fornitori, e con la possibilità di effettuare ricerche sia per fattura che per fornitore. - Amministratore: o Utente con accesso alla sezione di amministrazione e con i permessi di gestione fornitori, e gestione limitata dei permessi degli utenti di dominio. o Permessi per la gestione delle scansioni delle fatture. - Super Amministratore: o Utente con accesso completo a tutte le funzionalità del servizio. ( gestione fornitori, gestione completa permessi utenti di dominio, visualizzazione statistiche, modifica impostazioni generali, gestione scansioni fatture ). Per quanto riguarda l’accesso da parte dei fornitori, è disponibile un unico livello di autorizzazione che permette la visualizzazione delle proprie fatture e dei dettagli a esse connesse. 13 __ 2.6. Università degli studi di Ferrara Architettura Base di dati La procedura batch che permetteva di estrapolare i dati dal database del gestionale in un nuovo database, così da poter essere manipolati senza rischio, è stata rinnovata e ridotta a due fasi: - Estrapolazione dei dati dal database del gestionale su macchina unix in un file di testo Le Conversione da file di testo a database SQL Server ottimizzazioni e le normalizzazioni vengono ora fatte all’interno dell’applicazione web. Il database è costituito da 3 tabelle principali dove risiedono i dati dei fornitori, delle fatture e dei dettagli delle fatture. Come possiamo notare dallo schema di figura 7, con cadenza giornaliera, i dati provenienti dal database del gestionale vengono salvati in un file di testo e, successivamente, utilizzati per popolare le tabelle che verranno utilizzate dal servizio. Oltre a queste sono state aggiunte, in questo progetto, altre 4 tabelle (vedere in figura 8) per la gestione del servizio che permettono: - la gestione delle scansioni associate alle fatture; - la gestione dei permessi di dominio e accesso fornitori; - la registrazione degli accessi; - il settaggio di impostazioni globali per la configurazione del servizio. Figura 7: Schema procedura Batch 14 __ Università degli studi di Ferrara Le tabelle di gestione del servizio non sono collegate direttamente alle tabelle principali con delle chiavi importate, questo per evitare cancellazioni o modifiche, essendo le tre tabelle svuotate e ripopolate giornalmente. Figura 8: Nuove tabelle per il sistema 2.7. Architettura filesystem Il filesystem è un altro aspetto che è stato curato per fornire un livello maggiore di sicurezza. In prima analisi sono state create due cartelle separate visibili in figura 9, una per l’accesso al servizio da parte degli utenti di dominio, e l’altra per l’accesso dei fornitori. E’ stato fatto questo per poter sfruttare il meccanismo di autenticazione di dominio, dando l’accesso alla prima cartella solo a chi si è autentificato come utente di dominio, non potendo usare questo metodo per la seconda cartella, si è optato per una doppia autenticazione Apache / PHP-Database. La prima autenticazione è gestita dal server web Apache, con una unica autorizzazione che viene comunicata solo ai fornitori che richiedono il servizio, e serve principalmente per scongiurare eventuali tentativi di ingresso con credenziali scelte a caso. La seconda autorizzazione è gestita nella parte protetta dal dominio tramite una interfaccia web di amministrazione. In seconda analisi si è passati alla struttura delle cartelle che conterranno il servizio. Si è deciso di creare sia la cartella di dominio che quella per i fornitori con la stessa struttura mostrata in figura 10. Sono presenti 2 cartelle primarie, una con le classi base, che verranno utilizzate per contenere i dati prelevati da database, e una con le librerie o parti 15 __ Università degli studi di Ferrara che verranno incluse nelle pagine. Nelle inclusioni troviamo le funzioni di accesso al database, funzioni generiche, file di protezione, menu, ecc… Solamente all’interno della parte di dominio troviamo una cartella dedicata all’amministrazione, che al suo interno ha la stessa struttura precedentemente descritta. Figura 9: Schema struttura del filesystem principale Figura 10: Schema struttura dettagliata del filesystem 16 __ 2.8. Università degli studi di Ferrara Interfaccia Web L’interfaccia web è un altro punto importante su cui soffermarsi, perché è il tramite che permette all’utilizzatore di usufruire del servizio, quindi rendere l’interfaccia intuitiva e di facile uso permette di ottimizzarne l’impiego. E’ stata fatta una ricerca sulle specifiche relative all’accessibilità, da applicare all’interfaccia per poter rispettare le normative, riuscendo a offrire un servizio accessibile anche a utenti disabili. Inoltre si è cercato di mantenere, per quanto possibile, l’interfaccia simile agli altri servizi, facilitando l’utilizzo omogeneo del portale del comune (un esempio è visibile in figura 11 e figura 12). Figura 11: Esempio di interfaccia del portale del comune Figura 12: Esempio di interfaccia del servizio 17 __ 2.9. Università degli studi di Ferrara Struttura pagine Web Creare una struttura di base per le pagine web è importante, perchè permette di facilitarne la creazione e la modifica. Tipicamente in una pagina se ne includono altre, che possono contenere librerie di funzioni, classi o variabili, oppure contenuti dinamici o statici. Questo permette di agevolare la modifica dell’applicazione da parte di più persone, che possono agire su parti diverse contemporaneamente, mantenendo un’interfaccia comune. Spesso si nota la presenza di molte parti di un’applicazione che sono identiche o presentano caratteristiche molto simili, con le inclusioni si può semplificare questa situazione inserendo, in tutte le pagine che presentano caratteristiche simili, un file che racchiude porzioni di codice dinamico, che, ad ogni chiamata, genera dei contenuti che possono essere uguali, oppure offrire contenuti con sostanziali differenze. Volendo fare un esempio, possiamo prendere in considerazione un menù presente in tutte le pagine e, che in certe sezioni, le voci siano diverse oppure che vengano visualizzate in base alle autorizzazioni dell’utente che richiede la pagina. Per fare questo basta creare una porzione di codice che genera un menù dinamico, il quale in base al tipo di richiesta mostri voci diverse o tenga conto delle autorizzazioni, e includere questo file in ogni pagina, dove queste ultime provvederanno a chiamare il menù passando i parametri adeguati. In questo progetto si è scelto l’utilizzo dei template che permettono, una volta creatone uno, di generare nuove pagine con una struttura di base da cui partire. Se si modifica un template tutte le pagine create con esso possono essere aggiornate automaticamente. La figura 15 mostra com’è stato creato il layout delle pagine del servizio, questo è costituito da quattro parti principali: 18 - Header - Menu - Contenuto - Footer __ Università degli studi di Ferrara La sezione Header rappresenta la parte superiore della pagina in cui sono contenuti: - Il Logo (vedi figura 13), presente in tutte le pagine: Figura 13: Logo comune di Cento - L’intestazione dinamica (vedi figura 14): Nell’intestazione troviamo il nome del servizio, in questo caso “Fatture On Line”, il nome dell’utente collegato al servizio, il profilo dell’utente (permessi) e la data dell’ultimo accesso. Figura 14: Intestazione servizio, accesso di dominio Figura 15: Layout pagine servizio 19 __ Università degli studi di Ferrara La sezione Menù rappresenta il blocco in cui trovare i collegamenti alle varie funzioni del servizio ed eventualmente può ospitare altre informazioni come una legenda. La sezione Contenuto rappresenta il blocco in cui verranno visualizzati tutti i contenuti del servizio. La sezione Footer rappresenta la parte inferiore della pagina in cui sono contenute scritte descrittive e include la sezione “Access Key” (esempio in figura 16). Nella sezione Access Key troviamo una parte importante per l’acessibilità, cioè la legenda delle Access Key presenti nella pagina. Figura 16: Footer con Access Key 20 __ Università degli studi di Ferrara 3. Accessibilità L'accessibilità di un sito si ottiene tecnicamente rispettando le regole dettate dal progetto Web Accessibility Initative (WAI) [WAI]: una iniziativa del W3C [W3C], il consorzio mondiale che si occupa di standardizzare la progettazione dei siti web. Le linee guida contenute nel progetto WAI, consentono di realizzare un sito i cui contenuti e servizi siano fruibili da parte di tutti gli utenti, anche coloro che hanno necessità particolari ed accedono al web mediante dispositivi diversi dal monitor, tastiera o mouse. Rendere un sito accessibile significa, dunque, permettere a chiunque di accedere pienamente ai contenuti, alle informazioni ed ai servizi resi a disposizione dal sito, indipendentemente dal sistema operativo, dagli strumenti di navigazione, dalle impostazioni del browser, e a prescindere dalla velocità di connessione di cui si dispone. Significa inoltre perseguire un percorso di ricerca e di aggiornamento continuo, che parte dalla conoscenza dei problemi e delle reali necessità degli utenti, delle tecnologie per supportarli, dai test derivati dall'applicazione di queste tecnologie, dal monitoraggio dei risultati e dall'implementazione delle soluzioni più soddisfacenti per gli utenti. Il 17 dicembre 2003 il Parlamento approva all'unanimità la "Legge Stanca", che consente ai disabili l'accessibilità alle nuove tecnologie digitali e informatiche precisando che un "sito web accessibile", è un sito Internet il cui contenuto informativo multimediale e le procedure di interazione e navigazione siano fruibili da utenti dotati di browser con diverse configurazioni, che consentano di disabilitare le funzioni di caricamento di immagini, animazione, suono, colore, temporizzazione e omettere l'uso di visualizzatori addizionali. Si considera accessibile un sito che non ostacoli l'orientamento, la navigazione, la lettura di pagine e documenti, lo scaricamento di file e l'interazione con form o quant'altro richieda introduzione di dati e gestione di comandi, quando tali operazioni siano eseguite da una persona sufficientemente addestrata nell'uso di una postazione di lavoro. 21 __ Università degli studi di Ferrara Ai fini dell'accessibilità, i criteri fondamentali ai quali le amministrazioni sono invitate ad attenersi nello sviluppo di applicazioni informatiche sono i seguenti: - Accessibilità dalla tastiera: o tutte le funzioni dell'applicazione devono essere gestibili da tastiera. Tutte le azioni previste con l'uso di dispositivi di puntamento e manipolazione di oggetti devono essere rese possibili anche con equivalenti comandi di tastiera e devono essere chiaramente descritte nella documentazione dell'applicazione; o i comandi impartiti con combinazione di tasti di scelta rapida devono rispettare, per le operazioni più comuni, le scelte abituali del sistema operativo e devono essere ridefinibili dall'utente, per risolvere eventuali problemi di conflitto con quelli della tecnologia assistiva. Vanno inoltre preferite combinazioni semplici di tasti che risultino di facile memorizzazione e richiedano una modesta abilità manuale per l'esecuzione; o l'applicazione deve prevedere una successione logica delle operazioni di interazione. La successione deve essere chiaramente individuabile dalla tecnologia assistiva, per seguirne il percorso e consentire l'interpretazione alternativa delle operazioni; o l'applicazione non deve interferire con le funzioni di accessibilità eventualmente disponibili nel sistema operativo; o i comandi che prevedono una risposta a tempo devono essere evitati, oppure deve essere prevista la possibilità, per l'utilizzatore, di regolare il tempo di risposta; - Icone: o tutte le icone devono avere una chiara etichetta testuale o un'alternativa testuale selezionabile dall'utilizzatore; o ad ogni icona deve essere associata una combinazione di tasti di scelta rapida. Per le barre di icone deve essere disponibile anche un menù a tendina con comandi equivalenti; 22 __ - Università degli studi di Ferrara Oggetti: o l'applicazione deve usare le routine di sistema per la presentazione del testo, in modo da permetterne l'interpretazione alla tecnologia assistiva. L'informazione minima da fornire per tale interpretazione è costituita dal contenuto testuale dello schermo, dagli attributi del testo e dalla posizione del cursore; o l'applicazione deve rendere disponibili sufficienti informazioni sugli oggetti usati dall'interfaccia utente, affinché la tecnologia assistiva possa identificarli e interpretarne la funzione; - Multimedia: o l'applicazione deve prevedere opzioni alternative di segnalazione visiva di avvertimento e rinforzo delle segnalazioni sonore di allarme del programma; o l'applicazione deve prevedere opzioni di presentazione sincronizzata in formato testuale di tutte le informazioni audio, per mezzo di didascalie, sotto-titolazioni o altro, se questo non sia palesemente in contrasto con le funzioni del programma o oggettivamente impossibile da realizzare o non sufficiente per un utilizzatore non udente; o l'applicazione deve prevedere opzioni di descrizione vocale o presentazione sincronizzata in formato testuale di tutte le informazioni di tipo video se questo non è palesemente in contrasto con le funzioni del programma o oggettivamente impossibile da realizzare o non sufficiente per un utilizzatore non vedente (ad esempio programmi CAD o di montaggio fotografico); - Presentazione a video: o l'applicazione non deve usare il colore come mezzo per fornire informazione o indicare una azione selezionabile in un menu oppure deve prevedere un metodo alternativo utilizzabile anche da chi non percepisce i colori; 23 __ Università degli studi di Ferrara o l'applicazione deve permettere all'utilizzatore di scegliere i colori e regolare il loro contrasto, sia nell'interfaccia utente sia nelle aree di lavoro e presentazione dei dati; o l'applicazione non deve contenere immagini di sfondo in presenza di un testo o un grafico importante, oppure deve essere fornita di una opzione per eliminare tale sfondo; o l'applicazione deve permettere all'utilizzatore di cambiare dimensioni e tipo di caratteri, per mezzo del sistema operativo, per la presentazione a video e per la stampa; o l'applicazione deve permettere all'utilizzatore di regolare o bloccare gli effetti di lampeggio, rotazione o movimento delle presentazioni a video, se questo non interferisce con lo scopo dell'applicazione; o l'applicazione deve permettere all'utente di selezionare la definizione di schermo preferita; o l'applicazione deve rispettare le scelte dell'utente relative ai puntatori di sistema del mouse; o per gli elementi selezionabili, si deve prevedere una distanza minima di almeno il 4% della larghezza o altezza dello schermo, oppure deve essere prevista un'opzione di ridimensionamento; - Etichette dei campi: o le etichette relative ai campi dei dati devono trovarsi immediatamente vicine ai campi stessi, preferibilmente a sinistra, in modo da facilitare la loro lettura, e l'associazione al campo relativo, da parte degli screen reader per i ciechi; - Documentazione: o tutta la documentazione deve essere fornita anche in formato elettronico accessibile e deve includere anche descrizioni testuali di figure e grafici; o qualunque uscita prodotta dall'applicazione deve essere disponibile in formato accessibile. 24 __ Università degli studi di Ferrara 4. Tecnologie utilizzate Il progetto, oggetto del tirocinio, è basato su un servizio che si trova su un server web Apache attivo su una macchia virtuale Windows 2003 Server. L’utilizzo di una macchina virtuale permette la migliore configurazione, manutenzione e affidabilità del server. Come Database Management System (DBMS) è stato utilizzato Microsoft SQL Server, e come linguaggio per la creazione dell’applicazione web, è stato scelto PHP, per la facilità di programmazione e la caratteristica di essere Open Source, il che significa che i codici sorgenti del PHP sono disponibili a chiunque, con la possibilità di essere modificati e utilizzati in modo gratuito. Per quanto riguarda l’accessibilità e l’usabilità si è fatto un uso principale dei fogli di stile CSS per la parte grafica. Come tecnologia lato client è stato utilizzato il JavaScript. 4.1. SQL e Microsoft SQL Server La storia di SQL [Linguaggio SQL] inizia nel 1974 con la definizione da parte di Donald Chamberlin, e di altre persone che lavoravano presso i laboratori di ricerca dell'IBM, di un linguaggio per la specificazione delle caratteristiche dei database che adottavano il modello relazionale. Questo linguaggio si chiamava SEQUEL (Structured English Query Language) e venne implementato in un prototipo chiamato SEQUEL-XRM fra il 1974 e il 1975. Le sperimentazioni con tale prototipo portarono fra il 1976 ed il 1977 ad una revisione del linguaggio (SEQUEL/2), che in seguito cambiò nome per motivi legali, diventando SQL. Il prototipo (System R), basato su questo linguaggio, venne adottato ed utilizzato internamente da IBM e da alcuni suoi client. Grazie al successo di questo sistema, che non era ancora commercializzato, anche altre compagnie iniziarono a sviluppare i loro prodotti relazionali basati su SQL. A partire dal 1981 IBM cominciò a rilasciare i suoi prodotti. Nel corso degli anni ottanta numerose compagnie (ad esempio Oracle e Sybase, solo per citarne alcune) commercializzarono prodotti basati su SQL, che divenne lo standard industriale di fatto per quanto riguarda i database relazionali. Il fatto di avere uno standard definito di un linguaggio per database relazionali, apre potenzialmente la strada 25 __ Università degli studi di Ferrara alla intercomunicabilità fra tutti i prodotti che si basano su di esso. Dal punto di vista pratico, purtroppo, le cose sono andate in modo differente. Infatti, in generale, ogni produttore adotta ed implementa nel proprio database solo il cuore del linguaggio SQL (il cosiddetto Entry level o al massimo l'Intermediate level), estendendolo in maniera proprietaria a seconda della propria visione del mondo dei database. L'ingresso di Microsoft nel mondo dei database di fascia "enterprise" risale intorno al 1989, quando cominciò la competizione con Oracle, IBM e Sybase che erano i dominatori del mercato. La prima versione fu SQL Server per OS/2 ed era quasi identica a Sybase SQL Server 4.0 su Unix. Fino al 1994 Microsoft SQL Server riportava tre copyright della Sybase come indicazione della sua origine; in seguito Sybase cambiò il nome del suo prodotto in "Adaptive Server Enterprise" per evitare confusione con "Microsoft SQL Server" [Microsoft SQL Server]. SQL Server 7.0 è stato il primo database server basato su un'interfaccia grafica. Microsoft SQL Server è un database relazionale prodotto da Microsoft, che nelle prime versioni era utilizzato per basi dati medio-piccole, ma negli ultimi anni (a partire dalla versione 2000) è stato utilizzato anche per la gestione di basi dati di grandi dimensioni. Questo DBMS della Microsoft usa una variante del linguaggio SQL standard (lo standard ISO certificato nel 1992) chiamata T-SQL (TransactSQL). 4.2. Server Web Apache Apache [Server Web Apache] è il principale server web, con una quota di mercato vicino al 70% (vedi figura 17). Svariate società commerciali hanno adottato soluzioni basate su Apache per i loro prodotti, incluse Oracle, Red Hat e IBM. Lo scopo del progetto del Server HTTP è di sviluppare e mantenere un server HTTP Open Source per i moderni sistemi operativi, come Unix e Windows. Il fine di questo progetto è quello di fornire un server sicuro, efficiente ed estensibile che garantisca servizi HTTP in aderenza con gli standard HTTP correnti. Il server Apache iniziò la sua vita come modifica del server Web NCSA, 26 __ Università degli studi di Ferrara uno dei primi server http, poi cresciuto oltre la semplice implementazione di un server web, occupandosi dello sviluppo di altre tecnologie critiche dal lato server. Apache è un server web basato su processi. Al suo avvio, genera (fork) svariati processi figli; con il fork un processo primario genera copie identiche di se stesso, chiamate figli. Ognuno dei quali può servire una richiesta indipendente dalle altre, con il vantaggio di migliorare la stabilità: se uno dei figli ha un comportamento anomalo (va fuori controllo o si blocca) può essere interrotto senza alcun effetto sugli altri. Figura 17: Dati sulla diffusione dei principali server web La stabilità è ottenuta a spese delle prestazioni. Nella maggior parte dei sistemi Unix, la creazione di processi e il cambiamento del contesto (assegnazione di tempo del processore a ogni processo), sono operazioni costose in termini di risorse di sistema, dal momento che i processi sono isolati gli uni dagli altri e non possono quindi facilmente condividere codice e dati. Caratteristiche: - Modularità: Possiede un'architettura modulare, che permette di abilitare o disabilitare moduli per aggiungere o rimuovere funzionalità al server Web. È possibile personalizzare Apache per migliorarne le prestazioni e la sicurezza. In aggiunta ai moduli di base, esiste un gran numero di moduli di terze parti, con i quali è possibile ampliare ulteriormente le funzionalità del server. 27 __ - Università degli studi di Ferrara Moduli multiprocesso: Astrae l'architettura di elaborazione delle richieste tramite moduli speciali, chiamati Multi Processing modules (MPMs), ossia moduli Multi Processo, grazie ai quali Apache può essere configurato come un server basato su processi, come un server puramente basato su thread o come un misto di tali modelli. I thread sono inglobati all'interno dei processi e sono eseguiti simultaneamente; a differenza dei processi, possono condividere sia dati che codice, risultando così più "leggeri", tanto che in molti casi i server di tipo "threaded" hanno una migliore scalabilità rispetto ai server basati su processi. Il server risulta, in controparte, meno affidabile, perché se un thread ha un comportamento anomalo può causare la corruzione di codice o di dati appartenenti ad altri thread. - Moduli multi protocollo: La gestione dei protocolli in Apache è stata incapsulata in un suo proprio livello, rendendo possibile la scrittura di moduli per protocolli diversi da HTTP, quali POP3 per la posta o FTP per il trasferimento di file. Questi moduli di protocollo possono trarre vantaggio dalla solida ossatura del server e dalla funzionalità dei moduli, come l'autenticazione e la generazione di contenuti dinamici. Questo significa che, per esempio, è possibile autenticare i propri utenti POP3, tramite lo stesso database di utenti che Apache usa per le richieste web e che il contenuto FTP può essere generato dinamicamente grazie a CGI,PHP,JSP o qualunque altra delle tecnologie di creazione di contenuti dinamiche lato server. Le applicazioni web sono scritte in linguaggi di alto livello come Java, Perl, C# e così via e Apache dispone di svariati moduli che ne permettono l'integrazione con il server. In molti casi i moduli espongono le API di Apache, così che tutti i moduli Apache possano essere scritti in questi linguaggi. 28 __ 4.3. Università degli studi di Ferrara HTML e CSS L’HTML (Hypertest Markup Language) [HTML 4.01] è un linguaggio usato per descrivere i documenti ipertestuali disponibili nel Web. Non è un linguaggio di programmazione, ma un linguaggio di markup, ossia descrive il contenuto, testuale e non, di una pagina web. L'estensione comune dei documenti HTML sono “.html” o “.htm”. È stato sviluppato alla fine degli anni '80 da Tim BernersLee al CERN di Ginevra. Verso il 1994 ha avuto una forte diffusione, in seguito ai primi utilizzi commerciali del web. HTML è un linguaggio di pubblico dominio la cui sintassi è stabilita dal World Wide Web Consortium (W3C), ed è basato su un altro linguaggio avente scopi più generici, l'SGML. Il cuore principale della sintassi di questo linguaggio è l'elemento. Gli elementi sono le strutture del linguaggio a cui è delegata la funzione di formattare i dati o indicare al Web browser delle informazioni. Ogni elemento è racchiuso all'interno di tag, uno di apertura ed uno di chiusura. Quest'ultimo, per certi elementi, è opzionale. I tag sono dei segnalini (markup) costituiti da una sequenza di caratteri racchiusa da due parentesi angolari, cioè i segni minore e maggiore. Un documento HTML comincia con l'indicazione della DTD (Document Type Definition), la quale dice al browser l'URL (Uniform Resource Locator) delle specifiche HTML che stiamo utilizzando per il nostro documento (indicando quindi, implicitamente, quali elementi, attributi ed entità possiamo utilizzare). Tutte le informazioni contenute nel documento devono essere indicate tra i tag <HTML> e </HTML>. All'interno di questi due tag la sintassi HTML permette due sezioni: una racchiusa tra i tag <HEAD> e </HEAD>, ed una racchiusa tra i tag <BODY> e </BODY>. All'interno della prima sezione sono indicate delle informazioni generali riguardanti l'intero documento e che non vengono visualizzate dal browser. All'interno della sezione BODY sono indicate tutte le informazioni effettivamente presenti nel documento. Il tag principale più utilizzato dell'HTML è il tag <A>, che descrive un collegamento (o link) ad un altro documento ipertestuale. Sui browser grafici è possibile chiedere al computer di passare alla risorsa indicata dal link semplicemente facendo un clic con il mouse. 29 __ Università degli studi di Ferrara Lo scopo dell’HTML è definire il ruolo strutturale che gli elementi contenuti nella pagina hanno all’interno del documento, ad esempio paragrafi, titoli, link, tabelle, liste, ecc… e non per decidere come questi elementi dovrebbero essere visualizzati sullo schermo, anche se nel tempo sono stati usati stratagemmi sui tag per controllare la presentazione delle pagine web. I fogli di stile sono nati per superare questa situazione, separando le istruzioni di visualizzazione dai tag strutturali dell’HTML conservando i vantaggi di portabilità, di condivisione dei documenti e visualizzazione corretta su browser differenti, anche quelli che non sono in grado di interpretare correttamente i CSS [CSS 2.1]. I fogli di stile (CSS, cascading style sheet) sono una tecnologia che si sta lentamente imponendo all'attenzione di coloro che realizzano siti. Si tratta di un linguaggio per il visual design, ovvero per controllare l'aspetto visivo degli elementi che costituiscono la pagina HTML. I CSS sono una specifica diversa da HTML. Quest’ultimo può contenere al suo interno delle istruzioni CSS associate ai tag HTML, oppure può fare riferimento, con un'apposita dichiarazione, ad un foglio di stile separato tramite un proprio URI. Sono caratterizzati da regole strutturate nel seguente modo: selettore { proprietà1 : valore1; proprietà2 : valore2, valore3; } E ne possiamo trovare di vario tipo: - Selettori di tipo: p{ …… } I selettori di tipo applicano la regola a tutti gli elementi di uno specifico tipo. - Classi: .nomeClasse { …… } Le classi applicano la regola a tutti gli elementi in cui è presente la proprietà class=”nomeClasse”. 30 __ - Università degli studi di Ferrara Identificatori: #nomeIdentificatore { …… } Gli identificatori applicano la regola a tutti gli elementi in cui è presente la proprietà id=”nomeIdentificatore”. - Pseudoclassi: a:link { …… } Le pseudoclassi individuano gli elementi in base alle loro proprietà. Ad esempio link si applica ai collegamenti e identifica i collegamenti non visitati. - Pseudoelementi: p:first-line { …… } Gli pseudoelementi individuano solo una parte di un elemento. Ad esempio first-line individua solo la prima linea di un paragrafo. - Selettore di discendenza, figlio e fratello: Identificano solamente gli elementi che si trovano in una particolare condizione di discendenza. - Selettore di attributi a[title=esempio] { …… } Il selettore di attributi permette di identificare gli elementi in base ai loro attributi. 4.4. PHP 31 __ Università degli studi di Ferrara PHP [Linguaggio PHP] è un linguaggio di scripting interpretato, con licenza Open Source, originariamente concepito per la realizzazione di pagine web dinamiche. Attualmente è utilizzato principalmente per sviluppare applicazioni web lato server, ma può essere usato anche per scrivere script a linea di comando o applicazioni stand-alone con interfaccia grafica. Il nome PHP è l’acronimo per Professional Home Pages. Lo scopo del linguaggio è quello di consentire agli sviluppatori web di realizzare in modo veloce pagine dinamiche. Per pagine dinamiche, in questo contesto, si intendono pagine il cui contenuto viene, almeno in parte, generato nel momento in cui le stesse vengono richieste al web server. Un esempio classico di pagina dinamica è fornito dai motori di ricerca: i risultati che ci vengono restituiti a seguito di una interrogazione non sono pagine web statiche, bensì documenti generati "su misura", sulla base della nostra richiesta. La definizione "ufficiale" permette di chiarire le caratteristiche di questo linguaggio: - Il PHP è un linguaggio di scripting. I programmi scritti in linguaggio PHP, denominati brevemente script, vengono eseguiti tramite un apposito software, l'interprete PHP. Quest'ultimo si occupa di leggere il codice PHP e, interpretandone le istruzioni, esegue le operazioni corrispondenti (ad esempio la lettura di un file o un calcolo aritmetico). Dunque, il PHP è quello che tecnicamente si definisce un linguaggio interpretato, ed in questo esso si differenzia da altri linguaggi di programmazione, come ad esempio C++ e Java, il cui codice sorgente, per poter essere eseguito, deve prima essere compilato. - Il PHP è "HTML-embedded". Questa caratteristica si riferisce al fatto che il codice PHP è immerso nell'HTML; gli script sono inseriti all’interno di tag appositi ( <?php ?> oppure solamente <? ?> ), nelle pagine HTML in cui devono produrre i loro effetti. Il web server riconosce le pagine PHP, distinguendole da quelle "statiche", sulla base dell'estensione, htm o html per le pagine statiche e php3, php o phtml per le pagine php; quando il 32 __ Università degli studi di Ferrara server riconosce una estensione associata a PHP passa il testimone all'interprete, lasciando che sia quest'ultimo ad occuparsene. - Il PHP Opera server-side. cioè opera lato server. Significa che tutta l'elaborazione di uno script avviene sul server, prima che questi spedisca la pagina al browser (il "client"). Di conseguenza, chi accede ad una pagina PHP non ha la possibilità di leggere le istruzioni in essa contenute, essendo state processate lato server, il client vedrà soltanto il risultato dell'elaborazione. La sintassi del linguaggio ricalca in gran parte quella di altri popolari linguaggi di programmazione come C/C++, Java e Perl quindi permette una facile comprensione a chi si appresta per la prima volta all’utilizzo del PHP; offre inoltre una libreria di funzioni molto completa per ogni tipologia di utilizzo, dalla comunicazione con i database di vario tipo a funzioni matematiche, ecc… Attualmente il PHP è molto diffuso grazie al fatto che è Open Source, ed esistono una infinità di script di ogni genere, già pronti da usare per poter creare applicazioni di ogni tipologia in pochissimo tempo, come carrelli elettronici o portali di informazione. 4.5. JavaScript JavaScript [Linguaggio JavaScript] è un linguaggio di scripting orientato agli oggetti comunemente usato nei siti web. Fu originariamente sviluppato da Brendan Eich della Netscape Communications con il nome di Mocha e successivamente di LiveScript, ma in seguito è stato rinominato "JavaScript" ed è stato formalizzato con una sintassi più vicina a quella del linguaggio Java di Sun Microsystems. Netscape vuole arricchire Mosaic corredandolo di nuove funzionalità, anche per questo motivo viene coinvolto Eich a cui viene affidato il compito di realizzare un linguaggio da integrare nel browser Netscape, che potesse rendere le pagine web più interattive e al contempo che fosse semplice da usare. Inoltre Netscape, prima azienda ad ottenere una licenza per l'impiego di Java, aveva bisogno di questo nuovo linguaggio di scripting anche per raggiungere una maggiore interazione con le applet (piccole applicazioni Java). 33 __ Università degli studi di Ferrara Mocha in realtà era solo il nome in codice del progetto a cui Brendan Eich iniziò a lavorare. Ad esso venne riconosciuto il nome ufficiale di LiveScript (Live stava proprio ad enfatizzare il suo obiettivo, quello di rendere più vive le pagine web, in Netscape questo termine viene utilizzato come prefisso per tecnologie diverse). Il linguaggio venne integrato nel browser (in altri termini, il browser sarebbe stato corredato di un componente dedicato all'interpretazione ed esecuzione delle istruzioni contenute nelle pagine web) a partire dalla versione beta di Navigator 2.0. Anche il nome LiveScript ebbe vita breve perchè, proprio per mettere in evidenza la capacità del linguaggio di integrarsi con Java e anche per godere di una parte di quel successo che già circondava quest'ultimo, LiveScript cambia di nuovo nome. In un comunicato congiunto del 4 dicembre 1995, Netscape e Sun Microsystem viene annunciata la nascita di JavaScript. Prima dell'avvento di JavaScript, affinché una pagina web rispondesse ad una interazione con l'utente (un clic su di un bottone di un form ad esempio) necessitava di una comunicazione con il server (il computer remoto al quale sarebbero stati inviati i dati per la loro elaborazione). Un classico esempio é quello del controllo dei dati inseriti dall'utente in un form. Se non si impiega JavaScript, ecco cosa accade: l'utente compila il form, probabilmente dimentica di inserire alcuni dati ritenuti obbligatori oppure li inserisce in modo errato (ad esempio, una data, un indirizzo email, il codice fiscale ecc…). Nel momento in cui l'utente inoltra il form cliccando sull'apposito pulsante di invio, i dati vengono spediti al server e qui sottoposti ad un processo di controllo, se questo controllo non va a buon fine, l'utente si vede recapitare una pagina web contenente il form appena compilato, insieme ad una serie di messaggi di errore, relativi a quelle informazioni non fornite o fornite in modo errato. Tutto ciò comporta dei tempi di attesa legati alla comunicazione tra il client, la macchina dell'utente, e il server. Questi tempi possono essere ridotti se anche la pagina web potesse eseguire quei controlli di correttezza sui dati. Questo è un classico esempio di impiego di JavaScript per migliorare il grado di interazione dell'utente con una pagina web. Il successo di JavaScript é sin da subito evidente e costringe anche Microsoft ad adeguarsi. Vengono integrati due interpreti all'interno di Microsoft Internet Explorer: uno per il linguaggio VBScript e uno per una declinazione 34 __ Università degli studi di Ferrara Microsoft del linguaggio JavaScript, cui viene attribuito il nome Jscript. Anche se il nome é diverso, il linguaggio é talmente simile a JavaScript che é sufficiente adottare alcuni accorgimenti perché, lo stesso codice sia utilizzabile senza modifiche da entrambi gli interpreti (quello della Microsoft e quello della Netscape). Netscape sottopone JavaScript ad ECMA [Ente ECMA]: un ente preposto alla definizione di standard nel settore dell'informatica e delle telecomunicazioni. Al termine di questo processo viene redatto un documento contenente le specifiche del linguaggio di scripting, al quale viene attribuito un nuovo nome (probabilmente per non avvantaggiare alcuna azienda commerciale): ECMAScript. Oggi JavaScript é ritornato ad essere una delle tecnologie più in voga sul web grazie ad AJAX, acronimo di Asynchronous JavaScript And Xml. Si tratta di un modo nuovo di impiegare JavaScript per raggiungere quello stesso scopo che si era dato Brendan Eich quando creò il linguaggio: rendere ancora più reattive le pagine web a seguito dell'interazione con l'utente. Tanto per fare un esempio pratico, il servizio di posta elettronica di Google sfrutta questa tecnologia per assicurare una più rapida risposta in base alle azioni dell'utente. JavaScript è un linguaggio di programmazione orientato a oggetti con una sintassi vagamente basata sul C. Come il C, JavaScript ha il concetto di parole chiave riservate, che rendono quasi impossibile espandere il linguaggio (essendo eseguito direttamente dal sorgente). Come nel C, il linguaggio non ha propri costrutti di input o output; mentre il C si affida alle librerie I/O standard, un interprete JavaScript si basa su un programma ospite in cui è integrato. Ci sono molti programmi ospiti di questo tipo, di cui quelli relativi al Web sono gli esempi più noti. Questi verranno illustrati per primi. JavaScript, se integrato in un browser Web, si collega alle applicazioni tramite interfacce chiamate DOM (Document Object Model) (vedi figura 18), a lato server (web server) e al lato client (browser). Molti siti web usano la tecnologia JavaScript lato client per creare potenti applicazioni web dinamiche. Un uso principale del Javascript basato su web è la scrittura di piccole funzioni integrate nelle pagine HTML, che interagiscono con il DOM del browser per compiere determinate azioni non possibili con il solo HTML statico, come aprire 35 __ Università degli studi di Ferrara una nuova finestra, controllare i valori nei campi di ingresso, cambiare le immagini al passaggio del mouse, ecc. Sfortunatamente, i DOM dei vari browser non sono standardizzati, browser diversi espongono diversi oggetti o metodi allo script, ed è quindi spesso necessario scrivere differenti versioni di una funzione JavaScript per ciascuno dei browser. Al di fuori del Web, interpreti JavaScript sono integrati in diverse applicazioni. Adobe Acrobat e Adobe Reader supportano JavaScript nei file PDF. La piattaforma Mozilla, che è alla base di molti diffusi browser Web, usa JavaScript per implementare l'intefaccia utente e la logica di transazione dei suoi vari prodotti. Gli interpreti JavaScript sono integrati anche nelle applicazioni proprietarie prive di interfacce programmabili via script. Il principale tag del linguaggio Javascript è il tag “script”. Questo tag è un'estensione dell'HTML, in quanto permette la gestione di codice esterno che non è nativo HTML. Un documento può presentare in più parti la definizione del tag SCRIPT. Tramite questo tag si può rappresentare la versione utilizzata ed, a seconda del browser, si avrà l'interpretazione appropriata. Figura 18: JavaScript Document Object Model (DOM) 36 __ Università degli studi di Ferrara 5. Realizzazione della nuova applicazione Nella realizzazione del progetto si mette in pratica tutto quello che è stato ideato in fase di progettazione utilizzando le tecnologie prescelte, creando le implementazioni necessarie alla realizzazione degli schemi, delle interfacce e delle funzionalità viste nei capitoli precedenti. 5.1. Architettura della rete del Comune L’architettura di base va analizzata prima di procedere alla realizzazione, facendo emergere le caratteristiche più importanti, le tecnologie hardware e software in uso, e i possibili limiti di utilizzo; comprendere questo permette di implementare metodi e procedure adeguati che possano sfruttare al meglio l’architettura sottostante. L’architettura della rete intranet del Comune di Cento, visibile in figura 19, è separata da Internet grazie all’ausilio di un Firewall, che protegge la rete interna. Questo, inoltre, delimita anche la DMZ (DeMilitarized Zone) che significa letteralmente zona demilitarizzata e, nel modello dei firewall, indica un’area della rete che non è situata né all’interno, né all’esterno del dominio protetto. Tipicamente, ai sistemi e ai dispositivi che si trovano all’interno della DMZ, viene fornito un certo livello di protezione che però non è considerato pienamente affidabile dal dominio protetto. La DMZ viene normalmente utilizzata per permettere ai server, in essa posizionati, di fornire servizi all'esterno, senza compromettere la sicurezza della rete aziendale interna nel caso una delle macchine sia sottoposta ad un attacco informatico. Nella rete trovano posto sia server Linux che server Windows, e offrono una serie di servizi che permettono alla rete di funzionare correttamente, ad esempio server di posta, server DNS, server proxy, server in cui risiedono i gestionali in uso presso l’ente, server DB, file server e altri ancora. Nel nostro caso, l’applicazione “Fatture On-Line” non ha bisogno di prestazioni elevate, perchè non è previsto un uso intensivo del servizio, o un uso contemporaneo da parte di molti utenti, tale da ottenere un carico consistente, inoltre non utilizza tecnologie particolarmente vincolanti. Questo ha permesso di 37 __ Università degli studi di Ferrara sfruttare nel migliore dei modi le tecnologie presenti nella rete del comune, utilizzando i servizi già offerti come server web Apache con estensione PHP, nel quale risiederà il servizio e MS SQL Server, che gestirà i dati in uso. Figura 19: Schema della rete del Comune di Cento 5.2. Tabelle database Precedentemente abbiamo visto le tabelle già presenti nel sistema e quelle di nuova creazione. In figura 20, 21 e 22 è visibile la struttura delle tabelle pre-esistenti nel database che verranno utilizzate solamente in lettura. Figura 20: Tabella Fornitori 38 __ Università degli studi di Ferrara Figura 21: Tabella Fatture Figura 22: Tabella Dettaglio Come si può notare, i nomi delle colonne sono un po’ criptici, questo deriva dal gestionale in uso, da cui vengono prelevati i dati. All’interno dell’applicazione è stata fatta un’associazione di queste colonne con nomi di più facile comprensione. Tutti i dati delle tabelle passano attraverso delle classi base, che hanno il compito di presentare i dati con nomi più chiari e facilmente gestibili. Le tabelle aggiuntive non hanno chiavi importate, proprio perché quelle già presenti nel sistema vengono svuotate e ripopolate ogni giorno con la conseguente perdita dei dati. L’inserimento, modifica e cancellazione dei dati delle tabelle aggiuntive viene effettuato tramite interfaccia web. Ora vediamo la struttura di quelle che sono state aggiunte: Tabella “PERMESSI”: La tabella “PERMESSI”, visibile in figura 23, contiene i dati per l’accesso al servizio e per la sua fruizione. Come si può notare dalla figura sono presenti i campi “USERNAME” e “PASSWORD” che rappresentano lo username dell’utente e la relativa password. 39 __ Università degli studi di Ferrara Figura 23: Tabella Permessi Nel campo PASSWORD non troviamo la password in chiaro ma la troviamo cifrata con l’algoritmo MD5. In questa tabella sono presenti i permessi, sia per gli utenti di dominio che per i fornitori, essendo gli utenti di dominio autentificati da un sistema esterno al servizio, nel campo PASSWORD troveremo una password fittizia. Nella colonna LAST_ACCESS viene registrato il timestamp dell’ultimo accesso effettuato dall’utente. Nella colonna PERMESSI troviamo l’identificativo numerico, che rappresenta il grado di autorizzazione associato all’utente (da 1 a 100 per gli utenti di dominio, maggiore di 100 per i fornitori), si è scelto di utilizzare un range così elevato di autorizzazioni, nel caso in cui ci sia bisogno di creare nuove tipologie di autorizzazioni. Nella colonna STATO viene salvato lo stato dell’utente, che può essere “ATTIVO” o “SOSPESO”, se l’utente non è stato precedentemente attivato, non è presente nella tabella, quindi non ha permessi. Tabella “FATTURE_S”: La tabella “FATTURE_S”, visibile in figura 24, registra le associazioni tra una fattura e la relativa scansione, caricata tramite un’interfaccia web. Nella colonna RIFERIMENTO, viene salvato il riferimento della fattura e nella colonna PATH viene salvato il nome del file. Figura 24: Tabella Fatture_s 40 __ Università degli studi di Ferrara Tabella “LOG_FATTURE”: La tabella “LOG_FATTURE”, visibile in figura 25, registra gli accessi al servizio sia della parte di dominio che della parte di accesso dei fornitori. Qui è presente un campo ID auto incrementale, che rappresenta l’indice della tabella. Nella colonna USERNAME viene registrato lo username, nella colonna DATA viene registrato il timestamp e nella colonna IP viene registrato l’indirizzo IP di chi ha avuto accesso al servizio. Non ci si è posti il problema di dividere il log di accesso al sito per le due sezioni, perchè facilmente identificabili dallo username, essendo formattati in due modi totalmente differenti. Figura 25: Tabella Log_Fatture Tabella “IMPOSTAZIONI”: La tabella “IMPOSTAZIONI”, visibile in figura 26, consente di registrare le impostazioni globali del servizio, per poterle rendere dinamiche. Attualmente, all’interno del sito, vengono utilizzate impostazioni come il numero di record per pagina, l’e-mail a cui inviare le richieste di informazioni, la posizione effettiva dove salvare le scansioni caricate, ecc…. In questa tabella è presente un campo ID auto incrementale, che rappresenta l’indice della tabella. La colonna IMPOSTAZIONE rappresenta il codice da utilizzare all’interno degli script, come parametro di una funzione, creata appositamente per recuperarne il valore. La colonna VALORE DESCRIZIONE contiene contiene una il valore descrizione dell’impostazione. dell’impostazione, La colonna questo per agevolare la comprensione delle funzionalità e dei valori da poter utilizzare. Le impostazioni vengono caricate e registrate come variabili di sessione al login dell’utente e utilizzate durante la fruizione del servizio. 41 __ Università degli studi di Ferrara Figura 26: Tabella Impostazioni 5.3. Sistema di autenticazione Nella progettazione sono stati definiti i sistemi di autenticazione e in figura 27 è possibile distinguere le due modalità di accesso: Accesso con autorizzazione di Dominio e Accesso con username e password per i Fornitori. L’autenticazione della sezione di dominio utilizza il sistema di protezione di Active Directory, che viene gestito esternamente al servizio. Provando ad accedere alla sezione di dominio appare una maschera, visibile in figura 28, che richiede le informazioni di autenticazione. Se le informazioni sono corrette, si ha acceso alle pagine richieste, altrimenti appare una pagina contenente un messaggio che descrive la non validità delle credenziali inserite. Figura 27: Pagina di acceso al servizio 42 __ Università degli studi di Ferrara La protezione è totalmente trasparente all’applicazione ma, attraverso il server web, vengono rese disponibili delle variabili che possono essere utilizzate all’interno degli script. Una di queste si chiama “REMOTE_USER” e contiene, in seguito all’autenticazione di un utente, il dominio di appartenenza e il nome utente. L’autenticazione della sezione di accesso ai fornitori utilizza la doppia protezione Apache/PHP-database. La protezione Apache è gestita esternamente al servizio. Provando ad accedere alla sezione pubblica appare anche qui una schermata, visibile in figura 29, simile a quella di dominio e con la stessa funzionalità, cioè di verificare la validità delle informazioni inserite, ma con l’unica differenza che, invece di essere validate dal controller di dominio, vengono validate dal server web Apache. Figura 28: Maschera di protezione Dominio Figura 29: Maschera di protezione Apache 43 __ Università degli studi di Ferrara La protezione basata su PHP e database è gestita completamente dal servizio. Superando l’autenticazione Apache viene mostrata una pagina, visibile in figura 30, contenente una maschera per l’inserimento delle credenziali di accesso e altre informazioni. A partire da questa pagina è stato implementato il sistema di autenticazione ideato precedentemente. Riepilogando brevemente, il sistema prevede la generazione di un hash delle informazioni concatenate con la chiave di sessione. L’hash verrà poi inviato al server per una comparazione con i dati presenti nel database, e fornirà un risultato. Lo schema del sistema è visibile in figura 31. L’hash delle informazioni viene effettuato tramite l’utilizzo dell’algoritmo MD5. Lato client vengono effettuate le seguenti operazioni: - Creazione hash dello username concatenato con la chiave di sessione - Creazione hash della password - Creazione hash dell’hash della password concatenato con la chiave di sessione. In seguito le informazioni vengono inviate al server, dove uno script in php provvede a generare le query necessarie, a reperire le informazioni dal database e a verificare l’autenticazione, in seguito genera una pagina di risposta per il client. Figura 30: Pagina di accesso al servizio per i fornitori abilitati 44 __ Università degli studi di Ferrara Figura 31: Schema di criptazione La verifica dell’autorizzazione avviene nel modo seguente (Chiamiamo “H1” l’hash contenente lo username e “H2” l’hash contenente la password): - Ricerca all’interno della tabella dei permessi di corrispondenze di H1 e H2 tramite una query di ricerca creata da uno script - Controllo del risultato della query. Se il risultato contiene un record la validazione da esito positivo e si da l’accesso al servizio. Se il risultato non contiene record la validazione da esito negativo, l’utente viene avvertito che le credenziali sono errate e viene negato l’accesso al servizio. Durante l’implementazione di queste operazioni, ci si è accorti che realizzando la comparazione e validazione all’interno degli script, si ottiene un sistema molto lento, che genera un elevato numero di query al database. Per velocizzare le operazioni di ricerca, è stato implementato a livello di DBMS una funzione che genera l’MD5 di una stringa, così da poter eseguire tutto il metodo con un’unica query al database (vedi figura 32). L’implementazione è stata obbligatoria, vista la mancanza di una funzione adeguata in Microsoft SQL Server. La semplice query di ricerca creata restituisce il numero di occorrenze della coppia di informazioni inviata dal client, effettuando chiamate alla funzione “fn_md5()” ed eseguendo le comparazioni con il suo risultato. Ovviamente il risultato della 45 __ Università degli studi di Ferrara query sarà uguale a ‘0’, se le credenziali dell’utente non sono presenti, oppure sarà uguale a ‘1’ se l’utente è stato autentificato. SELECT COUNT(*) AS num FROM PERMESSI WHERE (dbo.fn_md5(USERNAME + ‘CHIAVE SESSIONE') = 'H1') AND (dbo.fn_md5(PASSWORD + ‘CHIAVE SESSIONE’) = 'H2') Figura 32: Query per l’autenticazione La realizzazione della funzione che genera l’MD5 di una stringa, è stata fatta aggiungendo una procedura estesa, vedi figura 33, che si collega ad una dll, contenente l’implementazione dell’algoritmo MD5. In seguito è stata aggiunta, nel database di interesse, una user defined function, vedi figura 34, che pensa a richiamare la funzione di libreria e a restituirne il risultato. Gli script in PHP, per accedere al database, utilizzano le credenziali di un utente creato appositamente per l’accesso al database delle fatture on-line. A questo utente, sono stati dati i permessi per poter eseguire la suddetta funzione in una query (vedi figura 35), e per l’utilizzo della libreria impostata in precedenza (vedi figura 36). Figura 33: Extended Store Procedure xp_md5 46 __ Università degli studi di Ferrara Figura 34: User defined function fn_md5 Figura 35: Finestra permessi utente fatture per la funzione fn_md5 47 __ Università degli studi di Ferrara Figura 36: Finestra permessi utente fatture per la libreria xp_md5 Durante la progettazione, è stato creato anche un sistema di codifica/decofica delle informazioni sensibili non a conoscenza del server. Il sistema prevede la generazione di una chiave random alfanumerica, che il client utilizzerà per la codifica delle informazioni. Le informazioni codificate verranno poi inviate al server, in cui verranno decodificare e poi elaborate. Lo schema del sistema è visibile in figura 37. Prendendo come riferimento l’esempio del cambio password, si è deciso di effettuare una codifica eseguita nel modo seguente: - Il server genera una chiave random di lunghezza casuale, la scrive in un cookie e la invia al client, nel frattempo viene salvata momentaneamente come variabile di sessione; - Il client codifica la nuova password in Base64, tramite la chiave prelevata dal cookie, in seguito elimina il cookie per non lasciare più tracce della chiave sul client, e invia il tutto al server; - Il server provvede a decodificare la password con la chiave salvata, elimina la chiave dalla sessione e poi procede con la criptazione in MD5 della password e la salva sul database. 48 __ Università degli studi di Ferrara Per effettuare queste operazioni, lato server, sono stati creati due script in PHP: il primo genera una chiave alfanumerica random di lunghezza variabile, il secondo effettua la decodifica delle informazioni ricevute. Lato client, è stato creato uno script in JavaScript che preleva le informazioni inserite, le codifica con la chiave ricevuta, e cancella il cookie. Figura 37: Schema di codifica 5.4. Interfaccia web Nella realizzazione dell’interfaccia sono stati utilizzati programmi, appositamente creati, per il controllo del grado di leggibilità delle pagine web, da parte di utenti con problemi alla vista. Tramite questi è stato possibile accertare l’idoneità dei colori utilizzati e l’adeguatezza del contrasto. Sono inoltre stati inseriti gli Access Key in ogni pagina con una comoda legenda che li riassume. Gli Access Key danno la possibilità di consultare il servizio con più facilità, tramite l’utilizzo della sola tastiera, attraverso la quale si usano combinazioni di tasti per l’accesso rapido a collegamenti, pulsanti e campi da compilare. Nella compilazione delle pagine si è cercato di mantenere il codice pulito, evitando di inserire, direttamente nella pagina, proprietà di stile come colori e formattazioni, e delegando il compito ai fogli di stile ( CSS ) che conterranno tutte le formattazioni grafiche necessarie. Essendo tutte le proprietà di stile in un file esterno, otteniamo che, alla disabilitazione dei CSS ( ad esempio nel caso di visualizzazione in dispositivi con risoluzione molto bassa ), la pagina rimane comprensibile e comunque consultabile. L’utilizzo dei CSS permette di poter cambiare lo stile di tutte le pagine in una volta sola, modificando un singolo file. Questo utilizzo è alquanto utile soprattutto nel caso in cui si necessita di stampare la pagina, poiché durante le fasi che precedono la stampa, il browser 49 __ Università degli studi di Ferrara carica ( se dichiarato ) un foglio di stile, creato appositamente per formattare i contenuti, nascondendo tutto ciò che è superfluo, e modificando le eventuali colorazioni e decorazioni. Al completamento, le pagine sono state verificate tramite il servizio web del W3C raggiungibile al seguente indirizzo: http://validator.w3.org/, grazie al quale è stata confermata la qualità e la correttezza delle pagine html generate dagli script PHP. 5.5. Struttura script Per il corretto funzionamento e sviluppo di un’applicazione web, si rivela di grande utilità creare file che si prendano carico di gestire uno o più servizi principali utilizzati da tutta l’applicazione. Ne è un esempio un file “database.php” che, al suo interno, contiene tutte le funzioni necessarie per effettuare le operazioni principali con il database, come l’apertura o la chiusura di una connessione, l’esecuzione di una query o la restituzione di un singolo record di un resultset. In questo progetto sono stati previsti alcuni di questi file come quello precedentemente descritto. Segue la descrizione di altri file ideati nell’applicazione: - Il file “function.php” contiene tutte le funzioni per la consultazione avanzata del database, ed eventualmente qualche funzione di utilità come codifica o decofica. Esempio di queste funzioni sono la restituzione di una classe o un’array di classi contenente il risultato di una query avanzata di ricerca, oppure funzioni per il controllo delle autorizzazioni di un determinato utente. - Il file “varSessione.php” pensa alla registrazione, cancellazione e aggiornamento delle variabili di sessione. - Il file “debug.php” da la possibilità, previa abilitazione tramite la sezione di amministrazione, di visualizzare tutte le variabili utilizzate per agevolare le operazioni di sviluppo e correzione errori. - Il file “menusx.php” visualizza il menù laterale dinamico tenendo conto delle autorizzazioni dell’utente connesso. 50 __ Università degli studi di Ferrara - Il file “top.php” visualizza tutte le informazioni presenti nell’intestazione. - Il file “acccesskey.php” si preoccupa di visualizzare correttamente la legenda delle access key. - Il file “classes.php” si preoccupa al suo interno di caricare le classi. - Il file “protect.php”, che è il più importante, permette di proteggere tutte le pagine e di mantenere lo stato di connessione dell’utente. Questi file sono inclusi in quasi tutte le restanti pagine del servizio, inoltre ogni sezione (Dominio, Amministrazione, Fornitori) ha una versione propria per differenziare le funzionalità, pur mantenendo la stessa struttura. Ad esempio nella sezione di Amministrazione vi sono funzioni che non sono presenti nelle altre sezioni, come la modifica dei permessi. 5.6. Ricerca e visualizzazione Nella vecchia applicazione, le funzionalità di ricerca e visualizzazione dei dati non erano sufficienti. Ci si è posti subito il problema di migliorare e ampliare le modalità di ricerca. Precedentemente era possibile cercare le fatture singolarmente per anno, per numero documento o per tipo di documento. Ora la ricerca è stata ampliata, ed è possibile ricercare per anno, codice fornitore, numero documento, riferimento fattura e stato fattura contemporaneamente, per ottenere una ricerca raffinata, vedi figura 38. Dopo aver effettuato una ricerca è anche possibile, tramite un collegamento visibile sopra i risultati, modificarla subito dopo averla effettuata, vedi figura 39. E’ stata aggiunta una nuova funzionalità: un modulo per la ricerca dei fornitori, così da poterne visualizzare le fatture, vedi figura 40. Anche in questo è possibile ricercare per ragione sociale, codice fiscale e partita iva contemporaneamente. Per la visualizzazione delle fatture, sono stati mantenuti quasi tutti i contenuti presenti anche nel vecchio servizio e altri sono stati combinati, vedi figura 41. E’ stata eliminata la colonna TIPO e accorpate le colonne LIQUIDATA e PAGATA in una unica, che, insieme alla legenda sulla sinistra, permettono una più facile identificazione dello stato delle fatture. 51 __ Università degli studi di Ferrara Figura 38: Modulo di ricerca fatture Figura 39: Opzioni di ricerca Figura 40: Modulo di ricerca fornitore 52 __ Università degli studi di Ferrara In precedenza, la visualizzazione dei fornitori era possibile solo in sede di amministrazione, ora si possono visualizzare dettagli minimi dei fornitori anche nella normale sezione di ricerca facilitando la ricerca delle fatture, vedi figura 42. Una visualizzazione quasi identica, vedi figura 43, è presente in amministrazione con la differenza che è visibile lo stato del fornitore. Da questa, successivamente, è possibile visualizzare i dettagli completi dei fornitori con le operazioni di amministrazione annesse, vedi figura 44. In tutte le interfacce che visualizzano un elenco di dati, c’è la possibilità di ordinare i risultati rispetto ad una qualsiasi delle colonne, e di poter scorrere le pagine comodamente, tramite una apposita sezione sottostante l’elenco dei dati, visibile in figura 45. Un ulteriore facilitazione è stata creata nelle tabelle, offrendo la possibilità di interazione, agendo su un punto qualsiasi della riga, senza dover agire limitatamente solo sui link. Figura 41: Risultati ricerca fatture 53 __ Università degli studi di Ferrara Figura 42: Risultati ricerca fornitori Figura 43: Risultati ricerca fornitori in amministrazione 54 __ Università degli studi di Ferrara Figura 44: Dettagli fornitore non attivo Figura 45: Link per la visualizzazione delle pagine 5.7. Accessibilità e stampa Come già detto, l’accessibilità è stata ottenuta con un corretto utilizzo dei fogli di stile (CSS). Nell’applicazione sono stati creati e inseriti all’interno delle pagine due fogli di stile, il primo per la normale visualizzazione, e il secondo per la stampa. Di seguito è riportata la sintassi utilizzata per l’inserimento dei CSS: <link href="../folStyle.css" rel="stylesheet" type="text/css" media="screen" /> <link href="../folStylePrint.css" rel="stylesheet" type="text/css" media="print" /> L’attributo “media” permette di specificare al browser quale foglio di stile caricare per la tipologia di visualizzazione scelta. Nel nostro caso sono stati utilizzati due 55 __ Università degli studi di Ferrara valori: “screen” e “print”. Il valore “screen” indica la modalità di visualizzazione classica, invece il valore “print” indica la modalità di visualizzazione di stampa. Attivando la stampa, o più semplicemente l’anteprima di stampa (vedi figura 46), verrà creata una visualizzazione della pagina con il foglio di stile “folStylePrint.css”, che ha il compito di formattare i contenuti in un formato stampabile, nascondendo le parti inutili alla stampa (come menù, sottolineature dei collegamenti, colori superflui, zone utili solamente alla navigazione, ecc…) e modificando, se necessario, la formattazione dei contenuti rimanenti. Figura 46: Anteprima di stampa fatture 56 __ 5.8. Università degli studi di Ferrara Amministrazione utenti e fornitori La sezione di amministrazione è stata migliorata e ampliata con nuove funzionalità. Tra queste è presente una gestione completa degli utenti di dominio e dei fornitori. In figura 47 è possibile vedere l’interfaccia di amministrazione degli utenti di dominio. Qui è possibile aggiungere un nuovo utente abbinandogli i permessi più appropriati. Il nome utente inserito, deve essere uguale ad un utente di dominio, in caso contrario non avrebbe nessun effetto. Di seguito al form per l’inserimento, è presente una tabella contenente tutti gli utenti già presenti, le relative autorizzazioni, e la data di ultimo accesso. In questa tabella è possibile, tramite il link Aggiorna, di aggiornare i permessi di uno specifico utente, e tramite il link Elimina, di eliminare un utente dalla lista. Si ricorda inoltre che chi ha un livello di autorizzazione inferiore al livello massimo, che in questo caso è quello di “SUPER_AMMINISTRATORE”, può modificare i permessi fino al proprio livello e non oltre. Ad esempio, un utente con livello “AMMINISTRATORE” può dare ad un qualsiasi utente (modificandone o creandone uno) al massimo i permessi di “AMMINISTRATORE” e non di “SUPER_AMMINISTRATORE”. Figura 47: Amministrazione utenti di dominio 57 __ Università degli studi di Ferrara La sezione di amministrazione permette, inoltre, di amministrare l’accesso dei fornitori. Per fare ciò si può utilizzare il modulo di ricerca per cercare un fornitore, poi visualizzare i dettagli del fornitore scelto, e infine scegliere, tra le opzioni disponibili, l’azione da effettuare. Le operazioni possibili sono: “Attivazione”, “Sospensione”, “Riattivazione”, “Generazione nuova password” e “Disattivazione”. L’operazione di “Attivazione” permette di abilitare l’accesso, e genera una password alfanumerica di 8 caratteri mostrata a video, che verrà in seguito comunicata al fornitore per il primo accesso. La “Sospensione” sospende l’accesso fino alla riattivazione. La “Riattivazione” riattiva un fornitore precedentemente sospeso. L’opzione “Generazione nuova password”, permette di generare una nuova password, che verrà obbligatoriamente cambiata al successivo accesso, nel caso in cui un fornitore se la sia dimenticata. La “Disattivazione” elimina tutte le informazioni di accesso di un fornitore, utile nel caso in cui il comune non abbia più rapporti con un determinato fornitore. Un esempio è visibile in figura 48. Sotto le informazioni del fornitore, sono disponibili le azioni possibili. Nella figura è possibile sospendere, disattivare e generare una nuova password. Figura 48: Dettagli fornitore attivo 58 __ 5.9. Università degli studi di Ferrara Statistiche La capacità di registrare gli accessi è considerata necessaria e spesso obbligatoria per legge. E’ stata creata una sezione per le statistiche del servizio, che permette di tenere sotto controllo gli accessi e altre informazioni aggiuntive. In figura 49 è possibile vedere una schermata delle statistiche generali. Qui sono visibili alcuni dettagli: un resoconto numerico degli accessi totali e degli accessi per singola categoria, il numero dei fornitori attivi, il numero di quelli sospesi, il numero totale delle scansioni caricate. Un’altra funzionalità è quella di poter visualizzare il numero degli accessi effettuati per ogni utente (vedi figura 50). Figura 49: Statistiche generali Figura 50: Statistiche accessi per utente 59 __ Università degli studi di Ferrara Infine, è presente la possibilità di visualizzare l’elenco di tutti gli accessi registrati (vedi figura 51). Qui sono visibili lo username dell’utente che ha avuto accesso, il suo indirizzo IP e il timestamp. In questo servizio non c’è stato bisogno di generare statistiche sofisticate, avendo un’importanza minore rispetto ad altri servizi. Cosa ben differente se si parla di servizi come l’anagrafe che ha un impatto superiore in ambito di privacy, nel quale potrebbe esserci il bisogno di una statistica più completa che, ad esempio, possa mantenere la traccia degli spostamenti o delle azioni effettuate da un utente. Nell’eventualità che qualche malintenzionato riesca a visualizzare dati riservati o addirittura a comprometterli, risultano utili, statistiche più complete che possano fornire informazioni sulla possibile provenienza di questa persona, sui dati che sono stati osservati o modificati, e su come è stato possibile l’accesso a sezioni non autorizzate. Figura 51: Elenco di tutti gli accessi 60 __ Università degli studi di Ferrara 5.10. Altre Funzionalità Richiesta informazioni fattura: Mentre un fornitore controlla le proprie fatture, può notare qualcosa che non và nei dati, oppure qualcosa di poco chiaro. E’ quindi necessario fornire uno strumento che permetta di contattare il Comune per informazioni o chiarimenti. Sotto i dettagli di ogni fattura (vedi figura 52) è presente un collegamento che porta alla schermata visibile in figura 53, la quale permette di inoltrare una richiesta di informazioni. Nella richiesta vengono automaticamente incluse le informazioni della fattura e lo username di chi è collegato al servizio, inoltre dà la possibilità di inserire altre informazioni come nome, cognome, indirizzo, e-mail (campo obbligatorio), la tipologia di richiesta, se si desidera una risposta, e il testo della richiesta. Il tutto viene inviato ad un indirizzo e-mail impostato in amministrazione. Figura 52: Collegamento richiesta informazioni in dettaglio fattura Figura 53: Modulo richiesta informazioni fattura 61 __ Università degli studi di Ferrara Aggiunta e visualizzazione scansioni: Volendo offrire un servizio completo, è stata offerta ai fornitori la possibilità di fare il download delle scansioni originali delle fatture. Sotto i dettagli di ogni fattura, se è stata caricata una scansione, è presente un collegamento che permette di scaricare la scansione sul proprio computer, o di aprirla direttamente con programmi come Acrobat Reader (se la scansione è in formato PDF) oppure con un visualizzatore di immagini (se la scansione è una semplice immagine). La gestione delle scansioni è stata ideata accettando qualsiasi tipologia di file, lasciando al client il compito di aprirli. L’amministrazione delle scansioni è possibile, nella sezione di dominio, solo a chi ha permessi superiori o pari al livello AMMINISTRATORE. Nella zona sottostante i dettagli delle fatture, sono presenti, se si è autorizzati, le opzioni relative alle scansioni. Sono visibili le opzioni “Visualizza scansione” ed “Elimina scansione”, se è già stata caricata una scansione, altrimenti verrà visualizzato un campo in cui è possibile selezionare sul proprio PC il file da caricare, e un link che permette di eseguire il caricamento. In figura 54 è visibile un esempio in cui non è presente nessuna scansione. Figura 54: Opzione di aggiunta scansione fattura 62 __ Università degli studi di Ferrara Impostazioni generali del servizio: Nella sezione di amministrazione, è presente un pannello di gestione delle impostazioni generali del servizio, il quale è accessibile solamente a chi ha un livello pari a SUPER_AMMINISTRATORE. Questo pannello visualizza le informazioni delle impostazioni registrate, e ne consente la modifica dei valori. Le informazioni visualizzate sono: il codice dell’impostazione, il valore e una descrizione (utilità e utilizzo). In figura 55 è visibile una schermata contenente alcune impostazioni inserite in fase di programmazione: - L’impostazione ACCESSO_DOMINIO, permette di attivare o disattivare l’accesso a chiunque sia autentificato dal dominio. Se l’opzione è disattivata, possono accedere solo gli utenti che hanno un livello di autorizzazione diverso da DOMINIO, cioè registrato nei permessi utente; - L’impostazione DEBUG_VARIABILI_DOMINIO, permette di abilitare o disabilitare, nella sezione di dominio, la visualizzazione di tutte le variabili utilizzate, questo permette di facilitare la risoluzione dei problemi di programmazione della sezione di dominio; Figura 55: Schermata impostazioni generali del servizio 63 __ - Università degli studi di Ferrara L’impostazione DEBUG_VARIABILI_FORNITORI, permette di abilitare o disabilitare, nella sezione fornitori, la visualizzazione di tutte le variabili utilizzate, questo permette di facilitare la risoluzione dei problemi di programmazione della sezione fornitori; - L’impostazione EMAIL_SUPPORTO, permette di settare l’indirizzo e-mail a cui verranno recapitate le richieste di informazioni; - L’impostazione NUM_REC_PER_PAGINA, permette di settare, nelle pagine con molti dati, quanti record visualizzare per pagina; - L’impostazione PATH_SCANSIONI, permette di impostare il percorso assoluto in cui verranno salvate le scansioni delle fatture. E’ possibile, se nascono richieste, aggiungere nuove impostazioni manualmente sul database e in seguito richiamarle all’interno degli script, tramite un’apposita funzione. In figura 56 è possibile vedere una porzione di codice che, tramite la funzione getImpostazione(), carica il valore delle impostazioni e le registra nella sessione. session_register("num_record_per_pagina"); session_register("email_supporto"); session_register("path_scansioni"); session_register("accesso_dominio"); session_register("debug_variabili_dominio"); $_SESSION["num_record_per_pagina"] = getImpostazione($connessione,"NUM_RECORD_PER_PAGINA"); $_SESSION["email_supporto"] = getImpostazione($connessione,"EMAIL_SUPPORTO"); $_SESSION["path_scansioni"] = getImpostazione($connessione,"PATH_SCANSIONI"); $_SESSION["accesso_dominio"] = getImpostazione($connessione,"ACCESSO_DOMINIO"); $_SESSION["debug_variabili_dominio"] = getImpostazione($connessione,"DEBUG_VARIABILI_DOMINIO"); Figura 56: Codice per il caricamento delle impostazioni 64 __ Università degli studi di Ferrara 5.11. Test del servizio L’anticipata conclusione del progetto ha portato ad una fase di analisi e test più completa, permettendo di apportare modifiche e aggiungere parti che avevano un’importanza minore. Inizialmente, era stato richiesto un servizio con un sistema di protezione minimo e con solamente due livelli di autorizzazione: “Dominio” e “Amministratore”. Analizzando il progetto, sia da parte dei dipendenti del comune che da parte mia, sono state trovate modifiche da apportare ad alcuni particolari e trovate nuove funzionalità da aggiungere. A seguito di questa analisi sono state aggiunte o modificate le seguenti funzionalità: - Aggiunto un modulo di ricerca dei fornitori nella parte di dominio, finalizzata alla visualizzazione delle fatture del fornitore ricercato; - Creato un sistema di protezione più complesso (nuovo sistema di autenticazione e codifica); - Creati nuovi livelli di permessi. Sono stati aggiunti nuovi livelli (UTENTE, SUPER_AMMINISTRATORE) e modificati i permessi per il livello AMMINISTRATORE; - Ampliata e aggiornata la gestione degli utenti di dominio. Ora è possibile gestire i nuovi livelli di autorizzazione; - Aggiunto un pannello di amministrazione per le impostazioni generali del servizio; - Aggiunta la capacità di abilitare o disabilitare l’accesso a tutti i dipendenti del comune che hanno permessi uguali a DOMINIO; - Modificate e aggiunte scritte nell’intestazione per rendere più chiare le informazioni di accesso; - Aggiunta la possibilità di ricercare le fatture in base allo stato; - Aggiunto un pannello completo per la visualizzazione delle statistiche. Un’ulteriore fase di test è stata superata con successo, e non sono stati rilevati errori o malfunzionamenti del servizio. 65 __ Università degli studi di Ferrara 6. Conclusioni Questa tesi è il frutto di un progetto svolto nella cornice di un tirocinio effettuato presso il Comune di Cento, in cui è stata creata un’applicazione Web, chiamata “Fatture On-Line”, per la consultazione delle fatture e dei fornitori. Si tratta di un semplice servizio che permette ai fornitori, previa abilitazione, di consultare le proprie fatture, e ai dipendenti del comune di visualizzare i dettagli delle fatture e dei fornitori. La nuova applicazione descritta in questa tesi sostituisce il vecchio servizio “Fatture On-Line” che soffriva di limitazioni e non rispettava le normative vigenti di accessibilità. Durante le varie fasi in cui è stata creata la nuova applicazione, sono emerse problematiche di diverso tipo che sono state tutte risolte; di questo è interessante osservare come una buona progettazione possa rendere le cose più semplici rispetto a problemi imprevisti, e dare la possibilità di affrontare casi difficili con meno difficoltà e perdita di tempo. Ne è stato un esempio la creazione del sistema di autenticazione, nato in principio in un modo e poi stravolto. L’architettura di base del codice ha permesso di sostituire il vecchio blocco di autenticazione con il nuovo in modo facile e veloce. Un domani, se ce ne fosse l’esigenza, si potrebbe migliorare l’uso dei permessi, ad esempio dando la possibilità di eliminare un utente solo al SUPER_AMMINISTRATORE, attualmente ogni utente, con accesso all’amministrazione, può eliminare tutti gli utenti con privilegi pari o inferiori al proprio. Potrebbe essere utile offrire una statistica più completa che registri tutti i movimenti e le azioni di un utente, o addirittura un sistema che invii una e-mail di segnalazione, se vengono avvertite delle intrusioni o delle forzature del sistema. Questo progetto ha permesso di affrontare una moltitudine di aspetti non affrontati o affrontati in parte in ambito universitario, come la programmazione in php, descritta in parte e con nozioni molto basilari, come l’approfondimento della struttura e configurazione di Microsoft SQL Server. Ciò nonostante, l’istruzione e la cultura offerta dall’Università ha permesso di apprendere e approfondire velocemente i sistemi, le piattaforme di sviluppo e tutto quello che non era conosciuto in precedenza. 66 __ Università degli studi di Ferrara Il tirocinio mi ha fornito un’esperienza molto ricca riguardante sia aspetti formativi che collaborativi. Ho avuto modo di approfondire conoscenze e di apprenderne di nuove, che mi hanno arricchito, in particolar modo ho dato particolare importanza ad argomenti come l’accessibilità e la sicurezza. Approfondire l’accessibilità mi ha permesso di comprendere maggiormente la costruzione di interfacce, ma soprattutto capire come l’utilizzo di queste possa essere difficoltoso da parte di utenti disabili. Studiare a fondo la sicurezza mi ha consentito di acquisire conoscenze ulteriori, studiare metodi implementativi e dare maggiore importanza alla protezione, a partire dalle basi di un’applicazione. Ho inoltre avuto modo di poter collaborare con un gruppo di persone competenti, che mi hanno accolto e inserito in un ambiente di lavoro maturo, e mi hanno offerto pieno supporto e disponibilità, con le quali ho potuto lavorare con serenità e sintonia. 7. Riferimenti [CSS 2.1] http://www.w3.org/TR/CSS21/ [Ente ECMA] http://www.ecma-international.org/ [HTML 4.01] http://www.w3.org/TR/html401/ [Linguaggio JavaScript] http://developer.mozilla.org/en/docs/JavaScript [Linguaggio PHP] www.php.net [Linguaggio SQL] http://www.wiscorp.com/SQLStandards.html [Microsoft Active Directory] http://www.microsoft.com/windowsserver2003/ technologies/directory/activedirectory/ [Microsoft SQL Server] http://www.microsoft.com/italy/sql/ [Server Web Apache] www.apache.org [Protocollo SSL] http://wp.netscape.com/eng/ssl3/ [WAI] www.w3c.org/WAI/ [W3C] www.w3c.org 67 __ Università degli studi di Ferrara 8. Indice delle figure Figura 1: Pagina principale di accesso al servizio.................................................7 Figura 2: Pagina di ricerca ....................................................................................8 Figura 3: Risultati ricerca.......................................................................................8 Figura 4: Schema generale del servizio ..............................................................10 Figura 5: Schema di cifratura ..............................................................................12 Figura 6: Schema di codifica ...............................................................................12 Figura 7: Schema procedura Batch.....................................................................14 Figura 8: Nuove tabelle per il sistema .................................................................15 Figura 9: Schema struttura del filesystem principale...........................................16 Figura 10: Schema struttura dettagliata del filesystem .......................................16 Figura 11: Esempio di interfaccia del portale del comune...................................17 Figura 12: Esempio di interfaccia del servizio .....................................................17 Figura 14: Intestazione servizio, accesso di dominio ..........................................19 Figura 15: Layout pagine servizio .......................................................................19 Figura 16: Footer con Access Key ......................................................................20 Figura 17: Dati sulla diffusione dei principali server web ....................................27 Figura 18: JavaScript Document Object Model (DOM) .......................................36 Figura 19: Schema della rete del Comune di Cento ...........................................38 Figura 20: Tabella Fornitori .................................................................................38 Figura 21: Tabella Fatture ...................................................................................39 Figura 22: Tabella Dettaglio ................................................................................39 Figura 23: Tabella Permessi ...............................................................................40 Figura 24: Tabella Fatture_s ...............................................................................40 Figura 25: Tabella Log_Fatture ...........................................................................41 Figura 26: Tabella Impostazioni ..........................................................................42 Figura 27: Pagina di acceso al servizio...............................................................42 Figura 28: Maschera di protezione Dominio........................................................43 Figura 29: Maschera di protezione Apache.........................................................43 Figura 30: Pagina di accesso al servizio per i fornitori abilitati............................44 68 __ Università degli studi di Ferrara Figura 31: Schema di criptazione........................................................................45 Figura 32: Query per l’autenticazione .................................................................46 Figura 33: Extended Store Procedure xp_md5 ...................................................46 Figura 34: User defined function fn_md5 ............................................................47 Figura 35: Finestra permessi utente fatture per la funzione fn_md5...................47 Figura 36: Finestra permessi utente fatture per la libreria xp_md5.....................48 Figura 37: Schema di codifica .............................................................................49 Figura 38: Modulo di ricerca fatture.....................................................................52 Figura 39: Opzioni di ricerca ...............................................................................52 Figura 40: Modulo di ricerca fornitore..................................................................52 Figura 41: Risultati ricerca fatture .......................................................................53 Figura 42: Risultati ricerca fornitori......................................................................54 Figura 43: Risultati ricerca fornitori in amministrazione.......................................54 Figura 44: Dettagli fornitore non attivo ................................................................55 Figura 45: Link per la visualizzazione delle pagine .............................................55 Figura 46: Anteprima di stampa fatture ...............................................................56 Figura 47: Amministrazione utenti di dominio .....................................................57 Figura 48: Dettagli fornitore attivo .......................................................................58 Figura 49: Statistiche generali.............................................................................59 Figura 50: Statistiche accessi per utente ............................................................59 Figura 51: Elenco di tutti gli accessi ....................................................................60 Figura 52: Collegamento richiesta informazioni in dettaglio fattura ....................61 Figura 53: Modulo richiesta informazioni fattura .................................................61 Figura 54: Opzione di aggiunta scansione fattura...............................................62 Figura 55: Schermata impostazioni generali del servizio ....................................63 Figura 56: Codice per il caricamento delle impostazioni .....................................64 69