Corso di Web Programming

Documenti analoghi
Lavorare con MySQL Parte Seconda.

Data Base. Master "Bio Info" Reti e Basi di Dati Lezione 6

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Laboratorio Progettazione Web PHP e MySQL. Andrea Marchetti IIT-CNR 2013/2014

PHP e MySQL. Guida scaricata da

19. LA PROGRAMMAZIONE LATO SERVER

MySQL Database Management System

PHP e MySQL. Scripting server-side per accesso a DB MySQL

Insegnamento di Informatica CdS Scienze Giuridiche A.A. 2006/7. Il trattamento dei dati

Laboratorio Progettazione Web PHP e MySQL - Lezione 9. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2012/2013

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

Obiettivi d esame PHP Developer Fundamentals on MySQL Environment

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Esercitazione sulle libpq - libreria C per PostgreSQL

Laboratorio Progettazione Web PHP e MySQL - Lezione 9. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2011/2012

Abilità Informatiche A.A. 2010/2011 Lezione 9: Query Maschere Report. Facoltà di Lingue e Letterature Straniere

Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

Lezione 9. Applicazioni tradizionali

GERARCHIE RICORSIVE - SQL SERVER 2008

Corso di Sicurezza Informatica. Sicurezza del software. Ing. Gianluca Caminiti

Web Programming Specifiche dei progetti

Progetto CSP: Innovation & Creativity for School. Istituto Tecnico Industriale Statale Giulio Cesare Faccio Vercelli Gruppo 5 ELETTRONICI

Procedure memorizzate SQL-2003/PSM. Forma base di PSM. Parametri in PSM

Siti web centrati sui dati Architettura MVC-2: i JavaBeans

Una metodologia di progettazione di applicazioni web centrate sui dati

[1] Cross Site Scripting [2] Remote / Local File Inclusion [3] SQL Injection

CONTENUTI 1. INTRODUZIONE CONCETTI BASICI SU EQUINOX CMS XPRESS ACCESSO A EQUINOX CMS XPRESS PAGINA D INIZIO...

Al giorno d oggi, i sistemi per la gestione di database

2104 volume III Programmazione

Capitolo 13. Interrogare una base di dati

Progetto ittorario Anno scol

Progettazione Web Applicazioni client-server

Siti interattivi e dinamici. in poche pagine

bool mysql_select_db([string database_name [,resource link_identifier]]) Connessione ad un server MySQL vuole conettere

Definizione di domini

INDICI. Prevediamo di effettuare spesso interrogazioni simili alle seguenti:

Concetto di Funzione e Procedura METODI in Java

Introduzione ai Sistemi di Gestione di Basi di Dati XML

Algoritmi di Ricerca. Esempi di programmi Java

PHP e Structured Query Language

Esercitazione PAM. (Php Apache MySQL)

Corso Analista Programmatore Web PHP Corso Online Analista Programmatore Web PHP

Esercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R:

Architettura MVC-2: i JavaBeans

Appunti di MySql. Evoluzione di un tutorial di base di mysql, scritto da Etel Sverdlov.

Access. P a r t e p r i m a

Volumi di riferimento

Metodologie Informatiche Applicate al Turismo

1) Il client(browser utilizzato) invia al server i dati inseriti dall utente. Server

Dispensa di database Access

Che cos'è un modulo? pulsanti di opzione caselle di controllo caselle di riepilogo

PHP. A. Lorenzi, R. Giupponi, D. Iovino LINGUAGGI WEB. LATO SERVER E MOBILE COMPUTING Atlas. Copyright Istituto Italiano Edizioni Atlas

Corso di Informatica. Prerequisiti. Modulo T3 B3 Programmazione lato server. Architettura client/server Conoscenze generali sui database

Laboratorio di Basi di Dati e Web

ESEMPI DI QUERY SQL. Esempi di Query SQL Michele Batocchi AS 2012/2013 Pagina 1 di 7

Uso delle basi di dati DBMS. Cos è un database. DataBase. Esempi di database

BASI DI DATI Cos è il PHP. Cos è il PHP. Esercitazione su PHP & MySQL

Obiettivo dell esercitazione

<?php include './include/page.php';

IL DAT A B A S E DI ALGE B R A N D O

Dati relazionali e XML

Le Basi di Dati. Le Basi di Dati

Esercitazione 4 JDBC

DATABASE IN RETE E PROGRAMMAZIONE LATO SERVER

Organizzazione degli archivi

I comandi del linguaggio DDL (Data Definition Language): CREATE E ALTER

Laboratorio di reti II: Gestione di database lato server

La prima applicazione Java. Creazione di oggetti - 1. La prima applicazione Java: schema di esecuzione. Gianpaolo Cugola - Sistemi Informativi in Rete

I DATABASE Database relazionale

Corso di PHP. Prerequisiti. 6.1 PHP e il web 1. Conoscenza HTML Tecnica della programmazione Principi di programmazione web

15 - Packages. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Corso di Informatica Modulo T3 B2 - Database in rete

Indice Configurazione di PHP Test dell ambiente di sviluppo 28

I file di dati. Unità didattica D1 1

DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE. SQL è più di un semplice linguaggio di interrogazione

Gestione Orario Lezioni: Schema del Database

Raggruppamenti Conti Movimenti

Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali.

Unità 2.1 Comandi sui database

Indice generale. Capitolo 3 Introduzione a PHP...43 Sintassi e istruzioni di base Variabili, operatori e commenti Array...

Lezione V. Aula Multimediale - sabato 29/03/2008

Sicurezza Informatica: Tecniche di SQL INJECTION

CONCETTO DI ANNIDAMENTO

Programmazione a Oggetti Lezione 10. Ereditarieta

MySQL Database Management System

SITI-Reports. Progetto SITI. Manuale Utente. SITI-Reports. ABACO S.r.l.

Introduzione JDBC interfaccia java.sql driver caricare i driver

URI. Introduzione. Pag. 1

MagiCum S.r.l. Progetto Inno-School

14 - Packages. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Corso sul linguaggio SQL

Sistemi Mobili e Wireless Android - Dati persistenti: SQLite

Esercitazione 8. Basi di dati e web

Università degli Studi "Roma Tre" Dipartimento di Informatica ed automazione. Facoltà di Ingegneria

Database Lezione 1. Sommario. - Introduzione - Tabelle e chiave primaria - Query - Calcoli ed alias - Ordinamento

Telerilevamento e GIS Prof. Ing. Giuseppe Mussumeci

Sviluppo Applicazioni Mobile Lezione 12 JDBC. Dr. Paolo Casoto, Ph.D

User Tools: DataBase Manager

Il database management system Access

INFORMATICA. Applicazioni WEB a tre livelli con approfondimento della loro manutenzione e memorizzazione dati e del DATABASE.

Transcript:

Corso di Web Programming 11. PHP - Complementi Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso di Laurea in Informatica Applicata A.A. 2010/2011 Paolo Milazzo (Università di Pisa) WebProg 11 - PHP - Complementi A.A. 2010/2011 1 / 26

Sommario 1 Programmazione orientata agli oggetti 2 Altri modi di interagire con le basi di dati L estensione MySQL improved (MySQLi) L estensione SQLite 3 Alcuni aspetti di sicurezza in PHP Paolo Milazzo (Università di Pisa) WebProg 11 - PHP - Complementi A.A. 2010/2011 2 / 26

Programmazione orientata agli oggetti in PHP (1) La possibilità di lavorare con classi e oggetti in PHP è stata introdotta in tempi abbastanza recenti supporto di base agli oggetti da PHP 4.0 supporto completo agli oggetti e migliori performance da PHP 5.0 In PHP le variabili e i metodi degli oggetti possono essere specificati a priori attraverso la definizione di classi E anche possibile (ma sconsigliato) aggiungere nuove variabili d istanza a oggetti già creati (in stile JavaScript) Paolo Milazzo (Università di Pisa) WebProg 11 - PHP - Complementi A.A. 2010/2011 3 / 26

Programmazione orientata agli oggetti in PHP (2) Una classe si definisce attraverso la keyword class e specificando le variabili d istanza e i metodi (in questo caso funzioni) class User { public $username ; public $nome ; public $cognome ; function construct ( $n, $c, $un ) { $this -> username = $un ; $this -> nome = $n; $this - > cognome = $c; function getname () { return $this - > nome. " ". $this. cognome ; function tostring () { return $this -> getname (). " (". $this. username. ")"; Paolo Milazzo (Università di Pisa) WebProg 11 - PHP - Complementi A.A. 2010/2011 4 / 26

Programmazione orientata agli oggetti in PHP (3) Si può specificare un costruttore come funzione che si chiama come la classe oppure (da PHP 5.0) tramite una funzione construct Si può specificare un metodo distruttore (richiamato ogni volta che un oggetto non ha più riferimenti) chiamato destruct Si può usare $this per accedere alle variabili e ai metodi della classe stessa (stessa istanza) Un oggetto di una classe viene creato usando la parola chiave new Si usa la notazione -> per accedere alle variabili e ai metodi di un oggetto (Esempi: $o->nome, $o->tostring()) Attenzione: quando si accede a una variabile di un oggetto non si deve usare $ a destra di -> Paolo Milazzo (Università di Pisa) WebProg 11 - PHP - Complementi A.A. 2010/2011 5 / 26

Programmazione orientata agli oggetti in PHP (4) Esempio di creazione e uso di un oggetto /* creazione di un oggetto */ $paolo = new User (" Paolo "," Milazzo "," pmilazzo "); /* accesso a una variabile d istanza */ if ( $paolo -> username ==" pmilazzo ") { /* invocazione di un metodo */ print $paolo - > tostring (); Paolo Milazzo (Università di Pisa) WebProg 11 - PHP - Complementi A.A. 2010/2011 6 / 26

Programmazione orientata agli oggetti in PHP (5) Si possono usare (da PHP 5.0 in poi) i modificatori di variabili e metodi public, protected e private come in Java (se omesso si intende public) Si possono definire variabili e metodi di classe (statici) tramite il modificatore static, usando :: al posto di -> e self al posto di $this class ContaIstanze { static $contatore = 0; function construct () { self :: contatore ++; $o1 = new ContaIstanze (); $o2 = new ContaIstanze (); echo ContaIstanze :: $contatore ; // scrive 2 Paolo Milazzo (Università di Pisa) WebProg 11 - PHP - Complementi A.A. 2010/2011 7 / 26

Programmazione orientata agli oggetti in PHP (6) Si possono definire gerarchie di classi tramite l operatore extends (single inheritance) con le possibilità di fare overloading dei metodi, ecc... class Subscriber extends User { public $email ; function construct ( $n, $c, $un, $em ) { parent :: construct ($n, $c, $un ); $email = $em ; function display () { echo " Nome : ". $this. nome. "<br >"; echo " Cognome : ". $this. cognome. "<br >"; echo " Email : ". $this. email. "<br >"; Paolo Milazzo (Università di Pisa) WebProg 11 - PHP - Complementi A.A. 2010/2011 8 / 26

Programmazione orientata agli oggetti in PHP (7) Può far comodo...... per stampare il contenuto di un oggetto (nomi delle variabili e valori assegnati) in formato leggibile usare la funzione print_r(). Il seguente codice $o = new User (" Mario "," Rossi "," mr1 "); print_r ($o ); stampa User Object ( [username] => mr1 [nome] => Mario [cognome] => Rossi )... per clonare un oggetto (creare un nuovo oggetto uguale ad un altro) usare l operazione clone (attenzione, non è una funzione) $o1 = new User (); $o1 -> nome = " Mario "; $o2 = clone $o1 ; Paolo Milazzo (Università di Pisa) WebProg 11 - PHP - Complementi A.A. 2010/2011 9 / 26

Sommario 1 Programmazione orientata agli oggetti 2 Altri modi di interagire con le basi di dati L estensione MySQL improved (MySQLi) L estensione SQLite 3 Alcuni aspetti di sicurezza in PHP Paolo Milazzo (Università di Pisa) WebProg 11 - PHP - Complementi A.A. 2010/2011 10 / 26

L estensione MySQLi (1) La libreria di funzioni per accedere a MySQL che viste nelle lezioni precedenti fanno parte dell estensione PHP detta MySQL Recentemente è stata introdotta una nuova estensione detta MySQLi (MySQL improved) con un interfaccia object oriented e alcune nuove funzionalità Sebbene la vecchia estensione MySQL sia ritenuta al momento più stabile di MySQLi, quest ultima diventerà nel prossimo futuro l estensione ufficiale L uso di MySQLi non è in realtà molto diverso dall uso di MySQL... Paolo Milazzo (Università di Pisa) WebProg 11 - PHP - Complementi A.A. 2010/2011 11 / 26

L estensione MySQLi (2) Connessione a un database: /* parametri per la connessione */ $host = " localhost "; /* server MySQL */ $user = " paolo "; /* utente */ $pwd = " xxxxxxx "; /* password */ $dbname = " archvio "; /* nome database */ /* connessione al database */ $conn = new mysqli ( $host, $user,$pwd, $dbname ); /* gestione errori di connessione */ if ( mysqli_connect_errno ()) { print " <p> Errore di connessione al database </ p>"; exit (); Da notare: Connessione e scelta database in un unico passo Funzione separata per la gestione degli errori Paolo Milazzo (Università di Pisa) WebProg 11 - PHP - Complementi A.A. 2010/2011 12 / 26

L estensione MySQLi (3) Esecuzione della query: Primo metodo (sconsigliato se ci sono variabili) /* preparazione della query usando variabili */ $conn - > query (" SELECT nome, cognome FROM people WHERE citta = $city AND eta = $age "); Secondo metodo, utilizzo di un prepared statement /* preparazione della query con parametri "?" */ $query = $conn - > prepare (" SELECT nome, cognome FROM people WHERE citta =? AND eta =?"); /* binding dei parametri */ $query -> bind_param ( si,$city, $age ); /* esecuzione della query */ $query -> execute (); L uso del prepared statemente e di bind_param è consigliato in quanto questa funzione svolge controlli di sicurezza sulle variabili (vedremo) La stringa passata come primo argomento a bind_param contiene caratteri che rappresentano i tipi attesi dei parametri nell ordine s per string, i per integer, d per double e b per blob Paolo Milazzo (Università di Pisa) WebProg 11 - PHP - Complementi A.A. 2010/2011 13 / 26

L estensione MySQLi (4) Gestione del risultato della query: /* specifica delle variabili da legare ai vari campi del risultato */ $query -> bind_result ( $name, $lastname ); print "<table >"; print "<tr ><th >Nome </th ><th > Cognome </th > </tr >"; /* ciclo che scandisce il risultato della query riga per riga */ while ( $query -> fetch ()) { print "<tr ><td > $name </td ><td > $lastname </td > </tr >"; print " </ table >"; Da notare: L invocazione di bind_result serve per dire a fetch dove andare a mettere i risultati della query Bisogna fare attenzione a passare a bind_result tante variabili quante sono le colonne del risultato della query Paolo Milazzo (Università di Pisa) WebProg 11 - PHP - Complementi A.A. 2010/2011 14 / 26

L estensione MySQLi (5) Chiusura della connessione a MySQL: $conn -> close (); Paolo Milazzo (Università di Pisa) WebProg 11 - PHP - Complementi A.A. 2010/2011 15 / 26

L estensione SQLite (1) MySQL è sempre stato il DBMS più comunemente usato con PHP Un istallazione (o configurazione) minimale di PHP potrebbe però non comprendere MySQL Inoltre per piccole basi di dati si potrebbe preferire qualcosa di più semplice di MySQL Nelle ultime versiondi di PHP (da PHP 5.0) è stata inclusa la nuova estension SQLite SQLite consiste di una libreria (sia procedurale che object-oriented) per memorizzare dati in piccoli database memorizzati come singoli file binari Trattandosi di una libreria e non di un DBMS, SQLite esiste solo all interno dei linguaggi di programmazione che la implementano (tra cui PHP). Non si può accedere ai dati tramite console, o simili... Paolo Milazzo (Università di Pisa) WebProg 11 - PHP - Complementi A.A. 2010/2011 16 / 26

L estensione SQLite (2) Esempio di uso di SQLite: // apre ( o crea ) un database $db = new SQLiteDatabase (" miodatabase. sqlite ",0666, $err ); if (! $db ) die (" Errore SQLite : $err "); // esegue una query che crea una tabella e la popola $db -> query ( " CREATE TABLE nomi ( id INTEGER PRIMARY KEY, nome VARCHAR (255)); INSERT INTO nomi ( nome ) VALUES ( uno ); INSERT INTO nomi ( nome ) VALUES ( due ); INSERT INTO nomi ( nome ) VALUES ( tre );" ); // interroga il database $risultato =$db -> query (" SELECT * FROM nomi "); // scandisce il risultato dell interrogazione while ( $risultato - > valid ()) { // finche non siamo alla fine dei dati $dati = $risultato - > current (); // restituisce il risultato print_r ( $dati ); print ("<br >"); $risultato - > next (); // va alla prossima riga di dati Paolo Milazzo (Università di Pisa) WebProg 11 - PHP - Complementi A.A. 2010/2011 17 / 26

L estensione SQLite (3) Altro esempio in cui si usa il metodo bufferizzato arrayquery: // apre ( o crea ) un database $db = new SQLiteDatabase (" miodatabase. sqlite ",0666, $err ); if (! $db ) die (" Errore SQLite : $err "); // interroga il database caricando tutti i dati in memoria $risultato =$db - > arrayquery (" SELECT * FROM nomi ", SQLITE_ASSOC ); // scandisce il risultato dell interrogazione foreach ( $risultato as $row ) { print $row [ nome ]. "<br >"; la costante SQLITE_ASSOC permette alla funzione buffered sqlite_array_query di ottenere un array associativo basato sui nomi dei campi della tabella Ci sono anche altre costanti, tra cui: SQLITE_NUM: restituisce un array con indice numerico a partire da zero SQLITE_BOTH: restituisce un array con indice sia numerico sia basato sui nomi dei campi della tabella Paolo Milazzo (Università di Pisa) WebProg 11 - PHP - Complementi A.A. 2010/2011 18 / 26

L estensione SQLite (4) SQLite consente di usare funzioni PHP all interno del codice SQL // definisce una semplice funzione function conta ( $str ) { return strlen ( $str ); // apre ( o crea ) un database $db = new SQLiteDatabase (" miodatabase. sqlite ",0666, $err ); if (! $db ) die (" Errore SQLite : $err "); // lega la funzione PHP " conta " al nome di funzione SQL " contasql " $db -> createfunction (" contasql ", " conta ", 1); // esegue una query usando la nuova funzione e scandisce il risultato $ris =$db -> arrayquery (" SELECT nome, contasql ( nome ) AS len FROM nomi "); foreach ( $ris as $row ) { print $row [ nome ]. "(". $row [ len ]. ") <br >"; createfunction() comunica a SQLite l esistenza della nuova funzione: primo parametro: nome della funzione da usare nella sintassi SQL secondo parametro: nome originale della funzione PHP terzo parametro: numero di parametri che utilizza la funzione Paolo Milazzo (Università di Pisa) WebProg 11 - PHP - Complementi A.A. 2010/2011 19 / 26

Sommario 1 Programmazione orientata agli oggetti 2 Altri modi di interagire con le basi di dati L estensione MySQL improved (MySQLi) L estensione SQLite 3 Alcuni aspetti di sicurezza in PHP Paolo Milazzo (Università di Pisa) WebProg 11 - PHP - Complementi A.A. 2010/2011 20 / 26

Alcuni aspetti di sicurezza in PHP L utilizzo di PHP e MySQL espone ad alcuni possili attacchi alla sicurezza del sistema Anche nei piccoli siti web è bene prestare attenzione agli aspetti di sicurezza! I tipi di attacchi più semplici da realizzare consistono nell effettuare richieste all applicazione PHP nascondendo frammenti di codice nei parametri: MySQL Injection Attacks: frammenti di codice SQL da far eseguire all applicazione PHP Cross-site Scripting (XSS) Attacks: frammenti di codice HTML o JavaScript da memorizzare nella base di dati e successivamente eseguiti da altri client Paolo Milazzo (Università di Pisa) WebProg 11 - PHP - Complementi A.A. 2010/2011 21 / 26

MySQL Injection Attacks (1) Esempio: supponiamo che l applicazione PHP contenga la seguente query a un database $result = mysql_query (" SELECT * FROM people WHERE nome =\" $name \"", $conn ); dove il contenuto di $nome è specificato dagli utenti tramite un form HTML supponiamo inoltre che un utente malevolo inserisca nel form il seguente dato (virgolette incluse) "; DROP people; SELECT * FROM foo WHERE nome=" andando a sostituire $nome nella query otteniamo SELECT * FROM people WHERE nome=""; DROP people; SELECT * FROM foo WHERE nome="" che cancella la tabella people dalla base di dati!!! Paolo Milazzo (Università di Pisa) WebProg 11 - PHP - Complementi A.A. 2010/2011 22 / 26

MySQL Injection Attacks (2) Soluzione: dare in pasto i dati ottenuti dagli utenti ad una funzione di escaping tipo mysql_real_escape_string() (oppure stripslashes()) che prefissa le virgolette e gli altri caratteri sensibili in SQL con \ nell esempio: $name = mysql_real_escape_string ( $name ); $result = mysql_query (" SELECT * FROM people WHERE nome =\" $name \"", $conn ); usando il metodo bind_param in MySQLi l escaping dei dati viene effettuato in automatico! E buona norma inoltre controllare sempre che il tipo, il formato e la lunghezza dei dati ricevuti dai form sia quello atteso (usando ad esempio le espressioni regolari) Paolo Milazzo (Università di Pisa) WebProg 11 - PHP - Complementi A.A. 2010/2011 23 / 26

Cross-site Scripting (XSS) Attacks (1) In molti siti web i dati immessi da un utente sono memorizzati in una base di dati, e successivamente visualizzati da un altro utente (es. Forum, blog, wiki, ecc...) Che succede se un utente malevolo inserisce codice HTML o JavaScript nella base di dati (ad esempio postando un messaggio in un forum)? Paolo Milazzo (Università di Pisa) WebProg 11 - PHP - Complementi A.A. 2010/2011 24 / 26

Cross-site Scripting (XSS) Attacks (2) Esempio: supponiamo che l applicazione PHP visualizzi i dati di un database come una tabella usando il codice seguente: print "<table >"; print "<tr ><th > Messaggio </th > </tr >"; while ( $row = mysql_fetch_row ( $result )) print "<tr ><td > $row [0] </ td > </tr >"; print " </ table >"; supponiamo inoltre che un utente malevolo inserisca nel database la seguente stringa: </td></tr></table><script>alert("colpito!");</script> il frammento di JavaScript cosi inserito viene eseguito nei browser di tutti gli utenti che si collegano successivamente all attaccante questo è un buon modo per redirigere tutti gli utenti a un sito diverso carpire password (chiedendole direttamente agli utenti) accedere ai cookies degli utenti (magari per ottenerne l id di sessione Session hihacking)... Paolo Milazzo (Università di Pisa) WebProg 11 - PHP - Complementi A.A. 2010/2011 25 / 26

Cross-site Scripting (XSS) Attacks (3) Soluzione: dare in pasto i dati ottenuti dagli utenti alla funzione di htmlspecialchars() che modifica i dati in modo che i contenuti rimangano gli stessi, ma non possano più essere interpretati come HTML nell esempio: print "<table >"; print "<tr ><th > Messaggio </th > </tr >"; while ( $row = mysql_fetch_row ( $result )) print "<tr ><td > htmlspecialchars ( $row [0]) </ td > </tr >"; print " </ table >"; come funziona: htmlspecialchars( <script>alert("colpito!");</script> ) restituisce: <script$gt;alert("colpito!");</script> Paolo Milazzo (Università di Pisa) WebProg 11 - PHP - Complementi A.A. 2010/2011 26 / 26