FW FW

main FW-IDE Forum manifesto download vwiki SiteMap files
winPenPack - Il tuo Pc in tasca

Calendario Calendario

DATA: 08/05/2024
ORA: 15:44

Ricerca Ricerca

Google

AccessKeys AccessKeys

[2]ON

Blocco Admin Blocco Admin


manifesto manifesto

description todo faq


description description

FrameWork

FW e' una web application content realizzato con lo scopo di rendere facile rapido ed intuitivo lo sviluppo di applicazioni php scritte per essere fruite da utenti anonimi o autenticati su internet quanto in ambienti intra/extranet.

Concetti di base:

  • FW e' un insieme di regole il codice viene di conseguenza
  • E' totalmente decentrato
  • Non fa uso di database ma li puo' fare utilizzare alle sue applicazioni
  • E' un cms ma e' anche una piattaforma di base per web applications
  • Lo sviluppo e' pubblico e condiviso
  • E' stato volutamennte usato codice ripescato da altre opere GPL allo scopo di dimostrare la validita' delle regole fw
  • E' possibile scaricare sia l'intero tool sia i singoli particolari
  • E' gratuito sottoposto a licenza GPL

 

     

  • AVVIO:
  •  

La struttura di base contiene l'unico punto d'avvio (index.php), le cartelle principali e le librerie comuni;

Tutto il resto sono moduli aggiuntivi

Questo approccio ha lo scopo di rendere questa applicazione piu' flessibile piu' facilmente modificabile e di togliere certezze a chi attacca in quanto non si puo' a priori essere sicuri di quale codice e' usato dal sito Fw che si sta cercando di violare essendo il codice molto dipendente anche dalle configurazioni impostate

     

  • CODICE:
  •  

Tutto il codice pur trattandosi di codice php e' fortemente limitato e si cerca nel limite del possibile di usare codice xHTML e Javascript.

La versione di riferimento del php è una versione 4.x (ma e' compatibile e sviluppato con versioni piu' nuove) e non si fa uso di codice a oggetti o hack particolari. Il codice è orientato alla leggibilità e alla semplicità nel limite del possibile. Abbiamo scelto di aderire solo parzialmente alle specifiche w3c proprio per mantenere questa leggibilità. Anche nella configurazione del parsing php abbiamo scelto di non estremizzare la sintassi non abilitando per default la specifica ERROR_ALL e disabilitando in particolare gli E_NOTICE che ci costringevano a un codice più complesso e meno comprensibile. Questo approccio ci ha permesso di avere un codice semplice ma al tempo stesso compatto, abbastanza facile da leggere e (cosa non prevista) piuttosto veloce.

 

     

  • TEMI:
  •  

Il tema utilizza solo due fogli di stile css che usano in modo estensivo le classi e la cartella della grafica detta images.

È inoltre in grado di utilizzare temi di altri nuke (flatnuke, phpnuke ecc) con pochissime modifiche ben circoscritte.

     

  • STRUTTURA:
  •  

La struttura e' invece contenuta in blocks/structure.inc che provvede al caricamento dei blocchi e delle applicazioni. È comunque possibile inserirla nel tema corrente nel caso in cui servano personalizzazioni molto elevate nell'impaginazione che non è (ancora) possibile ottenere con i fogli di stile.

E' quindi possibile cambiare la forma del sito senza cambiare il tema e viceversa. Anche, al limite, l'assenza di un tema non interrompe la disponibilità delle informazioni.

Per questo si puo dire che i temi di FrameWork sono a struttura non portante;

Le sotto pagine centrali sono dette applications (quelle che altrove sono section o modules per intenderci) ed il menu che le lancia e' un blocco come gli altri.


I blocchi hanno 4 cartelle per collocarli top,left,right,bottom.


Il titolo e il footer sono blocchi, osa che solitamente non e' nei pacchetti simili.


Blocchi e Applications possono essere indifferemntemente cartelle o semplici file.

I dati la grafica e la localizzazione devono accompagnare il blocco o l'applicazione quindi se sono necessari verranno ospitati nella cartella del blocco/applicazione. Per convenzione si porranno in essere due cartelle proprio a questo scopo denominate: images e lang.

Questa soluzione rende molto piu facile l'aggiunta e la rimozione dei componenti (siano essi blocchi applicazioni librerie o altro) grazie alla loro compattezza intrinseca.

Per nascondere un componente e' sufficente far precedere il nome dal carattere sottolineato (_).


I dati invece vengono conservati nella cartella datas che viene generata se non presente automaticamente al primo avvio.

Tutti i dati delle applicazioni, dei blocchi e delle librerie devono essere registrati in questa cartella in sotto cartelle che devono riprodurre in qualche modo la struttura del sito stesso

Per il sort si usa il collaudato sistema del numero che precede il nome seguito da un _.


Ovviamente non e' possibile usare spazi nel nome applicazione/blocco.


In questo caso Il numero non viene usato nel generare la cartella in datas e ovviamente la creazione della cartella dati e' a carico del blocco o del'applicazione usando pero’ funzioni fornite dalle librerie standard.


Blocchi e applicazioni hanno anche in carico la creazione della propria cornice e della propria amministrazione.


In pratica FrameWork passa la parola al blocco/applicazione e mette a disposizione le proprie funzioni.


Sara' poi quest'ultima a svolgere il resto del lavoro avvalendosi del codice a disposizione nelle librerie.

E' importante notare che questo approccio permette anche la rinuncia all'uso di quest'ultime rendendo almeno in teoria piu facile adattare software gia scritto a questa piattaforma.

Se osservate infatti gran parte delle applicazioni è codice riciclato e questa è stata una precisa scelta.

Autenticazione utenti e forum sono tutte applicazioni esterne al nocciolo principale e potranno esistere soluzioni piu' o meno evolute come alternative.

 

     

  • LOCALIZZAZIONE:
  •  

La localizzazione e' anch'essa decentrata nelle applicazioni e nei blocchi.

Sono state definite delle regole di massima per localizzare.

E' comunque evidente che queste sono regole consigliate.

In fw quasi nulla e' obbligatorio

 

     

  • CODICE:
  •  

E’ possibile avere parti del codice in competizione tra loro in modo da poter avere sempre il meglio in ogni settore.

E’ pensato soppratutto per tutti coloro che personalizzano molto i loro siti.

In questo senso si apre di fatto una piattaforma nuova piu semplice e leggera per realizzare siti web anche molto diversi tra loro.

 

     

  • DATI:
  •  

La directory datas contiene l’unico posto dove framework puo’ scrivere e conservare informazioni. I dati sono organizzati in cartelle che rispecchiano la struttura delle directory adoperate per le applicazioni (per esempio: i dati di forum sono conservati in datas/applications/forum). La creazione delle cartelle necessarie è demandata ai blocchi e/o applicazioni che ne fanno uso.

I dati riservati vanno nella security box (sb) che usa una sotto cartella generata automaticamente da un’apposita funzione che ha il compito di nascondere l’accesso ai dati da remoto.

Un esempio di una cartella generata in automatico e’:

/ datas / sb / 2594-5339-8352-3137-5621-5713-5621-3910 /


Non dovrebbe essere possibile visualizzare in nessun modo il nome di questa directory che viene passato alle funzioni che ne hanno bisogno dalla funzione che lo ha generato. Un file index.html presente nella cartella sb ne impedisce in ogni caso la visualizzazione.


Si tratta di un modo importante per nascondere alla vista di male intenzionati dei dati sensibili e al tempo stesso rendere questi dati fruibili dal sito e dagli autorizzati senza eccessive complicazioni.


Naturalmente esistono dati che non conviene mettere in cassaforte o di cui non e’ possibile nasconderne la collocazione (ad esempio i file dell’applicazione download).


In questo caso saranno stoccati semplicemete in datas fuori da sb come spiegato precedentemente.

 

     

  • CONFIGURAZIONE – AMMINISTRAZIONE – LIBRERIE - EXTRAS:
  •  

La configurazione generale (lingua, ora, path, ecc.) viene impostata attraverso la libreria libConfig.inc.

I dati di impostazione sono generati da un apposita routine e sono conservati in datas/config.

Una specifica applicazione di amministrazione permette poi di personalizzare questi dati.

Questa struttura assomiglia in qualche modo il registro di windows pur essendo infinitamente piu semplice. E' la miglior soluzione che abbiamo trovato per centralizzare la configurazione in un sistema modulare espandibile a piacere.

Da notare che la lettura / scrittura della configurazione è eseguita da funzioni e non con variabili.

Esistono poi alcune funzioni che restituiscono con semplicita dati globali. Queste funzioni sono conservate nella libreria libConfig.inc
Questo approccio consente di avere la restituzione di dati in maniera piu intelligente.

Faccio un esempio:

la funzione lang() restituisce la lingua impostata pero' e' in grado di verificare (ipoteticamente) la presenza del cookie lang.

E' in grado anche di rimediare la lingua dai dati del server e infine se proprio non e' possibile capire la lingua dell'ospite usera il valore di default stoccato in datas/config.....bello vero?.

Ovviamente tutto questo e' configurabile e non incide sul funzionamento del resto della struttura.

Basta mantenere i nomi delle funzioni invariati.

E' anche possibile aggiungere nuove funzioni.

L'amministrazione fa parte del core tuttavia e' implementata esternamente ed e' possibile sostituire o scrivere versioni alternative senza intaccare il buon funzionamento di FrameWork.


Le funzioni dell'amministrazione sono  locate nella libreria libAdmin.inc e c'e' a disposizione il blocco admin per l'inserimento password.

E' stato poi creata l'applicazione admin per la configurazione delle preferenze dell'amministratore oltre che altrnativa al blocco di autenticazione.Questa applicazione ma anche molte altre e' un container. Si tratta cioe' di un contenitore di altre applicazioni. Questo approccio semplifica e modularizza ulteriormente il sistema dividendo le varie funzionalita' in tante piccole sotto applicazioni.

 

 

L'amministrazione non usa un utente particolare (anzi non usa proprio nessun utente) e usa sia un cookie (disattivabile) che un autenticazione mediante indirizzo ip. Solo un utente per volta puo' amministrare il sito e per poter amministrare deve prima di tutto avviare la propria sessione immetendo la password attraverso l'apposito blocco.

A questo punto il sistema registra l'ip dell'amministratore, posta l'eventuale cookie e non richiede piu' la password.

Riconosce inoltre l'amministratore ed espone i servizi di amministrazione che altrimenti non sono accessibili.

Quando l'amministratore ha terminato il lavoro è tenuto a scollegarsi usando il comando stopsession.

Questo tipo di autenticazione mi sembra piu' sicura di una generica basata solo su cookie.

E' possibile comunque implementarne una basata su meccanismi differenti semplicemente sostituendo la libreria libAdmin.

Il text editor interno e' un accessorio dell'amministrazione ma come logico in questo sistema non ne fa parte ma e' un applicazione come le altre.

Si tratta di un applicazione nascosta e non puo' funzionare da sola poiche necessita che le venga passato il nome del file da editare.

Puo' anche funzionare senza i privilegi di amministrazione ed essere usato da applicazioni normali in quanto svolge solo i compiti di editazione e non il salvataggio.

E' evidente che questa parte e' cruciale per la sicurezza.

In frameWork l'editor puo' caricare il file e modificarlo ma per il salvataggio si aspetta che l'applicazione che ha richiesto il suo intervento sia in grado di ricevere le modifiche e sia in grado di salvarle.

Ogni suggerimento di sicurezza in questa parte e' il benvenuto e anche
un testing forzato e sistematico deve essere svolto con cura per prevenire possibili bugs.

_editor.inc funziona sia da solo sia con il supporto presente nella cartella extras di FCKeditor che nel caso fosse presente sara' automaticamente usato.

 

In generale, le librerie sono invece presenti in una cartella chiamata libs e vengono caricate automaticamente come i blocchi.

Qui’ e’ stato fatto un ulteriore passo avanti e solo le librerie che nel nome hanno come inizo al_ vengono caricate automaticamente, le altre devono essere invocate dalla funzione loadlib che verifichera' che la libreria non risulti gia caricata.

 

 

La cartella extras e' preposta a contenere tutto il software aggiuntivo esterno come FCKeditor oppure per esempio txtshout (chat basata su files di testo).

Il codice JavaScript viene incluso attraverso un comando include e risiede in file separati e specificatamente nella cartella JS a cio’ destinata.

Questo fa si che il caricamento risulti decentrato con il conseguente alleggerimento del carico del server web.

 

 

 

     

  • UTENTI E GRUPPI:
  •  

Pur non essendo parte del core FrameWork dispone di un ottimo supporto utenti e gruppi formato da due librerie separate, un blocco login e un applicazione (reguser) per il login e l'amministrazione utenti e gruppi.

FW e’ comunque pensato per poter funzionare anche senza il supporto gruppi ed anche togliendo Utenti e addirittura amministrazione.

L'autenticazione degli utenti avviene tramite l'uso di cookie e le password sono conservate in sb e criptate con chiave xmd5 o xsha1.

xmd5 ed xsha1 sono un metodo per migliorare la sicurezza delle chiavi md5 e sha1 che vengono forzate usando database con le password generiche. E' anche prevista la possibilita' di usare funzioni a hoc private con facilita' per aumentare la sicurezza delle password.

I gruppi invece sono liste conservate in sb e amministrate da admin.

La creazione dei gruppi e' a carico delle applicazioni che ne fanno uso mentre l'iscrizione ai gruppi degli utenti deve essere fatta dall'aministratore tramite apposita interfaccia grafica gia’ implementata in admin.

Gli utenti che appartengono al gruppo dell'applicazione hanno privilegi maggiori rispetto agli utenti normali.

Tutte queste funzioni sono implementate da parte degli sviluppatori nel codice dei blocchi e delle applicazioni.

E’ anche presente in admin una sottoapplicazione grafica per la creazione, rimozione, inserimento o esclusione degli utenti dai gruppi che fa comunque capo alle funzioni preposte presenti nella libreria al_03_libUser.

Per convenzione ogni libreria possiede una costante php che comunica al sistema se essa è presente e la versione.

Le applicazioni possono in questo modo sapere se è presente la libreria ed evitare di eseguire codice non supportato.

La lettura del codice penso sia molto piu chiara di questa spiegazione.

Sono state create anche delle convenzioni per la trasmissione dei dati da parte delle librerie.

Se queste devono essere trasmesse tramite il metodo get o il metodo post nella libreria e' presente un albero a switch preposto a ricevere i parametri e a chiamare la funzione.

Il tutto alla ricerca del massimo controllo sui dati immessi dagli utenti.

 

     

  • LOGS:
  •  

FrameWork dispone di un sistema di registrazione eventi paranoico.

Tutto quello che avviene sul sito (login, logout, richiamo blocchi e/o applicazioni, visualizzazioni da parte di utenti guest, ecc.) è registrato nei log divisi per data per categoria e di tutti viene prelevato naturalmente anche l’IP.

Anche gli eventuali errori sono registrati, associati alla pagina servita, e nascosti all'utente per impedire disclousure. Un semplice messaggio generico informa che e' avvenuto un errore.

E’ anche possibile effettuare una Data-Mining sui dati dei Log.

È stato inserito un meccanismo di log rotate che cancella in modo automatico i log piu vecchi per contenere lo spazio occupato e l'amministrazione ha un applicazione preposta a visualizzare e fare controlli incrociati sul traffico.

 

     

  • INSTALLAZIONE E UPGRADE:
  •  

Fw puo' essere installato nel modo convenzionale scompattando un archivio zip ma puo' anche essere installato direttamente sul proprio spazio web attraverso una connessione ftp usando un browser.

E' possibile ottenere un archivio zip ricavato in tempo reale dall'installazione del sito stesso. in questo caso però è chiaro che i dati conservati in datas non vengono inclusi nell'archivio stesso.

E' infine possibile tramite un altro tool decidere cosa includere nel proprio archivio zip o se si preferisce cosa installare via ftp nel sito stesso direttamente.

Possiamo dire che l'installazione del sistema framework e' sicuramente molto semplice. Al primo avvio tutti i dati saranno configurati ai valori di default e poi l'amministratore proveddera' a personalizzarsi il sistema. Non è previsto alcun wizard di prima installazione ma non escludiamo a priori che in futuro possa essere implementato.

Il sistema FrameWork può essere aggiornato in modo automatico senza bisogno di visitare il sito principale.

Il sistema (unico per quello che ne sappiamo) di fatto ha cancellato il concetto di versione e permette di fissare bachi e/o aggiungere funzionalita molto in fretta e in modo automatico e indolore. In futuro sara' possibile installare nuove parti e potrebbe anche incorporare una struttura per rendere disponibili con facilita’ nuove applicazioni/blocchi o parti modificate da altri utenti. Rendere semplice ed efficente la pratica di queste operazioni è la sfida che aspetta il team nei prossimi mesi.

Il meccanismo fa leva sul fatto che l'estensione della maggior parte dei file di FW è .inc e quindi se richiesti al server HTTP direttamente questi vengono spediti senza essere elaborati dal parser PHP e quindi in forma sorgente. I problemi sorti sono stati in gran parte risolti. Restano da dettaglizzare alcuni comportamenti particolari e deve essere ancora implementato un meccanismo di risoluzione delle dipendenze.

Il meccanismo ideato consente anche di avere fonti distribuite su piu siti e indirettamente apre agli utenti la possibilita di condividere/aggiornare i propri moduli e le proprie applicazioni direttamente e in modo indipendente dal server principale. Al momento un applicazione dell'amministrazione si fa carico di questa operazione.

Il punto di arrivo è un applicazione simile al tool debian synaptic che consenta di avere gli aggiornamenti, l'installazione e la disinstallazione dei pacchetti che compongono framework in modo del tutto automatizzato e semplificato al massimo.

 

     

  • CONCLUSIONI:
  •  

Il codice presente è stato ideato solo come codice esplorativo per verificare la effettiva fattibilita' di questa idea.

Tuttavia, a 18 mesi dall'inizio dello sviluppo riteniamo che questa implementazione possa essere usata con ragionevole sicurezza per siti dal basso medio carico.

Ringraziamo naturalmente tutti coloro che hanno contribuito a questo esperimento e siamo naturalmete a disposizione tramite mail per ogni ulteriore chiarimento.

 

 

 

TEAM FRAMEWORK

Viola Roberto aka: vroby (__vroby__@libero.it)

Daniele Deplano aka: Daniele (deplano.d@gmail.com)

Stefano Toxiri aka: Xargo ( xargo.mail@gmail.com)

Print to HTMLPrint to PDF