Annunci
Al termine di una lunga sperimentazione ecco a voi URL Inspector.  Questo strumento permette di analizzare una URL Internet e dopo avere effettuato le relative interrogazioni ai diversi whois server, nonchè dopo aver parserizzato le relative risposte, compone l'esito in un formato direttamete leggibile in modo da ridurre i tempi di ricerca. Lo strumento è comunque ancora in fase beta, vista la complessità dei controlli che si devono eseguire e l'innumerevole combinazione di URL che si possono comporre. Presto dunque, sperimentate la vostra ricerca, così da poter contribuire all'uscita della prima versione. Pagina di URL Inspector
PiXAServer

Il progetto PiXAServer è un sistema di gestione dei contenuti (CMS) con una particolare attenzione alla sicurezza ed alla leggerezza utilizzando anche la tecnologia Ajax. La sua realizzazione è stata effettuata tenendo inmente le funzionalità offerte dai sistemi di Application Service noti al mondo Java. L'installatore può realizzare le proprie pagine ed i relativi contenuti senza dover, forzatamente, conoscere tutto il framework che le ingloba. Le uniche conoscenze richieste sono : codice html e ... logica, insieme ad un pizzico di xml. Il resto viene ereditato. Le informazioni presentate possono provenire sia da una base dati (MySQL) sia da un file statico. I documenti  possono essere creati sia in linguaggio html sia utilizzando il semplice linguaggio del motore  di template PiXATemplate.



Secure Authentication System PDF Print E-mail
Written by Luca Guerrieri   
Thursday, 08 July 2010 18:16

A distanza di 2 anni dalla pubblicazione del primo articolo su questo sistema di autenticazione realizzato per PiXAServer (l'application server in PHP pubblicato nell'apposita area di questo sito) pubblico l'ultima versione e, visto che il progetto non solo è maturo ma è anche utilizzabile come modulo standalone per le atenticazioni ho deciso di rilasciarlo con il nome di Secure Authentication System.

Si tratta di un sistema che realizza dei controlli sugl’identificativi di Sessione (SessionID), in modo da avere sotto controllo sia il tipo di accessi sia l’associazione fra credenziali ed appunto l’identificativo di Sessione. In pratica, la visualizzazione dei contenuti è permessa solo se sono presenti, contemporaneamente, diverse condizioni. Una peculiarità del Secure Authentication System è che realizza la fusione e la criptazione delle credenziali di accesso, inserite dall'utente, direttamente lato client, cioè dopo che l'utente ha inserito le proprie credenziali l'invio avviene in modalità criptata. Il client, infatti, realizza l'hashing md5 di : username, password e di una stringa, generata casualmente dal sistema e visualizzata direttamente a video (sistema CAPTCHA). L’hash di queste informazioni viene poi inviato al server di autenticazione. Quest'ultimo, ricevuta tale informazione, innanzitutto controlla che l'utente esista  (in caso negativo non prosegue e rilancia la pagina di login), in quel caso prova a generare la stessa stringa hash con le informazioni in suo possesso. Se l'esito è positivo vuol dire che non c'è stato nessuno che ha alterato i dati, altrimenti non consente le successive operazioni e rimanda immediatamente alla pagina di login.

  1. richiesta di login
  2. visualizzazione pagina di Login con avvio del client grafico per il successivo invio
  3. della stringa CAPTCHA per criptare le credenziali di accesso;
  4. inserimento da parte dell’utente delle credenziali di accesso criptate;
  5. invio delle credenziali di accesso al server
  6. il server controlla l’esistenza della username in caso affermativo procede altrimenti
  7. si ritorna al punto 2
  8. il server genera una stringa di hash composta dagli stessi dati inviati al client
  9. (Captcha + username + password)
  10. il server confronta le due stringhe hash (ricevuta e generata) nel caso siano uguali
  11. procede, altrimenti rimanda al punto 2;
  12. invio esito delle operazioni di login e successivo redirect all’area privata.

flusso

Schermata di LOGIN

login_no_title

In pratica il sistema di login ha le seguenti proprietà :

Trasmissione sicura delle credenziali d'accesso (criptate) da un client in esecuzione sulla macchina (peculiarità della tecnologia Flex) senza in realtà costringere l'utente ad installare un apposito software sul proprio computer ed inoltre usufruendo delle caratteristiche di multi-piattaforma.

Invio asincrono delle credenziali. Il sistema, di fatto, implementa una logica di autenticazione a chiave pubblica/chiave privata, ove la chiave pubblica è la combinazione di username e password e la chiave privata è di fatto la stringa casuale generata ed inviata al client sotto forma d'immagine (CAPTCHA). In questo modo un malintenzionato che intercetta il traffico sin dall'inizio, per scoprire le credenziali d’accesso, non sarebbe in grado di identificarle in quanto: nonostante venisse in possesso della stringa casuale non potrebbe scoprire la username, la password e la OTP con cui è stata generata in quanto viaggiano, verso il server, in forma criptata. Nell'ipotesi in cui riuscisse a conoscere username e password (per evitare di lasciare tracce nel sistema di logging) dovrebbe ogni volta intercettare la stringa casuale generata perché, funzionando come una OTP viene "bruciata" ad ogni login. Inoltre se il malintenzionato, riuscisse a scoprire la username e la password e quindi la stringa OTP non potrebbe portare a termine un attacco di Hjacking di Sessione poiché la sessione viene rigenerata al termine della procedura di login. In tal modo il sistema provvede autonomamente a controllare la congruità delle informazioni. In fine l’utente, nel caso di quest’ultimo tipo di attacco, riceverebbe l’informazione che “qualcun altro” sta utilizzando le sue credenziali.

Sicurezza a vari livelli, se l'utente non esiste non si procede ad ulteriori operazioni fra client e server, riducendo sia il carico di lavoro del server sia le possibilità di riuscita di un attacco.

Unicità delle credenziali d'accesso, l'utente usa sempre quelle assegnategli ma il sistema riceve un'insieme diverso ogni volta, come in un sistema O.T.P. (One Time Password) in caso non corrispondano l’utente viene informato da un apposito messaggio.

login_message_err_59

Elaborazione delle informazioni lato client completamente invisibile ad un malintenzionato che potrebbe accedere fisicamente alla macchina della vittima. La criptazione viene effettuata con un applicativo compilato e residente sul client, quindi non direttamente interpretabile (applicazione Flex su pagina html). In questo modo, il malintenzionato, non può sapere come viene composta la stringa di login.

Possibilità di applicare algoritmi proprietari di criptazione per aumentarne la segretezza (basta conoscere Javascript o mxml).

Delega della segretezza delle credenziali all'utente ed al gestore del sistema informatico.

Redirezionamento dell’utente, sin dalla fase di login, ad una comunicazione con protocollo https, per raggiungere una completa segretezza della comunicazione ed una sicura identificazione dell'utente sin dalle prime fasi di autenticazione.

Controllo della validità della Sessione ad ogni richiesta di una pagina. L'autenticazione, infatti, è basata sulle sessioni e non su IP, credenziali, ecc. in

Memorizzazione della sessione su database e non nel Cookie o in variabili d’ambiente accessibili ad ignoti, infatti si usa il cookie generato al login come se fosse un certificato, al solo fine di avere certezza che il client sia quello registrato.

sessione_attiva_obf

Controllo dell'esistenza di sessioni multiple, in quell'ipotesi i relativi utenti vengono costretti nuovamente al login.

Impossibilità dell'uso contemporaneo delle stesse credenziali, solo un utente alla volta può usare la sua username e password, se qualcun'altro le utilizza il legittimo proprietario viene informato e l'informazione viene registrata in un file di log

login_message_sessione_attiva-obf

Possibilità di sospendere una sessione attiva, causando il logout forzato di quell'utente.

Gestione dei livelli di accesso (amministratore / power user / user / guest ) completamente personalizzabili.

level

Registrazione / Ricorda password / Cambia password . Tipiche funzionalità per effettuare la registrazione di un utente (con relativo controllo dell’informazione inserita), sistema per cambiare autonomamente la password, sistema per ricordare la password rinviandola dopo un controllo sulla identità dell’utente (risposta a domanda segreta)

Memorizzazione della password in modo criptato. Questo permette di tenere segreta la password ma anche di rinviarla a richiesta all’indirizzo e-mail inserito in fase di registrazione.

username_password

Registrazione su file di log legato all'utente e su file di log di sistema di tutte le operazioni inerenti l’accesso

DESCRIZIONE

Per quanto riguarda la descrizione ritengo più semplice una immagine e qualche prova live.

 

Last Updated on Tuesday, 20 July 2010 08:36
 
Introduzione a PiXA Server PDF Print E-mail
Written by Luca Guerrieri   
Monday, 12 October 2009 21:40

Introduzione

Nel 2007 ero dinanzi all’ennesimo progetto che richiedeva una "soluzione AMP" cioè basata su Apache Mysql e Php.

Questo acronimo è divenuto ormai parte integrante del "www", infatti, si potrebbe dire che i guelfi (php-omani) ed i ghibellini (asp-omani) si contendono il trono mentre soggetti come i jsp-omani continuano a vivere un po’ ai margini (anche se in una posizione che io personalmente ammiro) del mondo Internet. Questo "insieme di script", così lo definisco, sono stati realizzati per poter mettere insieme tutte le mie esperienze nel mondo PHP, e per far sì da apprenderne altre come l’interfacciamento con tecnologie Xml e con classi utilizzate per criptare i dati senza dimenticare il motore PDF e grafico che correda il PHP di oggi.

La logica

L’idea fondamentale è quella di avere uno strumento nel web che ci permetta di gestire le sue funzionalità oltrechè d’implementarne altre, senza l’uso di moduli o applicativi ulteriori. Si vorrebbe un sistema che dall’area amministrazione sia completamente configurabile "al volo", realizzando da soli la pagina che si vuole, con immagini, tabelle o semplici testi; inoltre si vorrebbe uno strumento che usato dai professionisti, quest’ultimi non debbano per forza dimostrare di essere dei guru del web.

Questa idea è realizzabile grazie al connubio di PHP, Mysql, e non solo perché va di moda, Ajax.

Si vorrebbe insomma realizzare un vero Application Server che sia in grado di offrire tutti quei strumenti che permettono di costruire tutto ciò che serve con qualche click e (solo se fosse necessario) qualche riga di codice. Ma tutto ciò non esiste già? Certo penso che esista, io non l’ho trovato, sono infatti tantissimi i “pezzi" di codice ma nessuno è mai unito ad altri in una logica che lo porta a creare uno strumento unico.

Caratteristiche

PiXAServer è stato realizzato tenendo presente la sicurezza, molti metodi delle classi lavorano in private mode.

Il login all’area privata o di amministrazione, avviene attraverso un’applet che permette la sicura identificazione dell’utente in quella sessione non permettendone la sostituzione con meccanismi quali man-in-the-middle.

Altra caratteristica fondamentale è quella d’essere fornito di un potente motore di templating il PiXATemplate che permette di realizzare le proprie pagine, sia statiche sia dinamiche, grazie ad un semplice editor rche sarà reperibile all’interno dell’area amministrazione, così come si farebbe con un normale applicativo per base di dati.

Concetti

All’interno di PiXAServer sono stati implementati due concetti fondamentali: Placeholders&Data e Static&Dynamic. Il primo è utilizzato all'interno del motore di template PiXATemplate per la parte dedicata alla presentazione dei dati, il secondo (Static&Dynamic) interessa anch'esso la creazione di template ma viene usato per generare i dati.

Placeholders&Data

Quando organizziamo un documento HTML, inseriamo dei tag da prima vuoti e poi valorizzati; questa operazione esprime la nostra volontà d’inserire in un certo punto del documento un contenuto, ad esempio una immagine o una tabella o ancora del testo; l’immissione di un tag vuoto potremmo definirlo un Segnaposto (Placeholder) ove in seguito inseriremo dei contenuti (Dati); proprio su questa logica si sviluppa il concetto di Placeholders&Data. All’interno di modelli o di query possiamo decidere d’inserire un Placeholder che verrà sostituito al momento giusto da un Dato, in questo modo saremo liberi di scrivere modelli generici che conterranno dati provenienti da qualsiasi fonte, ad esempio un file xml, un array, una base di dati.

Static&Dynamic

I dati visualizzati all’interno di un sito possono essere originati in due modi: Statico o Dinamico; questo perché la loro fonte può essere: un file HTML, all’interno dello stesso file scriviamo i contenuti che vogliamo visualizzare; una base di dati oppure un file xml, un array ecc. Quando parliamo di Static dibbiamo pensare dunque a qualcosa di predefinito ed immutabile, quando parliamo di Dynamic dobbiamo invece pensare a qualcosa che verrà originato da un insieme di operazioni e che il suo valore o contenuto non è scrivibile a priori.

Esempio tipico sono le query su una base di dati:

Query A : SELECT id FROM nometabella LIMIT 1;

In questo caso interroghiamo la base dati utilizzando valori già conosciuti ed invariabili, come ad esempio il nome della tabella.

Query B : SELECT * FROM tabella WHERE id=’variabile';

In questo caso interroghiamo la base dati utilizzando valori variabili provenienti da un’altra operazione ( ad esempio l’esecuzione della Query A ), in questo tipo di query non siamo in grado a priori di sapere quale valore assumerà variabile quindi siamo in un ambiente dinamico.

Visita la relativa pagina del progetto oppure vai direttamente al download senza dimenticare di passare dal sito di test

Last Updated on Tuesday, 13 October 2009 14:23
 
Autenticazione sicura con Flex - PHP e MySQL PDF Print E-mail
User Rating: / 1
PoorBest 
Written by Luca Guerrieri   
Monday, 05 May 2008 02:00

Oggi ho pensato di presentarvi un progetto che ho sviluppato qualche tempo addietro, per :

1) imparare il PHP (bellissimo !)

2) realizzare un framework per creare siti internet secondo il pattern MVC.

3) imparare come è stato implementato l'object-orientation in php5.

Come dire se vuoi fare qualcosa ... falla in grande!

Il framework implementa sia la tecnologia XML sia Ajax oltre ad avere un possibile back-end MySQL, dico possibile perchè in realtà per realizzare una pagina web, come quelle dei famosi CMS PhpNUKE, Joomla, Midgard ecc.,  basta inserire un file e non appoggiarsi per forza ad un server MySQL, risparmiando sia risorse di sistema sia economiche.

Passiamo ora al solo sistema di autenticazione, visto che è una delle parti progettualmente più complesse ma operativamente più semplici, il resto lo presenterò in un prossimo futuro.

Resta importante specificare che il Login Manager ha la peculiarità di effettuare la fusione e criptazione delle credenziali di accesso, inserite dall'utente, direttamente lato client !!!. Esso, infatti, realizza l'hashing md5 dello username, della password e di una stringa generata casualmente dal sistema e visualizzata direttamente a video in formato immagine (sistema CAPTCHA) inviandole poi al server il quale, ricevendo lo username, conoscendo la stringa casuale (da lui generata) ed avendo ricevuto l'md5 della username-password-stringa casuale, provvede alle successive operazioni.

Per ottimizzare l'autenticazione ho provveduto a realizzare l'invio delle credenziali in una stringa composta da :

username = username inserito   +     login = credenziali criptate

Es.: pippo+123jhfo34xd~5ttTTyhzalmncttsk4585@qq0pP-w        (vi sfido ad indovinare :-) )

in questo modo il sistema effettuerà prima una ricerca dell'utente (pippo) che, se presente, permetterà la continuazione delle operazioni, in caso contrario sarà visualizzato un messaggio di diniego.

Peculiarità di questo sistema  di login:

1) Trasmissione sicura delle credenziali d'accesso (criptate)

2) Invio asincrono, il sistema in effetti implementa una logica di autenticazione a chiave pubblica/chiave privata, ove la chiave pubblica è lo username e password e la chiave privata è di fatto la stringa casuale generata ed inviata al client sotto forma d'immagine. In questo modo un malintenzionato che intercetta il nostro traffico sin dall'inizio, per scoprire username e password, non è in grado di identificarle inquanto:

  • nonostante sia in possesso della stringa casuale non conoscerebbe username e password che viaggiano, al ritorno, in forma criptata.
  • se dovesse conoscere username e password non potrebbe usare la stringa casuale intercettata, perchè è già stata "bruciata" dall'utente durante il login.

3) Sicuro, se l'utente non esiste non si procede ad ulteriori operazioni fra client e server.

4) Unicità delle credenziali d'accesso, l'utente usa le sue ma il sistema riceve un'insieme diverso ogni volta, come in un sistema O.T.P.

5) Elaborazione lato client completamente invisibile ad un malintenzionato che accede fisicamente alla macchina della vittima. La criptazione viene effettuata con un applicativo compilato e residente sul client, quindi non direttamente interpretabile (applicazione Flex su pagina html).

6) Possibilità di applicare algoritmi proprietari di criptazione per aumentarne la segretezza (basta conoscere Javascript o mxml).

7) Delega della segretezza delle credenziali all'utente ed al gestore del sistema informatico (il sistema di autenticazione è sicuro, tutto il resto non è nostro compito ;-) ).

8) Redirezionando l'utente, dopo il login-success, ad una comunicazione con protocollo https, si raggiunge una completa segretezza della trasmissione ed una sicura identificazione dell'utente sin dalla fase di autenticazione.

9) Web oriented, "gira" su tutte le piattaforme PHP-MySQL lato server e con un lettore file swf (noto come file Flash)  lato client.

10)  Uso di tecnologie già note e notevolmente diffuse.

... ah dimenticavo tutto Open Source !!!

Un esempio? li trovate qui

Administrator paperino password
Power User
pippo drowssap
User topolino password
Guest paperone onecent

Ricordando che il sistema è configurato per riconoscere 4 tipi di livelli di autenticazione :

1 Administrator Administrator of site
2 PowerUser Power user of the site
3 User User of the site
4 Guest Guest of the site

L'esito dell'autenticazione visualizzerà una pagina che ne riporta tutte le caratteristiche.

Last Updated on Sunday, 11 October 2009 13:58
Read more...
 


Creative Commons LicenseTutti i contenuti riportati in questo sito vengono rilasciati con la seguente licenza : Creative Commons Attribution - NonCommercial - ShareAlike Si precisa, inoltre, che tutti i singoli marchi registrati sono dei rispettivi proprietari. Diritti d’autore e proprietà industriale: I testi e le immagini pubblicati in questo sito sono di proprietà esclusiva dei relativi autori i quali indicano per ogni opera la relativa licenza di rilascio. In caso, quest'ultima, non sia espressamente indicata si assumerà, a favore del relativo autore di ogni opera, la Creative Commons Attribution - NonCommercial - ShareAlike. Ogni singolo autore è responsabile dei contenuti da egli realizzati. Note ex L. 62/01 - I contenuti di questo sito non hanno carattere di periodicità e non rappresentano "prodotto editoriale". I controlli sui contenuti riguardano solo ed esclusivamente quelli pubblicati direttamente da questo  sito. I link ad altre pagine non rientrano nei controlli in questione.