DOC - Sicurezza su reti 2

annuncio pubblicitario
COMMESSA – G2ISP
TITOLO
Informatica Granata
DESCRIZIONE SINTETICA
Realizzazione del sito di e-commerce Informatica-granata.com per la vendita on-line di PC ed
hardware convenzionato con "UfficialePagatore"
GRUPPI
2 e 3 (entrambe ISP)
DESCRIZIONE
Il sito comprende alcune pagine esplicative, un catalogo navigabile e, per gli utenti registrati, il
listino prezzi, il carrello per la spesa e la possibilita' di acquisto on-line, tramite il sistema
implementato da "UfficialePagatore.com".
Per gli utenti che hanno effettuato almeno 10 acquisti e' previsto uno sconto del 20% sul prezzo di
listino.
SPECIFICHE
Si richiede l'implementazione del sito Informatica Granata e più precisamente:
1. Gestione anagrafica clienti
2. Gestione catalogo e listino (con apposito pannello amministratori)
3. Gestione utenti amministratori
4. Carrello della spesa
5. Interfaccia col sistema di pagamento U.P.
6. Si richiede la registrazione di almeno 30 utenti ed un catalogo di almeno 20 prodotti di
diversa prezzatura
SOLUZIONE PROPOSTA
La soluzione proposta segue lo schema previsto dal protocollo definito nello specifico documento;
il sito web di Informatica Granata utilizza il web server Apache ed il DBMS MySQL, mentre dal
punto di vista della sicurezza si ci è affidati ad OpenSSL.
Inizialmente la soluzione proposta prevedeva una suddivisione dei vari livelli dell’applicazione tra i
server dei gruppi 2 e 3; secondo tale decisione i livelli di presentazione e di logica dell’applicazione
avrebbero risieduto sulla macchina del gruppo 3 mentre il database sarebbe stato creato e mantenuto
sul nostro server, il server del gruppo 2.
Nella sezione Difficoltà Incontrate verranno presentati anche i motivi che hanno condotto alla
revisione delle scelte iniziali; nonostante i cambiamenti effettuati le scelte fondamentali e gli
approcci per la realizzazione dell’applicazione sono rimasti immutati.
In generale si è scelto di creare un sito web dinamico mediante PHP al fine di consentire
l’interazione con gli utenti/clienti del negozio e con l’applicazione preposta al pagamento degli
ordini eseguiti in maniera sicura.
L’interazione con l’utente avviene mediante form da compilare con l’indicazione di dati ed input
specifici per la richiesta di servizi; la soluzione proposta viene descritta in dettaglio nella
documentazione relativa e rispecchia ciò che è stato definito nel protocollo.
Presentiamo ora nel dettaglio il lavoro compiuto dal nostro gruppo.
LAVORO COMPIUTO
Il nostro gruppo si è occupato della creazione e della gestione del database “SHOP” fondamentale
per l’attività del sito Informatica Granata; ciò vuol dire che oltre alla definizione delle associazioni
e delle tabelle è stata fornita una serie di funzioni che i programmatori dell’applicazione hanno
utilizzato per implementare le funzionalità del Sistema.
Gli strumenti utilizzati per lo svolgimento del proprio incarico sono stati MYSQL e PHP.
Mysql 5.0.37 è il Database Management System installato in fase di setup della simulazione sulla
nostra macchina e scelto per i motivi indicati nel documento di riepilogo di tale fase.
Lo stesso vale per PHP, linguaggio di script server-side, scelto in quanto installato in fase di setup
ed utilizzato dal Gruppo 3 per l’implementazione delle funzionalità del sito Informatica Granata.
L’attività si è concretizzata nella creazione del succitato database e di un oggetto PHP,
MyDBManager caratterizzato da tutti i metodi necessari ai programmatori del Gruppo 3 per il loro
lavoro; in tal modo il nostro compito è stato quello di creare la struttura necessaria alla
memorizzazione dei dati e di fornire funzioni predefinite d’accesso a questi.
La scelta della creazione di quest’interfaccia è servita a separare in maniera molto netta la logica di
applicazione da quella di memorizzazione dei dati.
All’interno del gruppo, o meglio della coppia, l’organizzazione del lavoro è stata alquanto
orizzontale con una sommaria suddivisione dello stesso come segue:
 Creazione Database I. Barone
 Interazione Database D. Laurino
Come già detto, la separazione dei compiti è sommaria e non netta in quanto i due tipi di attività
hanno richiesto una costante interazione, una volta determinato in coppia il modello ER da
utilizzare.
L’interazione non ha banalmente interessato solo i componenti del gruppo ma ha coinvolto anche,
ed in maniera molto forte, i membri del Gruppo 3 A. Bruno, F. Di Perna e F. Granato.
La definizione del modello ER è derivata dal processo di raccolta dei requisiti; tale raccolta si è
basata sulla descrizione della commessa e soprattutto sulle richieste ed esigenze del gruppo
collaboratore.
Allo stesso modo le funzioni da fornire al Gruppo 3 sono state realizzate, e modificate in corso
d’opera, sulla base di quanto lo stesso gruppo ha ritenuto necessario al fine della realizzazione delle
funzionalità.
Il Database SHOP si compone di 5 tabelle:
1. Customers
2. Orders
: utilizzata per memorizzare le informazioni relative ai clienti di Informatica
Granata come Codice Fiscale, Nominativo, Indirizzo, Uname, Password e
l’indicazione dei privilegi di Amministratore
: contiene i dati caratteristici di ogni ordine effettuato, quali Codice, Cliente
3. Products
4. Prod_Ord
5. Tokens
che effettua l’ordine, il Totale, la Data in cui esso è stato effettuato e se esso
è stato confermato o è ancora sospeso
: sono presenti tutte le informazioni relative ai prodotti del negozio, il Codice,
il Nome, la Descrizione, il Prezzo, la Quantità presente in magazzino ed il
path del file che contiene la foto dell’oggetto
: è la tabella che nasce dall’associazione esistente tra il prodotto ordinato e
l’ordine in cui lo è stato; vengono indicati il Codice del Prodotto e
dell’Ordine e la quantità ordinata
: questa è la struttura che memorizza i token utilizzati dall’applicazione
Informatica Granata, con il riferimento al Codice ed al Contenuto
Vengono presentate di seguito le istruzioni SQL che hanno permesso la creazione del database
DROP TABLE IF EXISTS 'Customers';
CREATE TABLE 'Customers' (
'CF' varchar(16) NOT NULL,
'NAME' varchar(50) default NULL,
'ADDRESS' varchar(100) default NULL,
'UNAME' varchar(20) default NULL,
'PASSWORD' varchar(8000) default NULL,
'ADMINISTRATOR' enum('True','False') default 'False',
PRIMARY KEY ('CF')
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
DROP TABLE IF EXISTS 'Orders';
CREATE TABLE 'Orders' (
'COD_ORDER' int(11) NOT NULL auto_increment,
'CUSTOMER' varchar(16) default NULL,
'TOT_ORDER' double(12,2) default NULL,
'STATUS' enum('Suspended','Closed') default 'Suspended',
'DATE' datetime default NULL,
PRIMARY KEY ('COD_ORDER'),
KEY 'CUSTOMER' ('CUSTOMER')
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
DROP TABLE IF EXISTS 'Prod_Ord';
CREATE TABLE 'Prod_Ord' (
'PRODUCT' int(11) NOT NULL,
'COD_ORDER' int(11) NOT NULL,
'QTY' int(11) default NULL,
PRIMARY KEY ('PRODUCT','COD_ORDER'),
KEY 'COD_ORDER' ('COD_ORDER')
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
DROP TABLE IF EXISTS 'Products';
CREATE TABLE 'Products' (
'COD_PROD' int(11) NOT NULL auto_increment,
'NAME' varchar(50) default NULL,
'DESCRIPTION' varchar(8000) default NULL,
'PRICE' double(9,2) default NULL,
'QTY' int(11) default NULL,
'PHOTO' varchar(256) default NULL,
PRIMARY KEY ('COD_PROD')
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
DROP TABLE IF EXISTS 'Tokens';
CREATE TABLE 'Tokens' (
'ID' int(11) NOT NULL,
'TOKEN' text,
PRIMARY KEY ('ID')
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Una volta concretizzata la definizione del modello ER si può passare alla descrizione
dell’interfaccia creata.
Si è scelto di realizzare un oggetto PHP, denominato MyDBManager, molto simile ad un classico
oggetto Java.
All’interno del costruttore viene gestita la connessione al database in modo che essa sia unica ed
utilizzabile per tutte le operazioni consentite; nell’applicazione, per poter accedere alle funzionalità
da noi fornite, i programmatori hanno dovuto istanziare un oggetto di tipo MyDBManager e poi
utilizzarlo invocandone i metodi.
L’oggetto in esame contiene funzionalità per:







Login di Utenti ed Amministratori
Gestione Utenti con modifiche dati
Elenco Utenti e Dati Utente Specifico
Gestione Prodotti con modifiche dati
Catalogo Prodotti e Dati Prodotto Specifico
Gestione ed Elenco Ordini e Prodotti Ordinati
Gestione di Timeout e Conferma Ordini
Dal punto di vista della sicurezza ci sono tre aspetti fondamentali che sono stati trattati.
Innanzitutto è stata valutata le possibilità di collocazione del database all’interno del Sistema; la
scelta era tra il server del nostro gruppo oppure quello del Gruppo 3.
E’ stata scelta la prima opzione; questo ha comportato una misura di sicurezza da noi considerata
necessaria, ovvero la connessione sicura al db utilizzando il parametro che consente di sfruttare
SSL. Questa accortezza serve per evitare che le query eseguite sul database viaggino in chiaro sulla
rete dal momento che i metodi vengono invocati sul server del Gruppo 3 ma i dati sono sulla nostra
macchina.
Il secondo aspetto riguarda l’implementazione dell’oggetto MyDBManager al fine di evitare che
l’applicazione risulti vulnerabile ad attacchi di SQL Injection. Come è possibile notare nel codice
sorgente, per ogni metodo dell’oggetto, sono state utilizzate le due funzioni predefinite PHP
addslashes e stripslashes con le quali aggiungere e rimuovere alle/dalle stringhe da gestire tutti gli
slash necessari per l’inserimento ed il reperimento nel/dal database dei caratteri speciali.
PHP fornisce tali metodi al fine di consentire agli sviluppatori la difesa delle proprie applicazioni
dall’injection senza implementare funzioni proprie che potrebbero contenere errori o non
considerare ogni caso possibile.
Il terzo aspetto ed ultimo aspetto riguarda la gestione e considerazione delle operazioni sul database
quali transazioni ovvero unità atomiche di elaborazione; si presuppone che tutte le operazioni che
costituiscono una transazione vengano eseguite in isolamento da altre transazioni.
Anche se a prima vista tale approccio sembra non riguardare la sicurezza dell’applicazione, invece
esso si rivela importante in quanto contribuisce all’efficienza del Sistema e permette di limitare o
evitare addirittura possibili danni dovuti ad attacchi DoS, Denial of Service.
Le modifiche di eventuali query sul database vengono memorizzate e diventano effettive solo
quando viene eseguito il “commit” della transazione, ovvero quando questa viene confermata in
quanto correttamente terminata; in caso di abort nessun dato viene modificato nel database.
Per indicare inizio e fine di una transazione, l’oggetto PHP utilizza due metodi privati che vengono
invocati dalle funzionalità che modificano il database; ognuna delle caratteristiche dell’oggetto
creato per fornire i servizi richiesti può essere reperita nel codice sorgente allegato alla
documentazione del lavoro del gruppo e dell’intera commessa.
La gestione degli aspetti di sicurezza succitati riguarda unicamente il lavoro del nostro gruppo e
quindi non sono esclusi interventi ed ulteriori politiche di sicurezza da parte degli altri gruppi che
lavorano al progetto e che verranno eventualmente descritti nella documentazione finale della
commessa o dell’intera simulazione del singolo gruppo.
DIFFICOLTA’ INCONTRATE
Nell’ambito dello sviluppo dell’applicazione e nelle fasi di creazione del database e dell’interfaccia
per accedervi sono state diverse le difficoltà incontrate.
La più importante ha riguardato l’utilizzo del Secure Socket Layer (SSL) nella comunicazione tra il
server dove risiedeva il sito web (gruppo 3) ed il nostro host sul quale avevamo creato il database
SHOP; avendo optato per la separazione dei livelli del Sistema è stato definito prioritario avere una
comunicazione sicura tra i nodi dello stesso.
L’esecuzione di ogni query sul DB avviene a cavallo della rete e quindi si è scelto di non far
viaggiare in chiaro i dati relativi a tali operazioni. Per fare ciò, inizialmente la connessione al
database veniva effettuata con il parametro MYSQL_SSL_CLIENT sfruttando la funzione PHP
mysql_connect.
Tale funzione viene tuttora invocata un’unica volta nel costruttore dell’oggetto MyDBManager, al
fine di averne l’esecuzione all’atto dell’istanziazione dello stesso e di poterla utilizzare per ogni
richiesta dell’applicazione.
L’indicazione del parametro per l’utilizzo di SSL permette la connessione sicura al DB e la cifratura
di ogni query eseguita sullo stesso. Purtroppo quello che era stato ipotizzato non si è verificato e
non si è riusciti in alcun modo, nonostante ripetuti ed estenuanti tentativi, a far interagire i due nodi
in maniera sicura nonostante si utilizzassero certificati validi.
La soluzione è stata quella di spostare il database sul server del gruppo 2 rinunciando all’utilizzo
della connessione sicura mediante il parametro sopra citato e velocizzando anche i tempi di risposta
per i servizi dal momento che le query vengono eseguite in locale.
Le altre difficoltà sono state di minore importanza ed hanno riguardato la definizione dello schema
relazionale da adottare in termini di consistenza, efficienza e di quelle che erano le richieste dei
componenti del gruppo 2.
L’ultima difficoltà è stata quella relativa alla gestione delle transazioni SQL, con il reperimento online delle operazioni necessarie per la loro implementazione; la soluzione stata trovata grazie
all’analisi di alcuni esempi presenti in rete e che prevedevano l’esecuzione di particolari query sul
database come LOCK TABLE … WRITE, START TRANSACTION e COMMIT con le quali
bloccare in scrittura le tabelle, cominciare una transazione ed indicare la riuscita esecuzione della
stessa. L’utilizzo di tali query è stato racchiuso in due metodi privati con lo scopo di fare tutto il
necessario per dare inizio e terminare una transazione.
Scarica