Laboratorio di Sistemi Informativi

L'applicazione Mancolista

A.A. 2010/2011

docente: Gianluca Amato


Vai all'home page del corso

Download

[Download]. Versione 1.01 del 2011-05-12.

Specifiche funzionali

Mancolista è l'applicazione di esempio sviluppata passo passo durante il corso di Laboratorio di Sistemi Informativi. Potete trovare la descrizione originale dell'applicazione nella lezione La mancolista di Paolo. Rispetto a questa descrizione, sono state fatte alcune modifiche:

Rispetto a quanto visto a lezione, abbiamo spostato le funzionalità di prenotazione all'interno della pagina di dettagli, come era previsto inizialmente dalle specifiche, e non nella pagina dell'elenco oggetti.

Descrizione contenuto file

L'archivio compresso che scaricate contiene il file mancolista.sql, che è lo script SQL necessario a creare e popolare il database (leggermente diverso da quello usato durante il corso, dovuta all'eliminazione del campo confermato della tabella oggetti), e una serie di pagine PHP che implementano l'applicazione. Il file config.inc.php contiene la definizione dei parametri di connessione (CONNECTION, USERNAME, PASSWORD) visti a lezione e del parametro DEBUG. Quest'ultimo è da impostare a true durante lo sviluppo dell'applicazione, quando si vogliono visualizzare i messaggi di errore, e a false durante l'utilizzo, quando non si vogliono visualizzare. È presenta anche un file Changelog che contiene l'elenco delle modifiche apportate all'applicazione nel corso della sua storia.

Note sull'implementazione

Ogni script PHP implementa una funzionalità ben precisa. Le funzionalità che richiedono più fasi (cancellazione, modifica, inserimento) sono implementate sempre con un'unico script, diviso in più parti. Tuttgli gli script includono all'inizio il file common.inc.php (l'uso del .inc serve a far capire che si tratta di un file da includere in altri, ma per evitare problemi di esposizione delle credenziali di accesso, comunque il file termina con l'estensione .php). Il file comprendela definizione di alcune funzioni di utilità generale, tra cui

A parte la definizione delle funzioni, il file common.inc.php si occupa anche di:

Tutto il resto dovrebbe essere comprensibile guardando il codice sorgente PHP delle varie pagine. La modifica più sostanziale rispetto a ciò che abbiamo visto a lezione è che le pagine di inserimento oggetti e modifica oggetti (così come inserimento utenti e modifica utenti, che però non abbiamo visto a lezione) sono fuse in un unico script modifica_oggetti.php. Infatti le due funzionalità condividono gran parte del codice, e duplicarlo sarebbe inutile e dannoso. Per distinguere il caso in cui si sta effettuando un inserimento da quello in cui si sta effettuando una modifica, si guarda il parametro $_GET['id']: se esiste, contiene l'id dell'oggetto da modificare, altrimenti stiamo inserendo un nuovo elemento. Ovviamente bisogna stare attenti a non perdere il parametro "per strada" quando si passa dalla form di richiesta dati alla fase di manipolazione del database e viceversa.

Note su sicurezza e concorrenza

L'applicazione dovrebbe essere resistente ad attacchi di tipo Cross Site Scripting e SQL Injection. Non siamo stati invece molto previdenti sul fronte degli attacchi Buffer Overflow: tronchiamo gli input solo nelle procedure di modifica/inserimento di oggetti e utenti, per il resto confidiamo nella corretta implementazione di PHP e MySQL. Per ciò che riguarda la validazione dei dati, usiamo un approccio molto permissivo: controlliamo solo alcune cose fondamentali (ad esempio che ogni oggetto abbia un nome non vuoto), ma per il resto accettiamo di tutto. Non proviamo a riconoscere un tentativo di attacco ma, quando qualcosa non va bene (ad esempio uno script viene chiamato senza i parametri richiesti) semplicemente redirigiamo l'applicazione ad una pagina opportuna.

Per quanto riguarda la concorrenza, gestiamo correttamente le operazioni che riguardano prenotazioni e messaggi, ma ignoriamo il problema degli utenti: se un utente si loggato e nel frattempo un amministratore lo cancella, la cosa non viene riconosciuta, e il database si può ritrovare in uno stato inconsistente. Magari in una prossima versione!

Vai all'home page del corso

Valid HTML 4.01 Transitional Valid CSS!