SQL Injection. Indice. Introduzione. Informazioni sugli autori. Capire il problema. Metodologie di testing. I problemi piu` diffusi

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "SQL Injection. Indice. Introduzione. Informazioni sugli autori. Capire il problema. Metodologie di testing. I problemi piu` diffusi"

Transcript

1 SQL Injection Indice Introduzione Informazioni sugli autori Capire il problema Metodologie di testing I problemi piu` diffusi Accessi non desiderati Visualizzare dati non accessibili Analisi delle query tramite l'introduzione di errori Advanced SELECT Injection INSERT Injection STORED PROCEDURES Injection Le feature e i problemi dei DBMS piu` diffusi Scrivere codice sicuro Configurare Linux Configurare Windows 2000 o XP Professional Esempi di codice vulnerabile PHP e PostgreSQL PHP e MySQL ASP e MDB

2 Introduzione L'evoluzione delle esigenze del pubblico internauta ha comportato l'introduzione di tecnologie dinamiche (creazione di contenuti "on demand") nei piu` disparati servizi offerti dal web. Sono sempre piu` numerosi i server, anche gratuiti, che offrono la possibilita` di elaborare script per la creazione di contenuti web e sempre piu` utenti stanno convertendo i propri siti statici in vere e proprie applicazioni residenti sul web. Tali applicazioni utilizzano, nella maggioranza dei casi, dati provenienti dall'utente ed introducono quindi la possibilita` di modifica arbitraria delle variabili utilizzate dallo script, rendendo cosi` possibile l'insorgere di vulnerabilita` sfruttabili da remoto. In questo paper analizzeremo una fra le piu` diffuse vulnerabilita` delle applicazioni web-related: la vulnerabilita` da SQL Injection. Informazioni sugli autori Eduard <Master^Shadow> Roccatello studia Ingegneria Informatica presso l'universita` di Padova. Si occupa di programmazione e di amministrazione di rete con un occhio di riguardo alle problematiche di sicurezza su sistemi unixlike. Aspinall studente in Informatica e Amministratore di Sistema, si interessa di sviluppo e sicurezza in ambiente UNIX. Sono entrambi membri di S.P.I.N.E. Group (http://www.spinegroup.org) Capire il problema La maggior parte delle applicazioni web vengono realizzate interfacciando l'applicazione stessa ad un server DBMS ed interagiscono con tali server tramite l'utilizzo del linguaggio standard SQL. SQL Injection e` una tecnica di exploiting delle web application che utilizzano dati provenienti dai client nelle query, senza controllare la presenza di caratteri potenzialmente pericolosi. Contrariamente a quello che si puo` pensare, questo tipo di vulnerabilita` e` molto diffusa e tale diffusione e` spesso dovuta alla mancanza di professionalita` di molti programmatori, spesso improvvisati, e alla mancanza di solide basi di programmazione sicura. Metodologie di testing Controllare le applicazioni per trovare eventuali vulnerabilita`

3 dovute all'sql Injection potrebbe essere molto complesso ma ci sono casi dove la ricerca di script potenzialmente vulnerabili e` molto semplice. Se, ad esempio, l'aggiunta di un apice in un form ritorna una pagina bianca o piena di errori riportati dal server DBMS siamo gia` ad un buon punto di partenza per quanto comporta la ricerca delle vulnerabilita`. Un buon programmatore dovrebbe controllare l'input di ogni variabile e non pensare che l'utente, utilizzatore della web application, formatti correttamente le variabili. Ogni possibile campo dovrebbe essere testato per tutte le vulnerabilita` che potrebbero coinvolgerlo, in modo da evitare ripercussioni in tutto lo script, spesso legato ad altri. Un buon metodo di controllo delle applicazioni web potrebbe essere quello di inserire in ogni campo una comando tipico di SQL preceduto da un apice, cercando cosi` eventuali problemi sulle singole variabili. Dopo aver provato i campi uno alla volta potrebbe essere utile riempire il form con dati formalmente corretti e ripetere la procedura "apice+comando" per ogni campo, mantenendo formalmente corretti gli altri campi. Ipotizziamo di passare ad uno script questi parametri formalmente corretti: Lo script funziona alla perfezione. Proviamo ora a modificare la stringa con un apice nel parametro "nome": Ipotizzando che lo script sia vulnerabile, siamo andati a modificare i parametri inviati al server DBMS dalla query, modificandone strutturalmente la sintassi (ricordo che l'apice (') e` un operatore SQL). Cosa potrebbe accadere utilizzando una stringa di parametri come quella proposta dall'esempio? I risultati potrebbero essere molteplici: dalla semplice pagina bianca ai piu` disparati errori provenienti dal server DBMS. Potrebbe riportare l'errore che gli altri paramentri non sono stati inseriti o addirittura mostrare dati che non dovrebbero essere visualizzati con quella query. Dopo aver trovato una possibile vulnerabilita` da SQL Injection, la parte piu` importante e` l'interpretazione degli errori. Se l'errore viene generato del server DBMS siamo sicuramente davanti ad una vulnerabilita` ad SQL Injection ma gli errori spesso sono tutt'altro che ovvi. Controlliamo sempre gli errori che si riferiscono ad ODBC, alla sintassi, al server SQL. Bisogna inoltre prestare attenzione alle piu` minimali modifiche della pagina, segno di SQL Injection Exploiting, poiche` molti programmatori possono nascondere le informazioni mettendo, ad

4 esempio, eventuali errori negli header del documento HTML e non mostrandone traccia nel body, la parte visualizzata dal browser. Non bisogna fermarsi all'analisi della singola pagina colpita da SQL Injection ma e` buona abitudine seguire i link presenti nella pagina, alla ricerca di eventuali ripercussioni sull'intera applicazione ed e` importante seguire anche eventuali redirect verso una pagina di errore predefinita, spesso preceduta da una schermata di errore propria del database. I problemi piu` diffusi Passiamo ora all'analisi dei piu` diffusi problemi di sicurezza dovuti alla vulnerabilita` da SQL Injection. Accessi non desiderati L'autenticazione delle web application e` spesso delegata ad uno script di login che ha il compito di processare la coppia login/password proveniente dal client e di confrontarla con le coppie presenti nel database. In caso di corrispondenza lo script settera` gli appositi flag per consentire il nostro accesso o, nel caso opposto, ci vietera` l'accesso. Consideriamo il seguente codice PHP: $user = $_GET['nome']; $passwd = $_GET['password']; $query = mysql_query( SELECT * FROM utenti WHERE user='$user' AND password='$passwd' ); if (mysql_num_rows($query) == 0) { $logged = 0; } else { $logged = 1; } Questo breve script prende i dati dalla querystring e li mette nella query senza controllare la presenza di eventuali caratteri pericolosi. Ipotizziamo di modificare entrambi gli argomenti passati allo script in "' OR ''='" e di far processare la pagina al server. La parte condizionale della query passata al server DBMS (in questo caso MySQL) diventa:... WHERE user='' OR ''='' AND passwd='' OR ''='' Come potrete ben capire entrambe queste condizioni sono sempre verificate e mysql_num_rows() restituira` un valore sicuramente diverso da zero (se la tabella contiene dati) consentendo cose` il login a qualsiasi persona a conoscenza di questo problema.

5 Visualizzare dati non accessibili Il mancato parsing dei parametri per caratteri maligni ha introdotto la possibilita` di editare, a piacimento dell'attaccante, la query verso il database. Abbiamo appena visto che e` possibile entrare con il massimo dei privilegi in un'applicazione web ma potremmo decidere di accedere a dati non direttamente accessibili dall'applicazione stessa. Lo standard SQL permette la creazione di SELECT multiple tramite il comando UNION e tale fatto puo` essere sfruttato per gli scopi dell'attaccante. Prendiamo in esame la seguente query: SELECT nome FROM users WHERE paese='$var' La variabile $var dovrebbe contenere il paese di provenienza degli utenti, dei quali stiamo cercando il nome ma, su di essa, non viene fatto nessun controllo ed e` quindi possibile scrivere codice SQL direttamente nella variabile. Nel nostro caso $var conterra` ' UNION ALL SELECT nome, passwd FROM users ''=' Vediamo il contenuto della query una volta settata $var: SELECT nome FROM users WHERE paese='' UNION ALL SELECT nome, passwd FROM users WHERE ''='' Evidentemente la prima SELECT non restituira` nessun record (supponendo che nessun utente ha il campo paese vuoto) mentre la seconda SELECT e` incondizionata e restituira` tutte le coppie nome/password. Il problema e` quello della visualizzazione dei dati: i dati ora sono stati estratti dal database ma l'applicazione considera solo il campo "nome" e non "password". Fortunatamente (!) il linguaggio SQL permette l'aliasing dei campi tramite il comando AS che puo` essere sfruttato per fare l'output dei dati non visualizzabili ordinariamente. Analisi delle query tramite l'introduzione di errori Molti server web restituiscono parte delle query in caso di errore. Normalmente questa funzionalita` e` utile, anzi direi necessaria, durante il debugging delle applicazioni web ma puo` essere usata impropriamente per analizzare le query e quindi carpire informazioni sulla realizzazione di una web application vulnerabile da SQL Injection. E' sempre utile testare un'applicazione inserendo volutamente errori di sintassi nei campi che interagiscono con l'utente, magari utilizzando costrutti SQL incompleti come "valore'", "'",

6 "'valore", "' OR '", ";" e "0,1,2". Advanced SELECT Injection Non sempre le web application elaborano query semplici e lineari. Capita a volte che siano presenti istruzioni racchiuse da parentesi, selezione sulla base di wildcards e campi non direttamente modificabili. Iniettare codice sintatticamente corretto e funzionante all'interno di queste tipologie di query potrebbe richiedere l'utilizzo di piccoli accorgimenti, a volte non immediati. SELECT nome FROM utenti WHERE (paese='campovariabile') Estrapolare dati da una query di questo tipo non puo` essere fatto con il metodo visto nelle pagine precedenti poiche` ci verrebbero segnalati diversi errori di sintassi. Occorre quindi modificare la query utilizzando un campo di questo genere ') UNION ALL SELECT campo FROM altratabella WHERE (''=' che, sostituita nella precedente, soddisfa perfettamente la sintassi SQL: SELECT nome FROM utenti WHERE (paese='') UNION ALL SELECT campo FROM altratabella WHERE (''='') Il trucco sta semplicemente nel completare parentesi e apici con piccoli trucchi in modo da far risultare la sintassi corretta e impostare correttamente le variabili booleane di confronto. Altra sintassi che potrebbe creare problemi e` quella dovuta al costrutto di confronto LIKE. SELECT nome FROM utenti WHERE nome LIKE '%campovariabile%' I simboli di percentuale funzionano nelle query SQL come wildcards e un eventuale completamento %% ritornerebbe tutti i record e quindi non sarebbe applicabile il costrutto UNION. Bisogna quindi pensare di inserire una stringa che non risulti in nessuno dei record, come potrebbe essere ad esempio "!?!". Un campo tipico per iniettare codice in questa query potrebbe essere il seguente:!?!%' UNION ALL SELECT campo FROM tab WHERE campo LIKE '% Sostituendo la query SQL diventa: SELECT nome FROM utenti WHERE nome LIKE '%!?!%' UNION ALL SELECT campo FROM altratabella WHERE campo LIKE '%%'

7 INSERT Injection Finora abbiamo considerato SQL Injection un problema legato al costrutto SELECT ma possiamo tranquillamente dire che questa vulnerabilita` si puo` estendere a qualsiasi query contentente input dell'utente non appositamente controllato. Un altro costrutto potenzialmente vulnerabile e` INSERT, necessario per l'inserimento di nuovi record all'interno di una tabella. Controllare la vulnerabilita` di una query di inserimento comporta le stesse tecniche viste per la query di selezione ma la forzatura di queste query potrebbe segnalarci all'amministratore dell'applicazione in quanto verrebbero riportate nei record parti di sintassi SQL. Iniettare codice nella query INSERT consente all'utente smaliziato di prelevare dati da un database e utilizzarli per la propria registrazione. Ad esempio e` possibile registrarsi al posto di un altro utente senza aver nessun dato su di lui. L'unico trucco necessario per assicurarsi dell'effettiva estrazione dei dati e` quella di visualizzarli (ad esempio tramite il pannello di controllo). Per portare a termine questo tipo di exploit il server DBMS deve supportare le SUBSELECT (ad esempio MySQL non supporta questa feature) e si devono conoscere i nomi di campi e tabella, ricavabili con un po' di reverse engineering. Ipotizziamo di avere la seguente query di inserimento: INSERT INTO tab (nome, cognome) VALUES ('campo1', 'campo2') Se al posto di campo1 inseriamo e al posto di campo2 inseriamo ' + SELECT nome FROM tab LIMIT 1 + ' ' + SELECT cognome FROM tab LIMIT 1 + ' otteniamo una perfetta replica di un record esistente all'interno del database poiche` la query in questione diventa: INSERT INTO tab (nome, cognome) VALUES ('' + SELECT nome FROM tab LIMIT 1 + '', '' + SELECT cognome FROM tab LIMIT 1 + '') Per cambiare l'utente da selezionare basta scorrere i record con l'offset offerto dall'istruzione LIMIT o, eventualmente, usare la sintassi NOT IN () per ciclare i record. STORED PROCEDURES Injection Exploitare le stored procedures e` generalmente molto piu`

8 semplice che agire sul costrutto SELECT. Le stored procedures sono parti di codice SQL richiamabili nei costrutti SQL tramite l'utilizzo di EXEC e sono praticamente degli script batch, atti ad effettuare operazioni direttamente all'interno del server DBMS. Hanno la particolarita` di essere abbastanza veloci e sono molto utilizzate per le operazioni transizionali. Non tutti i server DBMS permettono l'esecuzione delle stored procedures e, per richiamare l'esecuzione delle stesse, e` necessario che lo stesso server permetta l'utilizzo di statement multipli (istruzioni SQL distinte separate da un punto e virgola). Diversi server DBMS hanno comunque queste feature e possiedono, inoltre, diverse Stored Procedures predefinite, molte delle quali possono compiere operazioni molto interessanti per un attaccante. Esaminiamo la vulnerabilita` piu` evidente nel server DBMS di MicroSoft, MS SQL Server. Tale server attiva di default innumerevoli stored procedures, fra le quali troviamo xp_cmdshell ovvero un frontend per l'interprete dei comandi dei sistemi basati su kernel NT. Il server in questione supporta statement multipli e basta quindi una qualsiasi vulnerabilita` da SQL Injection per accedere al sistema con i permessi del server SQL. Consideriamo la seguente query: SELECT * FROM tab WHERE nome='campovariabile' Terminando il primo costrutto con un nome arbitrario ed applicando la sintassi di EXEC sulla procedura xp_cmdshell otteniamo la sequente query: SELECT * FROM tab WHERE nome='ed'; EXEC master.dbo.xp_cmdshell 'cmd.exe comando' Al posto di "comando" possiamo immettere qualsiasi stringa di comando interpretabile dalla shell dei sistemi NT ovvero il sistema e` in balia dei nostri comandi. Ovviamente il sistema server SQL di Microsoft non e` l'unico ad offrire stored procedures predefinite ma e` stato preso in considerazione per la gravita` della situazione che combinata con errori di programmazione web permette l'accesso a persone non desiderate. E' quindi bene disabilitare, o rimuovere, le stored procedures non necessarie al corretto funzionamento del server e assicurarsi che i permessi sulle parti vitali del sistema siano piu` restrittivi possibile. Le feature e i problemi dei DBMS piu` diffusi MySQL Supporta 'INTO OUTFILE' Supporta 'UNION' (dalla versione 4.x)

9 Spesso gira come "root" Molti moduli e librerie non supportano statement multipli Oracle Supporta le SubSelect Supporta 'UNION' Supporta le stored procedures Non supporta statement multipli Molte stored procedures preimpostate, alcune delle quali pericolose DB2 Supporta le SubSelect Supporta 'UNION' Supporta le stored procedures Non supporta statement multipli Postgres Supporta 'COPY' se fatto girare come superutente Supporta le SubSelect Supporta 'UNION' Supporta le stored procedures Supporta gli statement multipli MS SQL Server Supporta le SubSelect Supporta 'UNION' Supporta le stored procedures Supporta gli statement multipli Molte store procedures preimpostate sono pericolose Scrivere codice sicuro Ogni web application che si rispetti deve seguire piccole norme di programmazione per elevare la sicurezza al massimo possibile. Se l'applicazione riceve input dall'utente questo deve essere processato appropriatamente in modo da escludere eventuali caratteri maligni, che potrebbero interferire con le query previste dai programmatori. E' quindi necessario lasciar passare solo i caratteri necessari e filtrare tutti gli indesiderati tramite l'utilizzo di parser appositi (magari una regular expression ben congengnata). Ad esempio per lasciar passare solo i caratteri alfabetici la regexp seguente e` l'ideale: s/[^a-za-z]//g mentre per far passare i soli numeri si puo` applicare: s/[^0-9]//g Lasciare solo i caratteri alfanumerici e` quasi sempre un'ottima soluzione al nostro problema ma puo` capitare di aver bisogno di altri tipi di caratteri. In questo caso e` bene sostituire ai caratteri la loro codifica nello standard UniCode o nello standard

10 HTML. Ovviamente e` sempre bene utilizzare il minimo numero possibile di caratteri non alfanumerici per evitare potenziali problemi di iniezione. Altra feature interessante per aumentare la sicurezza delle web application potrebbe essere l'individuazione di tentativi di iniezione del codice prima del passaggio a stored procedures e a query. All'interno delle stored procedures e` bene non creare le query dinamicamente ma cercare di mantenere fisso piu` codice possibile. Realizzare una procedura di questo tipo richiede la creazione di una procedura contentente la sola query statica ed il semplice passaggio delle variabili come parametri. Ad esempio: CREATE PROC nvarchar(255) AS SELECT nome, cognome, indirizzo, telefono FROM utenti WHERE nick RETURN La configurazione del server deve essere piu` restrittiva possibile e deve evitare la possibilita` di accedere liberamente a parti del sistema non normalmente disponibili. Disabilitare le stored procedure non necessarie agli utenti potrebbe essere la soluzione ai nostri problemi ma un'attenta policy di permessi potrebbe evitare la mutilazione eccessiva del server DBMS. Configurare Linux MySQL La versione scaricata è la seguente : mysql tar.gz Una volta scompattato diamo i seguenti comandi : #./configure --prefix=/usr # make # make install Lanciamo lo script mysql_install_db per generare i database iniziali e ora lanciamo il demone mysqld con il comando # mysql.server start Ricordatevi di settare i permessi, # chown -R root /usr/local/mysql non entriamo troppo nel dettaglio,se dovestre riscontrare dei problemi vi consigliamo di leggervi la documentazione ufficiale.

11 Una volta lasciato il demone in ascolto, possiamo settare la password per l'utente root di mysql: # mysqladmin -u root -p password Per testare il tutto connettiamoci al nostro database appena installato mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 10 to server version: log Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> E` raccomandato connettersi al database non da root, quindi aggiungete un nuovo utente al database server. Consultate per scegliere i dovuti privilegi Apache Ora scarichiamo i sorgenti di apache e diamo i seguenti comandi : #./configure --prefix=/usr --sysconfdir=/etc/apache \ --enable-mods-shared=all --with-ssl --with-perl # make # make install httpd -version Server version: Apache/ Server built: Aug :08:05 PHP Procuriamoci la versione e scompattiamola. Compiliamo ed installiamo con la seguente procedura: #./configure --prefix=/usr --with-apxs2 \ --enable-cli --with-config-file-path=/etc/apache/php.ini \ --enable-magic-quotes --with-openssl --with-zlib \ --enable-bcmath --with-bz2 --enable-calendar --with-jpeg \ --with-tiff --enable-exif --enable-ftp --with-gd --with-gmp \ --with-gettext --with-mysql --with-mysql-sock=/var/.../mysql.sock \ --with-ncurses --enable-shmop --enable-sockets --enable-sysvmsg \ --enable-sysvsem --enable--sysvshm --enable-zend-multibyte --withpear \ --enable-trans-sid # make # make install

12 Aggiungiamo le seguenti stringhe in httpd.conf LoadModule php4_module modules/libphp4.so AddType application/x-httpd-php.php.php3 AddType application/x-httpd-php-source.phps Dovremmo aver finito, ora riavviamo apache : # apachectl restart Creiamo un database e proviamo l'interazione tra php e mysql. # mysqladmin -u root create testdb -p (testdb è il db che useremo per per eseguire i test) Editiamo una pagina di test per provare il tutto: // test.php <? # Apertura connessione verso mysql $tmp_socket=mysql_connect("localhost", "user", "prova") or die("impossibile connettere a mysql: ".mysql_error()); echo '> Apertura del database effettuata.<br>'; # Seleziono il database di test mysql_selectdb("testdb"); echo '> Database \'testdb\' selezionato.<br>'; # Creo un record nella mia tabella di test $sql = "INSERT INTO testtb(testfield) VALUES('test')"; $result = mysql_query($sql); if (!$result) { die('impossibile aggiungere record alla tabella<br>'); } else { echo '> Record inserito con successo.<br>'; } # Recupero il record appena inserito $sql = "SELECT idkey, testfield FROM testtb"; $result = mysql_query($sql); if (!$result) { die('impossibile leggere record dalla tabella<br>'); } else { $record = mysql_fetch_array($result); echo '> Il valore contenuto nella tabella per il record con idkey '.$record['idkey'].' e` <'.$record['testfield'].

13 '><br>'; } # Elimino il record creato e chiudo la connessione a mysql $sql = "DELETE FROM testtb"; $result = mysql_query($sql); if (!$result) { die('impossibile cancellare record dalla tabella<br>'); } else { echo '> Record cancellato con successo.<br>'; } mysql_close($tmp_socket); echo '> Connessione con il database chiusa.<br>';?> // EOF Eseguiamo la pagina per verificare il corretto funzionamento: #lynx /test.php > Apertura del database effettuata. > Database 'testdb' selezionato. > Record inserito con successo. > Il valore contenuto nella tabella per il record con idkey 15 e` <test> > Record cancellato con successo. > Connessione con il database chiusa. Apache, MySQL e PHP sono correttamente installati e possiamo passare all'installazione di PostgreSQL. PostgreSQL PostgreSQL e` un RDBMS e fornisce il maggior supporto agli standard ANSI SQL per quanto riguarda il software opensource ma e` leggermente piu` difficile da gestire di MySQL. Ci sono essenzialmente due modi per installare PostgreSQL: utilizzare i binari o compilare il sorgente. Entrambi le soluzioni possono essere trovate su o nel sito della propria distribuzione Linux. Installare i binari e` molto semplice e puo` essere fatto con i tools della propria distribuzione. In questo articolo parleremo della compilazione dei sorgenti di PostgreSQL. Il primo passo da effettuare e` quello di creare un utente per il database, che noi chiameremo postgres, al quale assegneremo il gruppo postgres e la home directory /usr/local/pgsql. L'installazione di PostgreSQL e` stata effettuata su una macchina

14 Linux Slackware. Copiamo il tarball dei sorgenti postgresql tar.gz in /tmp e scompattiamolo con il comando tar: tar xzvf postgresql tar.gz Abbiamo ottenuto una nuova cartella contenente i sorgenti di PostgreSQL. Spostiamoci all'interno della cartella con: cd postgresql-7.3.4/src e cominciamo a configurare il Makefile per il nostro sistema:./configure Continuiamo la compilazione con: make Se tutto va per il meglio l'ultima riga restituita dal sistema dovrebbe essere All of PostgreSQL is successfully made. Ready to install. Prima di procedere all'installazione cambiamo il nostro utente nel nostro utente postgres con su postgres e diamo il via all'installazione make install Se ci dovessero essere problemi effettuando l'installazione dall'utente postgres, e` necessario provare utilizzando il superuser root e poi cambiare il possessore dei file con il comando chown in questo modo: cd /usr/local chown -R postgres.postgres pgsql Abbiamo bisogno di informare il sistema che le librerie di pgsql sono installate. Aggiorniamo il file /etc/ld.so.conf aggiungendo la riga /usr/local/pgsql/lib e lanciando il comando /sbin/ldconfig Abbiamo quasi terminato. Dobbiamo impostare il database iniziale di PostgreSQL. Come utente postgres lanciamo il comando: /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data Facciamo partire postgres utilizzando il seguente script: su -c '/usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data >> /usr/local/pgsql/logs/server.log 2>&1' postgres & Abbiamo appena terminato l'installazione di PostgreSQL, non ci resta che configurare i file di configurazione che troverete nella directory /usr/local/pgsql/data/. Apriamo il file postgresql.conf con un editor di testo e settiamo la seguente opzione a true: tcpip_socket = true

15

16 Configurare Windows 2000 o XP Professional Come tutti gli applicativi sotto Microsoft Windows l'installazione del server web richiede poco tempo e pochi click. Si rivela quindi alla portata di tutti. La prima cosa da fare e` l'apertura del Pannello di Controllo e la selezione dell'icona Installazione Applicazioni. Una volta aperta la finestra di dialogo dobbiamo selezionare Aggiungi componenti di Windows ed aggiungere Internet Information Services (IIS) come da figura: Vi verra` richiesto il cd di installazione e terminata la procedura il software sara` installato sul vostro disco fisso. Procediamo ad una piccola configurazione tornando nel Pannello di Controllo, aprendo Strumenti di Amministrazione e cliccando su Internet Information Services. Apparira` la finestra in figura:

17 Apriamo il menu della figura cliccando con il tasto destro su Sito Web Predefinito e selezioniamo Proprieta` dal menu a scomparsa: apparira` la seguente finestra di dialogo. Configuriamo la home directory impostando il Percorso Locale attualmente impostato su c:\inetpub\wwwroot

18 Esempi di codice vulnerabile PHP e PostgreSQL Per i nostri test avremo bisogno di un database dove inserire le nostre tabelle. Per fare cio` logghiamoci nel sistema come utente postgres: su postgres e utilizziamo il comando: createdb nomedatabase Per le nostre prove chiamaremo il database testdb Se non l'abbiamo gia` fatto e` bene crearsi un utente per lavorare al database senza loggarsi come postgres. Io ho utilizzato il mio stesso nomeutente in modo da non usare flag durante la connessione al database da console. Il comando da utilizzare e`: createuser nomeutente Ora abbiamo accesso al server DBMS. Entriamo con le credenziali dell'utente appena creato e interfacciamoci al database test digitando il comando: psql testdb Abbiamo appena cominciato una sessione di comunicazione con il database test contenuto nel server PostgreSQL. Il nostro nuovo utente puo` tranquillamente entrare da locale ma non puo` entrare da una connessione esterna. Abbiamo quindi la necessita` di modificare il file di configurazione pg_hba.conf situato nella directory 'data' di pgsql. Io ho inserito le seguenti righe di configurazione che vanno bene per un server locale monoutente ma certo non per un server remoto. local all all password utenti host all all password utenti host all all password utenti Queste regole impostano Postgres in modo da richiede una password per l'accesso e, dopo tale autentificazione, il DBMS non ci dara` limitazioni se non quelle impostate al momento della creazione dell'utente. La dicitura password utenti dice a postgres di richiedere una password, imagazzinata in un file chiamato 'utenti' nella directory 'data' della home del server. Tale file ha la seguente struttura: nomeutente:passwordinchiaro Le password sono in chiaro quindi solo postgres deve poterci accedere.

19 Durante le nostre prove avremo bisogno essenziamente di due tabelle, create ad hoc per focalizzare l'attenzione sulla problematica, e alcuni dati fittizi. Creiamo la prima tabella nominativi tramite console: CREATE TABLE nominativi (nome VARCHAR(30), cognome VARCHAR(50)); ed inseriamo i seguenti dati: INSERT INTO nominativi (nome, cognome) VALUES ('mario', 'bianchi'); INSERT INTO nominativi (nome, cognome) VALUES ('giacomo', 'rossi'); INSERT INTO nominativi (nome, cognome) VALUES ('beppe', 'verdi'); INSERT INTO nominativi (nome, cognome) VALUES ('maria', 'bianchi'); Creiamo una seconda tabella lavoro : CREATE TABLE lavoro (ruolo VARCHAR(30), specializzazione VARCHAR(50)); ed inseriamo i dati: INSERT INTO lavoro (ruolo, specializzazione) VALUES ('ingegnere', 'supervisione'); INSERT INTO lavoro (ruolo, specializzazione) VALUES ('informatico', 'programmatore'); INSERT INTO lavoro (ruolo, specializzazione) VALUES ('manager', 'organizzazione'); INSERT INTO lavoro (ruolo, specializzazione) VALUES ('perito', 'tecnico'); Ora siamo pronti a lavorare lato scripting per mostrare la pericolosita` delle SQL Injection. Prepariamo due pagine: index.html e sql.php index.html contiene il seguente codice html: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN "http://www.w3.org/tr/html4/loose.dtd""> <html> <head> <title>sql Injection</title> <meta http-equiv="content-type" content="text/html; charset=utf- 8"> </head> <body> <form action="sql.php" method="post"> <input type="text" name="query"><input type="submit"> </form>

20 </body> </html> sql.php contiene il seguente codice php: <? $conn = pg_connect('dbname=testdb user=utente password=password'); $text = ''; if (get_magic_quotes_gpc() == 1) { // GPC attivate $text = stripslashes($_post['query']); } else { $text = $_POST['query']; } $query = pg_query($conn, 'SELECT * FROM nominativi WHERE nome=\''.$text.'\''); while ($row = pg_fetch_array($query)) { print $row['nome'].' '.$row['cognome']."<br>\n"; } pg_free_result($query); pg_close($conn);?> Il codice php e` stato strutturato il modo tale da funzionare su qualsiasi tipo di php, con e senza magic quotes. Se noi apriamo con un browser index.html ed inseriamo uno dei nomi che abbiamo precedentemente inserito (ad esempio 'mario') otteniamo la voce contenente il suo nome e il suo cognome come ci aspettiamo ma proviamo ad inserire un apice ('): Warning: pg_query() query failed: ERROR: parser: unterminated quoted string at or near "'''" at character 37 in / home/apache/www/sql/sql.php on line 12 Warning: pg_fetch_array(): supplied argument is not a valid PostgreSQL result resource in /home/apache/www/sql/sql.php on line 13 Warning: pg_free_result(): supplied argument is not a valid PostgreSQL result resource in /home/apache/www/sql/sql.php on line 16 Come era nostra intenzione mostrare, il codice e` vulnerabile. Questa enorme falla permette l'esecuzione di query arbitrarie al nostro database e a tutti i database ai quali abbiamo accesso. Abbiamo volutamente inserito due tabelle nel database per fare le prove con lo statement UNION. La sintassi UNION ci permette di unire piu` query SELECT in una e in questo caso puo` essere utilizzata per visualizzare dati ai quali non avremmo accesso. Il nostro scopo e` quello di evitare la visualizzazione dei dati

SPECIALE SQL INJECTION

SPECIALE SQL INJECTION INDICE SPECIALE SQL INJECTION Difficoltà: INTERMEDIA SQL INJECTION (INTRODUZIONE).pag.1 LA TECNICA..pag.1 TESTING pag.2 I PROBLEMI PIÙ DIFFUSI..pag.3 - ACCESSI NON DESIDERATI pag.3 - VISUALIZZARE DATI

Dettagli

BASI DI DATI http://www.diee.unica.it/~giacinto/bd. Cos è il PHP. Cos è il PHP. Esercitazione su PHP & MySQL

BASI DI DATI http://www.diee.unica.it/~giacinto/bd. Cos è il PHP. Cos è il PHP. Esercitazione su PHP & MySQL Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica Contatti BASI DI DATI http://www.diee.unica.it/~giacinto/bd Esercitazione su PHP & MySQL! Roberto Tronci! e-mail: roberto.tronci@diee.unica.it!

Dettagli

APPUNTI DI PHP : V INFORMATICA SEZIONE G

APPUNTI DI PHP : V INFORMATICA SEZIONE G APPUNTI DI PHP : V INFORMATICA SEZIONE G Prof. Conti R. mysql_connect() Apre una connessione verso un DB MySQL. $db = mysql_connect([$db_host[, $db_username[, $db_password[, $newlink[,$clientflags]]]]]);

Dettagli

A. Bardine - Introduzione a PostgreSQL. PostgreSQL è un software relazionale e ad oggetti per la gestione di basi di dati

A. Bardine - Introduzione a PostgreSQL. PostgreSQL è un software relazionale e ad oggetti per la gestione di basi di dati Basi di dati PostgreSQL è un software relazionale e ad oggetti per la gestione di basi di dati PostgreSQL è Open-Source ed il suo sviluppo procede da 15 anni il suo codice sorgente è quindi disponibile

Dettagli

Costruzione di Sit Web con PHP e MySQL. Lezione 7 - Esercitazione - Introduzione a MySQL: le tabelle, i tpi di dato, le query

Costruzione di Sit Web con PHP e MySQL. Lezione 7 - Esercitazione - Introduzione a MySQL: le tabelle, i tpi di dato, le query Costruzione di Sit Web con PHP e MySQL Lezione 7 - Esercitazione - Introduzione a MySQL: le tabelle, i tpi di dato, le query Esercitazione In questa lezione si farà insieme una seconda esercitazione che

Dettagli

Ministero dell Istruzione dell Università e della Ricerca M070 ESAME DI STATO DI ISTITUTO TECNICO INDUSTRIALE

Ministero dell Istruzione dell Università e della Ricerca M070 ESAME DI STATO DI ISTITUTO TECNICO INDUSTRIALE Pag. 1/1 Sessione ordinaria 2010 Seconda prova scritta Ministero dell Istruzione dell Università e della Ricerca M070 ESAME DI STATO DI ISTITUTO TECNICO INDUSTRIALE CORSO DI ORDINAMENTO Indirizzo: INFORMATICA

Dettagli

MySQL Database Management System

MySQL Database Management System MySQL Database Management System http://www.mysql.com/ DATABASE RELAZIONALI Un database è una collezione strutturata di informazioni. I database sono delle strutture nelle quali è possibile memorizzare

Dettagli

Basi di dati. Introduzione a PostgreSQL. K.Donno - Introduzione a PostgreSQL

Basi di dati. Introduzione a PostgreSQL. K.Donno - Introduzione a PostgreSQL Basi di dati Introduzione a PostgreSQL Introduzione a PostgreSQL PostgreSQL è un software relazionale e ad oggetti per la gestione di basi di dati PostgreSQL è Open-Source ed il suo sviluppo procede da

Dettagli

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

Laboratorio Progettazione Web PHP e MySQL. Andrea Marchetti IIT-CNR 2013/2014 Laboratorio Progettazione Web PHP e MySQL Andrea Marchetti IIT-CNR 2013/2014 Architettura di una applicazione Web Browser Web HTTP Server Web API Dati Presentation Application Storage PHP e DataBase Quando

Dettagli

2. Costruire un database con Apache, PHP e MySql

2. Costruire un database con Apache, PHP e MySql 2. Costruire un database con Apache, PHP e MySql Lo scopo di questa esercitazione è realizzare un server web e costruire un database accessibile attraverso Internet utilizzando il server Apache, il linguaggio

Dettagli

Questo punto richiederebbe uno sviluppo molto articolato che però a mio avviso va al di là delle possibilità fornite al candidato dal tempo a disposizione. Mi limiterò quindi ad indicare dei criteri di

Dettagli

[HOW-TO] Installazione e configurazione DBMS

[HOW-TO] Installazione e configurazione DBMS [HOW-TO] Installazione e configurazione DBMS Ai fini del corso sarà fondamentale possedere le capacità di installare e configurare correttamente almeno un DBMS sul proprio calcolatore. Vedremo in dettaglio

Dettagli

Pagine Asp. Pagine Asp

Pagine Asp. Pagine Asp Pagine Asp Architettura web Esistono alcune limitazioni alle applicazioni che si possono realizzare in HTML, ad esempio non è possibile costruire un sito web che consenta all utente di accedere ai dati

Dettagli

PHP 5. Accesso a database

PHP 5. Accesso a database PHP 5 Accesso a database PHP ed i database PHP funziona con molti database relazionali che includono: Oracle Access Postgres SQL Server MySQL Useremo MySQL poiché è semplice da usare, gratuito e molto

Dettagli

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

PHP e MySQL. Scripting server-side per accesso a DB MySQL PHP e MySQL Scripting server-side per accesso a DB MySQL Connessione a un DB MySQL Prima di accedere ai dati è necessario creare una connessione con il DB In PHP si utilizza la funzione mysql_connect,

Dettagli

A. Veneziani - Classe V Abacus - Elementi di elaborazione Web con supporto ai DB basati su ASP e Access

A. Veneziani - Classe V Abacus - Elementi di elaborazione Web con supporto ai DB basati su ASP e Access A. Veneziani - Classe V Abacus - Elementi di elaborazione Web con supporto ai DB basati su ASP e Access Prologo Parlando di tecnologie Web legate a Microsoft è naturale integrare le funzioni di ASP 1 con

Dettagli

Esercitazione 8. Basi di dati e web

Esercitazione 8. Basi di dati e web Esercitazione 8 Basi di dati e web Rev. 1 Basi di dati - prof. Silvio Salza - a.a. 2014-2015 E8-1 Basi di dati e web Una modalità tipica di accesso alle basi di dati è tramite interfacce web Esiste una

Dettagli

Applicazione ASP di esempio

Applicazione ASP di esempio Applicazione ASP di esempio Database in rete Prof. Claudio Maccherani Un server web è un programma che gira su un computer sempre collegato ad Internet e che mette a disposizione file, pagine e servizi.

Dettagli

PHP Survival Kit (Ovvero gestire un database MySQL tramite PHP)

PHP Survival Kit (Ovvero gestire un database MySQL tramite PHP) PHP Survival Kit (Ovvero gestire un database MySQL tramite PHP) Augusto Scatolini (webmaster@comunecampagnano.it) (a.scatolini@linux4campagnano.net) Miniguida n. 183 Ver. 1.0 aprile 2013 La prima guida

Dettagli

Laboratorio di Sistemi Programmare in Php con NetBeans Php. Programmare in Php con Xampp e NetBeans IDE

Laboratorio di Sistemi Programmare in Php con NetBeans Php. Programmare in Php con Xampp e NetBeans IDE Programmare in Php con Xampp e NetBeans IDE NetBeans è un IDE ben noto ai programmatori Java. Con esso si possono infatti costruire applicazioni desktop professionali dotate di interfaccia grafica, applicazioni

Dettagli

PHP 5. PHP ed i database. Database e tabelle. Struttura di un DB relazionale. Accesso a database

PHP 5. PHP ed i database. Database e tabelle. Struttura di un DB relazionale. Accesso a database PHP ed i database PHP 5 Accesso a database PHP funziona con molti database relazionale che includono: Oracle Access Postgres SQL Server MySQL Useremo MySQL poiché è semplice da usare, gratuito e molto

Dettagli

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

Laboratorio Progettazione Web PHP e MySQL - Lezione 9. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2011/2012 Laboratorio Progettazione Web PHP e MySQL - Lezione 9 Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2011/2012 Architettura di una applicazione Web Browser Web HTTP Server Web PHP Dati View Control

Dettagli

WHITE PAPER Per Sql-Injection si intendono comunemente tutti quegli attacchi ad un'applicazione, solitamente Web, in cui il programma esegue query su di un database SQL utilizzando variabili passate dall'utente

Dettagli

La principale particolarità del web dinamico è la possibilità di variare i contenuti delle pagine in base alle richieste degli utenti.

La principale particolarità del web dinamico è la possibilità di variare i contenuti delle pagine in base alle richieste degli utenti. La principale particolarità del web dinamico è la possibilità di variare i contenuti delle pagine in base alle richieste degli utenti. Questa possibilità si materializza attraverso i meccanismi che permettono

Dettagli

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

Data Base. Master Bio Info Reti e Basi di Dati Lezione 6 Data Base 1 Sommario I concetti fondamentali. Database Relazionale.. Query e SQL MySql, Creazione di un db in MySQL con PHPmyAdmin Creazione database e delle Tabelle Query Inserimento Ricerca Modifica

Dettagli

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

Laboratorio Progettazione Web PHP e MySQL - Lezione 9. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2012/2013 Laboratorio Progettazione Web PHP e MySQL - Lezione 9 Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2012/2013 Architettura di una applicazione Web Browser Web HTTP Server Web API Dati Presentation

Dettagli

Data Base in Internet

Data Base in Internet Data Base in Internet Esempio di applicazione ASP Prof. Claudio Maccherani Un applicazione che interroghi un database remoto in un server Web è scritta in ASP (Active Server Page) se piattaforma NT / IIS

Dettagli

ESAME DI STATO DI ISTITUTO TECNICO INDUSTRIALE CORSO SPERIMENTALE Progetto ABACUS SIMULAZIONE PROVA SCRITTA DI INFORMATICA

ESAME DI STATO DI ISTITUTO TECNICO INDUSTRIALE CORSO SPERIMENTALE Progetto ABACUS SIMULAZIONE PROVA SCRITTA DI INFORMATICA Istituto di Istruzione Superiore Alessandrini - Marino ESAME DI STATO DI ISTITUTO TECICO IDUSTRIALE CORSO SPERIMETALE Progetto ABACUS SIMULAZIOE PROVA SCRITTA DI IFORMATICA La società PcTeramo srl è una

Dettagli

RELAZIONE SCRITTA RELATIVA AL PROGRAMMA GESTIONE MEDIAWORLD

RELAZIONE SCRITTA RELATIVA AL PROGRAMMA GESTIONE MEDIAWORLD Baroni Nicoletta, Carini Giulia, Valentina Porchera, Christian Pala 4C Mercurio RELAZIONE SCRITTA RELATIVA AL PROGRAMMA GESTIONE MEDIAWORLD Traccia del problema: Realizzare la procedura in php con Mysql

Dettagli

M070 ESAME DI STATO DI ISTITUTO TECNICO INDUSTRIALE

M070 ESAME DI STATO DI ISTITUTO TECNICO INDUSTRIALE Pag. 1/1 Sessione ordinaria 2009 Seconda prova scritta M070 ESAME DI STATO DI ISTITUTO TECNICO INDUSTRIALE CORSO DI ORDINAMENTO Indirizzo: INFORMATICA Tema di: INFORMATICA (Testo valevole per i corsi di

Dettagli

Nozioni di base sull utilizzo di PHP e di MySQL

Nozioni di base sull utilizzo di PHP e di MySQL Nozioni di base sull utilizzo di PHP e di MySQL Che cos è PHP? Mi sento in dovere prima di iniziare ad illustrare le nozioni di base di PHP introdurre dicendo PHP che cos è in sostanza; fino a qualche

Dettagli

19. LA PROGRAMMAZIONE LATO SERVER

19. LA PROGRAMMAZIONE LATO SERVER 19. LA PROGRAMMAZIONE LATO SERVER Introduciamo uno pseudocodice lato server che chiameremo Pserv che utilizzeremo come al solito per introdurre le problematiche da affrontare, indipendentemente dagli specifici

Dettagli

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

Corso di Informatica. Prerequisiti. Modulo T3 B3 Programmazione lato server. Architettura client/server Conoscenze generali sui database Corso di Informatica Modulo T3 B3 Programmazione lato server 1 Prerequisiti Architettura client/server Conoscenze generali sui database 2 1 Introduzione Lo scopo di questa Unità è descrivere gli strumenti

Dettagli

MySQL Command Line Client: operazioni fondamentali

MySQL Command Line Client: operazioni fondamentali MySQL Command Line Client: operazioni fondamentali INTRODUZIONE Il RDBMS MySQL, oltre a fornire un applicazione che abbia un interfaccia user-friendly, ha a disposizione anche un altro client, che svolge

Dettagli

Lavorare con MySQL Parte Prima.

Lavorare con MySQL Parte Prima. Lavorare con MySQL Parte Prima. Data la particolarità dell argomento, ho deciso di dividerlo in due lezioni. Nella prima, si parlerà diffusamente di MySQL, cos è un DBMS, cos è l SQL, i campi supportati

Dettagli

SQL Injection The dark side of webapplication *** Siamo davvero certi che chi gestisce i nostri dati sensibili lo faccia in modo sicuro?

SQL Injection The dark side of webapplication *** Siamo davvero certi che chi gestisce i nostri dati sensibili lo faccia in modo sicuro? SQL Injection The dark side of webapplication *** Siamo davvero certi che chi gestisce i nostri dati sensibili lo faccia in modo sicuro? Che cos'e' SQL? Acronimo di 'Structured Query Language E' un linguaggio

Dettagli

Quesiti 6 e 7) - 9 - Creiamo il file query4.php su una piattaforma OPEN SOURCE usando in linguaggio PHP ospitato su un webserver APACHE per interrogare un database MYSQL. Tale file verrà attivato cliccando

Dettagli

PHP. Per poter interagire con i dati che si trovano sul server remoto occorrono strumenti server-side.

PHP. Per poter interagire con i dati che si trovano sul server remoto occorrono strumenti server-side. PHP Il linguaggio HTML e i linguaggi di scripting come Javascript impongono alcune limitazioni alle applicazioni che si possono realizzare : per esempio non è possibile costruire un sito Web che consenta

Dettagli

MySQL Controllare gli accessi alla base di dati A cura di Silvio Bonechi per http://www.pctrio.com

MySQL Controllare gli accessi alla base di dati A cura di Silvio Bonechi per http://www.pctrio.com MySQL Controllare gli accessi alla base di dati A cura di Silvio Bonechi per http://www.pctrio.com 15.03.2006 Ver. 1.0 Scarica la versione pdf ( MBytes) Nessuno si spaventi! Non voglio fare né un manuale

Dettagli

Utilizzare PHP 5. Le variabili GET e POST

Utilizzare PHP 5. Le variabili GET e POST Utilizzare PHP 5 Corso Interazione Uomo Macchina AA 2005/2006 Le variabili GET e POST La principale particolarità del web dinamico è la possibilità di variare i contenuti delle pagine in base alle richieste

Dettagli

APPENDICE B Le Active Server Page

APPENDICE B Le Active Server Page APPENDICE B Le Active Server Page B.1 Introduzione ad ASP La programmazione web è nata con la Common Gateway Interface. L interfaccia CGI tuttavia presenta dei limiti: ad esempio anche per semplici elaborazioni

Dettagli

Remote SQL Command Execution

Remote SQL Command Execution Remote SQL Command Execution Spesso si ha a che fare con SQL Injection se ci si trova nel campo della sicurezza informatica, ma non sempre si è a conoscenza di quanto una vulnerabilità del genere può essere

Dettagli

PHP E MYSQL CREAZIONE DI UN NUOVO DATABASE DAL PHPMYADMIN

PHP E MYSQL CREAZIONE DI UN NUOVO DATABASE DAL PHPMYADMIN PHP E MYSQL CREAZIONE DI UN NUOVO DATABASE DAL PHPMYADMIN Il metodo migliore per creare nuovi DB è quello di usare l interfaccia del PHPMYADMIN (che viene installata automaticamente con il pacchetto easy

Dettagli

Corso di Web Programming

Corso di Web Programming 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

Dettagli

MODULO 1 PARTE 3. Programmazione (scripting) server-side con PHP 3.b Interazione con un database (MySQL Server)

MODULO 1 PARTE 3. Programmazione (scripting) server-side con PHP 3.b Interazione con un database (MySQL Server) MODULO 1 PARTE 3 Programmazione (scripting) server-side con PHP 3.b Interazione con un database (MySQL Server) Goy - a.a. 2009/2010 Programmazione Web 1 Informazione persistente Se vogliamo tener traccia

Dettagli

Installazione di Apache 2.2 Installazione di PHP 5.4 Installazione di MySQL 5.5 Configurazione e test di PHP-MySQL con l'estensione mysqli e mysql

Installazione di Apache 2.2 Installazione di PHP 5.4 Installazione di MySQL 5.5 Configurazione e test di PHP-MySQL con l'estensione mysqli e mysql Installare Apache 2.2, PHP 5.4, MySQL 5.5 su Windows In questo tutorial mostreremo in dettaglio le procedure di installazione e configurazione di Apache 2.2, PHP 5.4 e MySQL 5.5 su Windows XP/7. Il nostro

Dettagli

L interfaccia a riga di comando di MySql

L interfaccia a riga di comando di MySql L interfaccia a riga di comando di MySql Una volta completata la procedura di installazione possiamo finalmente testare le funzionalità di MySQL. Sia che ci si trovi in ambiente Linux che Windows, l'interfaccia

Dettagli

Applicazione client-server in PHP con database MySQL

Applicazione client-server in PHP con database MySQL Applicazione client-server in PHP con database MySQL Emanuele Scapin 1 1 Liceo Statale F.Corradini, via Milano 1, 36016 Thiene 30/05/2012 1 Premessa Dopo la trattazione di argomenti teorici di progettazione

Dettagli

FileMaker 12. Guida ODBC e JDBC

FileMaker 12. Guida ODBC e JDBC FileMaker 12 Guida ODBC e JDBC 2004 2012 FileMaker, Inc. Tutti i diritti riservati. FileMaker, Inc. 5201 Patrick Henry Drive Santa Clara, California 95054 FileMaker e Bento sono marchi di FileMaker, Inc.

Dettagli

RELAZIONE SCRITTA RELATIVA AL PROGRAMMA DI GESTIONE TABELLA ATTORI

RELAZIONE SCRITTA RELATIVA AL PROGRAMMA DI GESTIONE TABELLA ATTORI Nicoletta Barbaro 4C Mercurio TRACCIA DEL PROBLEMA: RELAZIONE SCRITTA RELATIVA AL PROGRAMMA DI GESTIONE TABELLA ATTORI Un'azienda che distribuisce film in formato dvd chiede ad una software house(4c mercurio)

Dettagli

Università degli Studi di Cagliari Corso di Laurea in Ingegneria delle Telecomunicazioni. http://www.diee.unica.it/~giacinto/bd

Università degli Studi di Cagliari Corso di Laurea in Ingegneria delle Telecomunicazioni. http://www.diee.unica.it/~giacinto/bd Università degli Studi di Cagliari Corso di Laurea in Ingegneria delle Telecomunicazioni BASI DI DATI http://www.diee.unica.it/~giacinto/bd Esercitazione su PHP & PostgreSQL Docente: Giorgio Giacinto A.A.

Dettagli

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

1) Il client(browser utilizzato) invia al server i dati inseriti dall utente. Server 2) Il Server richiama l'interprete PHP il quale esegue i comandi contenuti nel file.php specificato nell'attributo action del tag form creando un file HTML sulla base dei dati inviati dall utente 1) Il

Dettagli

DATABASE IN RETE E PROGRAMMAZIONE LATO SERVER

DATABASE IN RETE E PROGRAMMAZIONE LATO SERVER DATABASE IN RETE E PROGRAMMAZIONE LATO SERVER L architettura CLIENT SERVER è l architettura standard dei sistemi di rete, dove i computer detti SERVER forniscono servizi, e computer detti CLIENT, richiedono

Dettagli

Introduzione a PHP Gestione dei Dati e della Conoscenza

Introduzione a PHP Gestione dei Dati e della Conoscenza Introduzione a PHP Gestione dei Dati e della Conoscenza Diego De Cao, Roberto Basili {decao,basili}@info.uniroma2.it a.a. 2008/2009 PHP Overview PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor")

Dettagli

Corso di Web programming Modulo T3 A2 - Web server

Corso di Web programming Modulo T3 A2 - Web server Corso di Web programming Modulo T3 A2 - Web server 1 Prerequisiti Pagine statiche e dinamiche Pagine HTML Server e client Cenni ai database e all SQL 2 1 Introduzione In questa Unità si illustra il concetto

Dettagli

Sicurezza Informatica: Tecniche di SQL INJECTION

Sicurezza Informatica: Tecniche di SQL INJECTION Sicurezza Informatica: Tecniche di SQL INJECTION Pietro Bongli Aprile 2004 N.B. L'informazione contenuta in queste pagine è divulgata per scopi puramente didattici e non per ni illegali. Structured Query

Dettagli

Architettura a tre livelli (1)

Architettura a tre livelli (1) Elaborazione Automatica dei Dati Php e MySQL Enrico Cavalli Anno Accademico 2012-2013 Architettura a tre livelli (1) Le applicazioni sono sviluppate secondo una architettura a tre livelli, affermatasi

Dettagli

Lavorare con MySQL Parte Seconda.

Lavorare con MySQL Parte Seconda. Lavorare con MySQL Parte Seconda. PHP, dalla versione 4.0, usufruisce difunzioni native per colloquiare con MySQL, senza appoggiarsi ad alcuna libreria o modulo esterno. In questa lezione verranno esaminate

Dettagli

The world s most advanced class on PostgreSQL o quasi! 4 Marzo 8 Aprile 2015. L'Antipasto 11 Marzo

The world s most advanced class on PostgreSQL o quasi! 4 Marzo 8 Aprile 2015. L'Antipasto 11 Marzo The world s most advanced class on PostgreSQL o quasi! 4 Marzo 8 Aprile 2015 L'Antipasto 11 Marzo Riepilogo della puntata precedente ##################### Avviamo la macchina virtuale #####################

Dettagli

Guida a PHP. Primi esempi

Guida a PHP. Primi esempi Guida a PHP Php è un modulo aggiuntivo per web server che permette di creare delle pagine web dinamiche. Una pagina in Php è composta sia da tag html, sia da parti in codice di programmazione Php. Ogni

Dettagli

Attacchi alle applicazioni web: SQL injection e Cross-site scripting (XSS)

Attacchi alle applicazioni web: SQL injection e Cross-site scripting (XSS) UNIVERSITÀ DEGLI STUDI DI CATANIA Facoltà di Ingegneria Corso di laurea Specialistica in Ingegneria Informatica Tesina di Sicurezza nei Sistemi informativi Simona Ullo Attacchi alle applicazioni web: SQL

Dettagli

Apache 2, PHP5, MySQL 5

Apache 2, PHP5, MySQL 5 Installazione di Apache 2, PHP5, MySQL 5 Corso Interazione Uomo Macchina AA 2005/2006 Installazione e Versioni Considerazione le versioni più recenti dei vari software così da poterne sperimentare le caratteristiche

Dettagli

XTOTEM offline sul proprio PC

XTOTEM offline sul proprio PC Pagina 1 XTOTEM offline sul proprio PC Sommario XTOTEM offline sul proprio PC...1 Introduzione...2 1. Installare IIS...3 2. Installare un programma FTP...5 Installazione di Filezilla...5 Sistema di protezione

Dettagli

RELAZIONE SCRITTA RELATIVA AL PROGRAMMA DI GESTIONE SITO E-COMMERCE

RELAZIONE SCRITTA RELATIVA AL PROGRAMMA DI GESTIONE SITO E-COMMERCE RELAZIONE SCRITTA RELATIVA AL PROGRAMMA DI GESTIONE SITO E-COMMERCE CHIARA FERRARI 5I MERCURIO INDICE: 1. TRACCIA DEL PROBLEMA 2. SVILUPPO DEL PROGETTO (ENTITA, ATTRIBUTI) 3. SCHEMA E-R DELLA BASE DEI

Dettagli

ASP: DOMANDE E RISPOSTE (Q&A)

ASP: DOMANDE E RISPOSTE (Q&A) Autore: Classe: Nicola Ceccon QUINTA INFORMATICA (5IA) Anno scolastico: 2003/2004 Scuola: Itis Euganeo ASP: DOMANDE E RISPOSTE (Q&A) Dispensa La dispensa presenta i contenuti fondamentali di ASP nella

Dettagli

Apache MySQL PHP - FTP

Apache MySQL PHP - FTP Apache MySQL PHP - FTP Scelta del software, Installazione e configurazione Ivan Grimaldi grimaldi.ivan@gmail.com HcssLug GNU/LINUX USERS GROUP Outline Cenni sul funzionamento di un WebServer Apache, PHP,

Dettagli

Tecnologie e Programmazione Web

Tecnologie e Programmazione Web Presentazione 1 Tecnologie e Programmazione Web Html, JavaScript e PHP RgLUG Ragusa Linux Users Group SOftware LIbero RAgusa http://www.solira.org - Nunzio Brugaletta (ennebi) - Reti 2 Scopi di una rete

Dettagli

Come installare Apache 2.2, PHP 5.2 e MySQL 5 su Windows 2000/XP (di Andrea Turso)

Come installare Apache 2.2, PHP 5.2 e MySQL 5 su Windows 2000/XP (di Andrea Turso) Come installare Apache 2.2, PHP 5.2 e MySQL 5 su Windows 2000/XP (di Andrea Turso) Introduzione Il nostro scopo principale è quello di ottenere una piattaforma di sviluppo per poter realizzare e testare

Dettagli

Introduzione ai servizi di Linux

Introduzione ai servizi di Linux Introduzione ai servizi di Linux Premessa Adios è un interessante sistema operativo Linux basato sulla distribuzione Fedora Core 6 (ex Red Hat) distribuito come Live CD (con la possibilità di essere anche

Dettagli

MySQL Database Management System

MySQL Database Management System MySQL Database Management System II parte Progetto gestione booking prenotazioni on-line 1. Progettazione e creazione struttura database che chiameremo booking. 2. Progettazione e creazione di un form

Dettagli

3. Programmazione con le pagine ASP classiche

3. Programmazione con le pagine ASP classiche LIBRERIA WEB 3. Programmazione con le pagine ASP classiche 1. Le pagine ASP in generale ASP (Active Server Pages) è una tecnologia Microsoft che consente di scrivere codice eseguibile (script) lato server,

Dettagli

PHP e Structured Query Language

PHP e Structured Query Language Esercitazioni del corso di Tecnologie per la Comunicazione Aziendale PHP e Structured Query Language Marco Loregian loregian@disco.unimib.it www.siti.disco.unimib.it/didattica/tca2008 Interrogazioni (ripasso)

Dettagli

GESTIONE DI MDB in WEB

GESTIONE DI MDB in WEB GESTIONE DI MDB in WEB Il presente documento riporta un esempio generico di gestione di un database di Access. Il lettore può personalizzare in base alle proprie esigenze sia il contenuto del database,

Dettagli

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

PHP. A. Lorenzi, R. Giupponi, D. Iovino LINGUAGGI WEB. LATO SERVER E MOBILE COMPUTING Atlas. Copyright Istituto Italiano Edizioni Atlas PHP A. Lorenzi, R. Giupponi, D. Iovino LINGUAGGI WEB. LATO SERVER E MOBILE COMPUTING Atlas Copyright Istituto Italiano Edizioni Atlas Programmazione lato server PHP è un linguaggio che estende le funzionalità

Dettagli

Corso di PHP. Prerequisiti. 1 - Introduzione

Corso di PHP. Prerequisiti. 1 - Introduzione Corso di PHP 1 - Introduzione 1 Prerequisiti Conoscenza HTML Principi di programmazione web Saper progettare un algoritmo Saper usare un sistema operativo Compilazione, link, esecuzione di programmi Conoscere

Dettagli

MANUALE ESSENZIALE MYSQL

MANUALE ESSENZIALE MYSQL Autore: Classe: Luciano Viviani TERZA INFORMATICA SERALE (3IS) Anno scolastico: 2003/2004 Scuola: Itis Euganeo MANUALE ESSENZIALE MYSQL Manuale La dispensa vuole fornire agli studenti delle classi quinte

Dettagli

ISTRUZIONI PASSO PASSO PER CREARE UN SITO CON JOOMLA SU ALTERVISTA

ISTRUZIONI PASSO PASSO PER CREARE UN SITO CON JOOMLA SU ALTERVISTA ISTRUZIONI PASSO PASSO PER CREARE UN SITO CON JOOMLA SU ALTERVISTA REGISTRARSI AL SITO ALTERVISTA, PER OTTENERE SPAZIO WEB GRATUITO o Andare sul sito it.altervista.org o Nel riquadro al centro, scrivere

Dettagli

--- PREMESSE INTRODUZIONE. .:luxx:.

--- PREMESSE INTRODUZIONE. .:luxx:. SQL INJECTION --- SICUREZZA.:luxx:. PREMESSE Questa guida accenna ad alcuni metodi di SQL injection e si sofferma sulla prevenzione di tali attacchi, per comprendere al meglio il testo è necessaria una

Dettagli

Il sito della scuola con

Il sito della scuola con Incontro in aula virtuale del 24 gennaio 2013 Il sito della scuola con La sicurezza di un sito Joomla Il Pacchetto Joomla pasw quickstart versione 2.0. a cura di Gianluigi Pelizzari IIS Fantoni Clusone

Dettagli

Guida a PhpMyAdmin. Introduzione

Guida a PhpMyAdmin. Introduzione Guida a PhpMyAdmin Introduzione Non è detto che, per installare uno script, si debba necessariamente conoscere il Php. I puristi della programmazione inorridiranno certamente leggendo questa frase ma è

Dettagli

Gate Manager. 1 Indice. Table of Contents. your partner

Gate Manager. 1 Indice. Table of Contents. your partner 1 Indice Table of Contents 1Indice...1 2Introduzione...2 3Cosa vi serve per cominciare...2 4La console di amministrazione...3 4.1Installazione della console di amministrazione...3 4.2Avviare la console

Dettagli

Laboratorio di Basi di Dati e Web

Laboratorio di Basi di Dati e Web Laboratorio di Basi di Dati e Web Docente: Alberto Belussi Lezione 1 SQL Structured Query Language SQL è stato definito nel 1973 ed è oggi il linguaggio più diffuso per i DBMS relazionali Il linguaggio

Dettagli

La tecnologia ASP.NET e i database

La tecnologia ASP.NET e i database Introduzione alle pagine dinamiche Con il linguaggio HTML si possono creare delle pagine Web statiche. Se invece volessimo creare delle pagine Web dinamiche, pagine il cui codice html viene generato al

Dettagli

GUIDA ALLA PRIMA INSTALLAZIONE DI LIDRASHOP v 1.6.X

GUIDA ALLA PRIMA INSTALLAZIONE DI LIDRASHOP v 1.6.X GUIDA ALLA PRIMA INSTALLAZIONE DI LIDRASHOP v 1.6.X In questa guida saranno analizzati i semplici passaggi per la messa in opera del motore di e-commerce LIDRASHOP. Prima però ecco alcuni accorgimenti

Dettagli

A. Lorenzi Pagine ASP

A. Lorenzi Pagine ASP Pagine ASP Web server software per la gestione di un computer host Internet oppure di un server di rete, che mette a disposizione dati o applicativi per gli utenti della rete Web server IIS (Internet Information

Dettagli

SCP - Scuola di Calcolo Parallelo - Scheduler per programmi paralleli. Mattia Sessolo I.T.I.S. V.Volterra San Donà di Piave

SCP - Scuola di Calcolo Parallelo - Scheduler per programmi paralleli. Mattia Sessolo I.T.I.S. V.Volterra San Donà di Piave SCP - Scuola di Calcolo Parallelo - Scheduler per programmi paralleli Mattia Sessolo I.T.I.S. V.Volterra San Donà di Piave 2006-2007 Introduzione Questo programma è stato ideato per facilitare e automatizzare

Dettagli

Magento - guida all'installazione

Magento - guida all'installazione Magento - guida all'installazione a cura di Luca Soave 1- Premesse In questa guida impareremo come ottenere un sito web su base Magento allocato in un Ubuntu Server su macchina vistuale, basandoci sulle

Dettagli

Laboratorio di Basi di Dati

Laboratorio di Basi di Dati Laboratorio di Basi di Dati Docente: Alberto Belussi Lezione 1 SQL SQL (Structured Query Language) è stato definito nel 1973 ed è oggi il linguaggio più diffuso per i DBMS relazionali. Sono stati proposti

Dettagli

SOLUZIONE SECONDA PROVA INFORMATICA ITC ESAME DI STATO 2002/2003 TRAMONTANA

SOLUZIONE SECONDA PROVA INFORMATICA ITC ESAME DI STATO 2002/2003 TRAMONTANA Esame di Stato Istituto Tecnico Commerciale CORSO SPERIMENTALE Progetto "MERCURIO" Indirizzo: PROGRAMMATORI Soluzione della Seconda Prova - Tema di: INFORMATICA Anno Scolastico: 2002-2003 Riflessioni e

Dettagli

Laboratorio di sistemi Web Application in Php5 Php

Laboratorio di sistemi Web Application in Php5 Php Applicazioni web con Xampp, Php5 e NetBeans 6.5 (Windows) Vogliamo ora riscrivere a titolo di prova un'applicazione web precedentemente scritta in Java (si legga l'articolo all'indirizzo http://www.mauriziocozzetto.net/pdf/dao_mysql.pdf).

Dettagli

SQL INJECTION. Details and Prevention. Programmazione Sicura. Giuseppe Pietravalle. Giuseppe Santaniello

SQL INJECTION. Details and Prevention. Programmazione Sicura. Giuseppe Pietravalle. Giuseppe Santaniello SQL INJECTION Details and Prevention Giuseppe Santaniello Giuseppe Pietravalle Programmazione Sicura A.A. 2014/2015 OWASP Open Web Application Security Project (OWASP) è un progetto open-source per la

Dettagli

Simulazione seconda prova Esame di Stato Sito Web - Gestione di un centro agroalimentare all ingrosso (Parte seconda)

Simulazione seconda prova Esame di Stato Sito Web - Gestione di un centro agroalimentare all ingrosso (Parte seconda) Simulazione seconda prova Esame di Stato Sito Web - Gestione di un centro agroalimentare all ingrosso (Parte seconda) Il candidato realizzi inoltre il sito Internet del centro che deve permettere, tra

Dettagli

Backup e Restore di un database PostgreSQL Sandro Fioravanti INFN-LNF

Backup e Restore di un database PostgreSQL Sandro Fioravanti INFN-LNF SPARC-CS-12/001 20 Gennaio 2012 Backup e Restore di un database PostgreSQL Sandro Fioravanti INFN-LNF Abstract Vengono descritte le procedure di backup e restore dei dati memorizzati in un database di

Dettagli

Installare e configurare Apache, PHP, MySQL e PHPMyAdmin su OS X Lion 10.7

Installare e configurare Apache, PHP, MySQL e PHPMyAdmin su OS X Lion 10.7 Installare e configurare Apache, PHP, MySQL e PHPMyAdmin su OS X Lion 10.7 Luigi Maggio Personal web portforlio: www.luigimaggio.altervista.org Indirizzo e- mail: luis_may86@libero.it Installare e configurare

Dettagli

RELAZIONE RELATIVA ALLA GESTIONE DEL SITO DI E-COMMERCE

RELAZIONE RELATIVA ALLA GESTIONE DEL SITO DI E-COMMERCE Gabriele Fiorani 5^D Mercurio 2012/2013 RELAZIONE RELATIVA ALLA GESTIONE DEL SITO DI E-COMMERCE TRACCIA DEL PROBLEMA Realizzare un sito di tipo e-commerce che consenta di gestire l intera procedura informatica

Dettagli

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

Corso di Sicurezza Informatica. Sicurezza del software. Ing. Gianluca Caminiti Corso di Sicurezza Informatica Sicurezza del software Ing. Gianluca Caminiti SQL Injection Sommario Premessa sul funzionamento dei siti dinamici SQL Injection: Overview Scenari di attacco: Errata gestione

Dettagli

Passaggio dei dati tra HTML e PHP : array superglobali $_GET e $_POST

Passaggio dei dati tra HTML e PHP : array superglobali $_GET e $_POST Passaggio dei dati tra HTML e PHP : array superglobali $_GET e $_POST I valori inviati da un modulo (con metodo post o get), sono automaticamente memorizzati da PHP sia in variabili di ambiente associate

Dettagli

Ambiente Virtuale Inclusivo per la Persona Autistica MANUALE OPERATORE. Release 1.0-13/10/09. Copyright Lynx 2009 http://www.lynxlab.

Ambiente Virtuale Inclusivo per la Persona Autistica MANUALE OPERATORE. Release 1.0-13/10/09. Copyright Lynx 2009 http://www.lynxlab. MANUALE OPERATORE Release 1.0-13/10/09 Copyright Lynx 2009 http://www.lynxlab.com Indice generale MANUALE OPERATORE...1 1.1 Definizioni...3 1.2 Ambienti...3 1.3 Release e copyright...3 2. Utenti...4 2.1

Dettagli

Uso dei data bases con PHP. Prof. Francesco Accaino Iis Altiero Spinelli Sesto Sa Giovanni

Uso dei data bases con PHP. Prof. Francesco Accaino Iis Altiero Spinelli Sesto Sa Giovanni Uso dei data bases con PHP Prof. Francesco Accaino Iis Altiero Spinelli Sesto Sa Giovanni MDAC MDAC è l acronimo di Microsoft Data Access Component e fa parte della tecnologia Microsoft denominata Universal

Dettagli

La gestione documentale con il programma Filenet ed il suo utilizzo tramite la tecnologia.net. di Emanuele Mattei (emanuele.mattei[at]email.

La gestione documentale con il programma Filenet ed il suo utilizzo tramite la tecnologia.net. di Emanuele Mattei (emanuele.mattei[at]email. La gestione documentale con il programma Filenet ed il suo utilizzo tramite la tecnologia.net di Emanuele Mattei (emanuele.mattei[at]email.it) Introduzione In questa serie di articoli, vedremo come utilizzare

Dettagli