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 LavagnaElettronica@serviziomail.it 2
Lavagna elettronica (II) La soluzione proposta è quella di una lavagna elettronica Sala riunioni ore 20 Casa Rossi, ore 15 Sala riunioni ore 19 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. 4
e se si raggiunge l accordo Lavagna.html 5
Lavagna elettronica (IV) I partecipanti sono identificati tramite e-mail e preliminarmente inseriti in un database 6
La pagina Lavagna.html 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 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 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 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 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 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() 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 14
Suggerimenti l 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/2014-2015/laboratori/lab4 15