Programmazione Web
Laboratorio 4: PHP e MySQL
Lavagna elettronica (I)
Un’unità aziendale di decision making opera per le decisioni di tipo consueto
e ripetitivo tramite la procedura seguente:
• un qualsiasi membro del gruppo formula una linea di azione
• un secondo membro ne prende visione e, se la approva in pieno, formula
una proposta identica, altrimenti propone una variante
• e così via a seguire per gli altri membri …
• non appena una proposta identica viene formulata dalla metà più uno dei
componenti, la decisione viene presa e segnalata sulla lavagna a tutti i
membri; una mail con la decisione presa deve essere indirizzata
all’amministratore del sito (si scelga, a titolo esemplificativo, il proprio
indirizzo email), indicando come mittente
[email protected]
Programmazione Web - Esercizi PHP
2
Lavagna elettronica (II)
La soluzione proposta è quella di una lavagna elettronica
Sala riunioni ore 20
Casa Rossi, ore 15
Sala riunioni ore 19
…
Programmazione Web - Esercizi PHP
3
Lavagna elettronica (III)
Ciascun membro può leggere la lavagna tramite il Web, verificare se è già
stata presa una decisione (nel qual caso eventuali proposte vengono
ignorate) e inviare la propria proposta, che come tutte le altre verrà
visualizzata in forma anonima
Lavagna.html
Sezione dinamica,
aggiornata ad ogni
invio di proposta
Sezione statica, per
l’invio di ogni
proposta.
Programmazione Web - Esercizi PHP
4
…e se si raggiunge l’accordo
Lavagna.html
Programmazione Web - Esercizi PHP
5
Lavagna elettronica (IV)
I partecipanti sono identificati tramite e-mail e preliminarmente inseriti in un
database
Programmazione Web - Esercizi PHP
6
La pagina Lavagna.html
Programmazione Web - Esercizi PHP
7
Lo script lavagna.php
Lo script formRicevi.php si basa sulla classe Lavagna.php composta da
quattro metodi statici, ciascuno dei quali effettua una connessione, esegue
un’opportuna query e chiude la connessione
Programmazione Web - Esercizi PHP
8
Iniezione di codice SQL (I)
L’iniezione di codice SQL è una tecnica di attacco che sfrutta i campi di input
per inserire codice SQL dannoso, ottenendo informazioni private o
alterando il database
Per esempio:
‘ OR ‘’=‘
Posso accedere senza
conoscere la password
dell’utente ‘Devis’
Programmazione Web - Esercizi PHP
9
Iniezione di codice SQL (II)
L’iniezione di codice SQL è una tecnica di attacco che sfrutta i campi di input
per inserire codice SQL dannoso, ottenendo informazioni private o
alterando il database
Per esempio:
Altri valori catastrofici per il
campo ‘username’
Programmazione Web - Esercizi PHP
10
Evitare iniezione di codice SQL
Esistono diverse tecniche per prevenire l’iniezione di codice SQL, tra le
quali:
• tecniche che prevedono di effettuare modifiche nel file php.ini
•
•
tecniche che prevedono il controllo degli input dell’utente eliminandone o
manipolandone caratteri speciali come i singoli apici, applicabili a
qualsiasi input
tecniche che prevedono di irrobustire il codice tramite l’uso di casting ed
espressioni regolari, applicabili a tipi particolari di input
Programmazione Web - Esercizi PHP
11
Modifica del file php.ini
Una prima soluzione è quella di modificare direttamente il file di
configurazione php.ini, attivando le magic quotes
Questa opzione inserirà il carattere di escape davanti a tutti gli apici contenuti
in COOKIE, POST e GET
Questa soluzione potrebbe tuttavia non essere ottimale:
• potrebbe causare incompatibilità con molte altre applicazioni Web
• non viene attivata nessuna protezione su input che non provengono da
COOKIE, GET o POST
Programmazione Web - Esercizi PHP
12
Gestione dell’input dell’utente
Un altro modo per prevenire l’iniezione di codice SQL è quello di utilizzare
funzioni per la manipolazione delle stringhe:
• la funzione addslashes() che esegue il quoting di una stringa
mediante slash
• la funzione htmlentities() che converte i caratteri speciali in entità
HTML
• la funzione mysql_escape_string() che aggiunge sequenze di
escape in una stringa per l’uso in mysql_query()
Programmazione Web - Esercizi PHP
13
Controllo del tipo di input
Infine, vengono utilizzate tecniche per controlli specifici sul tipo di input
• se un input deve essere un numero intero, viene utilizzato is_numeric
per verificarlo e, in caso positivo, viene convertito con intval() o con
funzioni analoghe
• se un input è una stringa, vengono usate le espressioni regolari per
escluderne caratteri speciali
Programmazione Web - Esercizi PHP
14
Suggerimenti

•
Per inviare una mail in PHP, utilizzare la funzione mail() dopo aver
opportunamente settato il file php.ini come specificato di seguito
Il materiale necessario allo svolgimento dell’esercizio è reperibile al
seguente indirizzo
http://www.ing.unibs.it/~deantone/MaterialePW/Lucidi/20142015/Laboratori/Lab4
Programmazione Web - Esercizi PHP
15
Scarica

Lab4_PHP_MySQL