1

BookBreakdown con Codeigniter? Ma non bastava il Lockdown?

web developer umbriaMai sentito parlare di BookBreakdown? E’ un metodo per scomporre un libro in tutti i suoi aspetti fondamentali, un esempio lo puoi vedere dal mio nuovo progetto http://umbriawayformazione.altervista.org/ci_project_longitudine/ dove Codeigniter Framework riduce a brandelli in senso propositivo il bellissimo libro di Dava Sobel Longitudine. A pensarci bene un libro é una fonte preziosa di informazioni e anche se non parlassimo di un saggio storico che si presta per l’esperimento tecnologico del nuovo progetto messo in piedi da Umbriaway Consulting (in realtà l’idea era del 2017, ma realizzata in grezzamente in procedurale) c’è sempre tanto da scavare e da disseppellire. Un libro alla fine é come un nuovo file aperto con photoshop, lo puoi idealmente immaginare come una serie di layer che si sovraqppongono e intrecciano nei modi più disparati dando luogo a qualcosa di organico e coerente. web design umbriaQuali sono questi layer? Ambientazione, personaggi, cronologia storica (come nel caso del progetto longitudine dove il focus é concentrato) , trama, eventi esterni/interni, interazioni etc etc. In questo terzo progetto http://umbriawayformazione.altervista.org/ci_project_longitudine/ l’importanza dell’ applicativo non sta tanto nella cornice tecnica ma nei contenuti per l’appunto! Il tutto potrebbe essere ampliato inserendo un motore di ricerca per esempio o allargando i layer da analizzare (in questo caso di attivo c’è solo l’aspetto storico). In ogni caso ancora una volta si dimostra la plasticità creativa di Codeigniter che si adatta con facilità anche alle idee più irrazionali e umanistiche anche con una certa libertà di espressione grafica! Potenza del foreach potremmo sintetizzare! Per entrare nel vivo dei contenuti riportiamo le info presenti in home:

COME LA VITA DI UN GENIO SOLITARIO CAMBIO’ LA STORIA DELLA NAVIGAZIONE: John Harrison (Foulby, 3 aprile 1693 – Londra, 24 marzo 1776) è stato un orologiaio e inventore inglese. Tra i suoi principali contributi vi fu l’invenzione, nel 1761, del cronometro marino, che permise di determinare con precisione la longitudine in alto mare, dando un decisivo apporto allo sviluppo della navigazione. La longitudine (dal latino longitudo, longitudĭnis derivato di longus, “lungo”) è la distanza angolare misurata in gradi, lungo l’arco di parallelo compreso tra il Meridiano fondamentale, Meridiano di Greenwich, e il meridiano passante per il punto considerato. In riferimento al meridiano di Greenwich, esiste una Longitudine orientale da 0 a 180° gradi e una Longitudine occidentale da 0 a 180°. Essa è definita in maniera analoga, ma riferita a differenti meridiani e piani di riferimento, anche in astronomia. Longitudine è un saggio della scrittrice divulgatrice scientifica statunitense Dava Sobel

In ogni caso ancora una potentissima dimostrazione di Codeigniter che sfruttando materiale già pronto in procedurale con dei semplici copia e incolla e la creazione di viste-modelli e controller per adeguare il tutto ha consentito in tempi ragionevoli di aprire e chiudere un progetto semplicemente sfruttando le competenze acquisite lavorando da un mese scarso su http://umbriawayformazione.altervista.org/ e http://umbriawayformazione.altervista.org/ci_project_competenze/. Lunga vita al sommo https://codeigniter.com/download!




Cinquanta sfumature di sessione, quello che Anastasia con il manuale del framework non ti dirà mai nella stanza torbida di Codeigniter

Oggi ho risolto il problema delle sessioni, eureka, era da una ventina di giorni che speravo di sistemare! Ma il titolo che ci azzecca? Mica è la stanza dei peccati del libro pakko più letto del pianeta dove le confessioni scabrose diventano business da intrattenimento! No qui abbiamo a che fare con il manuale di Codeigniter dove si leggono un sacco di cose belle e meravigliose ma manca poi quel “quid” che consente al NEWBIE di APPLICARE poi la tecnica o la singola istruzione sciorinata dalla bibbia sacra del framework per RISOLVERE UNA QUESTIONE PRATICA. Vediamo prima in sintesi di cosa stiamo parlando. Andando su http://umbriawayformazione.altervista.org/ci_project_competenze/ e facendo il login si entra in informazioni riservate (ma non troppo, non ci sono numeri di carte di credito) che sono protette dall’ esterno su altri browser dalle sessioni, identificate univocamente da id esclusivo. Come tutti Il protocollo HTTP usato per la connessione e la trasmissione delle pagine Web, è un protocollo SENZA MEMORIA o STATELESS. Per aggirare questa situazione possono tornare utili le sessioni. In procedurale avremo una classica situazione caratterizzata daL PULSANTE CHE ACCENDE LE DINAMICHE IN OGGETTO:

Session_start();

Quando la sessione viene ATTIVATA E APERTA viene inizializzato un ARRAY SUPERGLOBALE di nome

$_SESSION[];

un cassetto che andrà a ricevere tutti i dati che si intende ricordare, spesso username e password di chi si sta per LOGGARE. La domanda retorica “ma la $_SESSIONweb design umbria é vuota o piena” serve a proteggere con una istruzione condizionale IF / ELSE tutte le pagine che si intendono occultare al visitatore scaltro che magari alle nostre spalle adocchia un indirizzo web e intende replicarlo su altro browser presso altra macchina. Per esempio potremmo includere un file per queste pagine dove all’ interno esternamente lavora una condizione del tipo se la superglobals é piena e contiene la variabile X,Y,Z fai vedere il contenuto della pagina, altrimenti reindirizza il curiosone troppo curioso altrove, magari al form di login! Ok il manuale di Codeigniter darà per scontato che un minimo di PHP bisogna conoscerlo per seguire almeno le indicazioni base, ma di fatto poi la pratica quando hai un corpo fatto di vestiti di anima e di carne ed ossa (rispettivamente la VIEW, il controller e il Model) che differisce dalla linearità non sai dove devi scrivere le cose e neanche se la sintassi poi suona bene perché di fatto devI procedere a tentoni cercando di incapsulare con delle graffe questo o quell’ elemento, finche alla fine l’azzecchi e la risposta arriva; per far funzionare le sessioni devi richiamare per ogni pagina che si desidera

($this->session->userdata(‘nomevariabilesessione’))

intorno alla QUERY del MODELLO che ovviamente é diversa per ogni progetto e ha le sue specificità legato alla pagina a cui il controller con il suo metodo é legato! Ma mica il Newbie é come la maga Circe che le cose le sa per nascità onnicomprensiva divina?! Ma per impare l’inglese conoscere almeno una lingua alternativa base per capire quali sono i pronomi e i verbi e i complementi oggetto non sarebbe utile?! Più che utile , indispensabile! Avere un minimo di destrezza con la grammatica di base, in questo modo passare a Codeigniter dopo aver sperimentato un pò di procedurale é un balsamo benefico. In ogni caso scomporre i problemi grandi in piccoli pennelli (chi non ricorda la pubblicità cinghiale?) produce enormi vantaggi e una volta entrati nella stanza segreta delle sessioni con Anastasia ogni più torbido segreto sarà rivelato!




Come applicare una mandrakata in Codeigniter e far quadrare il cerchio quando andiamo incontro a sicura disfatta e ribaltare l’esito della lotta

web developer umbriaLa MANDRAKATA è uno dei tanti cavalli di battaglia profusi nel mondo dello spettacolo dal recentemente scomparso Gigi Proietti che se ne é andato amato democraticamente dalla massa intera, mettendo tutti daccordo sulle sue eccezionali qualità di uomo di spettacolo e maestro insuperabile, osannato ovunque (e non potrebbe essere altrimenti) da quelli di destra e quelli di sinistra, da complottisti e terrapiattisti, da trumphisti e sostenitori della difesa Pirc. Tatticamente l’idea di mandrakata pubblicizzata dal Grande Proietti si presta bene anche a risolvere problematiche di “rattoppo” nello sviluppo web in codeigniter quando la soluzione a un problema non arriva. Analizziamo la situazione presente all’ indirizzo http://umbriawayformazione.altervista.org/index.php/home/planner dove volendo mostrare le attività di formazione svolte da umbriaway consulting al contrario, ossia con un ordine discendente in modo da vedere i risultati a partire dall’ attualità di data e non dalla più lontana, ho pensato di inserire dei link nel primo campo cercando di emulare la prestazione dell’ ordine ascendente, quindi copiando il tutto e modificando nomi di funzioni in DESC al posto di ASC nella query per sparare i dati in una nuova pagina, dopo aver creato i dati in una nuova tabella. Peccato che all’ interno dell’ espressione:

public function get_planners($limit, $start)
{
$this->db->limit($limit, $start);
$query = $this->db->get(“nomedellatuatabella”);
return $query->result();
}

dopo vari tentativi per incastrarci dentro un semplice order by data desc e consultando il manuale all’ indirizzo versione tre (quando hai un problema la prima cosa da fare é quella di vedere se nella bibbia dello sviluppatore codeigniter si trovano le risposte) https://codeigniter.com/userguide3/index.html NON TROVANDO COMPOSIZIONI DI QUERY PERTINENTI alle mie esigenze generando in creazioni arbitrarie errori e incastri improbabili nella sintassi, ho dovuto ripiegare su trucchi tattici non proprio corretti (perché in questo caso sono andato a far saltare una paginazione comunque non indispensabile). Alla fine esasperato ho applicato una MANDRAKATA per aggirare il problema, ossia ho tolto il meccanismo della paginazione per la pagina dei dati discendenti, una soluzione stilisticamente deprecabile ma comunque efficace perchè dopo la semplificazione si é avuto nel modello:

public function get_planners_desc()
{
$query = $this->db->query(“
select * from nomedellatuatabella
order by data desc
limit 15
“);
if ($query->num_rows() == 0) {
show_error(‘database vuoto!’);
} else {
return $query->result();
}
}

dove alla fine della query compare un limit 15 che come un decreto ministeriale crea restrizioni sui record da visualizzare per pagina. Fallita quindi la costruzione della query builder iniziale per limiti miei da NEWBIE (è meno di un mese che sto sperimentando questa tecnologia) se non volevo perdere la battaglia ho dovuto applicare qualcosa di semplice ma comunque di funzionale! E’ proprio il caso di dire dopo l’analisi di questa dinamica di combattimento che grazie a una query vecchia maniera con un limit 15 finale ho sconfitto temporaneamente il nemico pronto a ricaricare le batterie per la prossima sfida! E rileggendo il tutto adesso da distanze siderali, senza ATOM a sporcare il codice, mi sembra di avere intuito che il problema del perché FORSE tutto non funzionava cercando di non rovinare la paginazione, potrebbe essere legato al fatto che non ho inserito i parametri iniziali nella mia nuova query (una banale dimenticanza?), potrebbe essere una idea da tenere buona per risolvere nelle prossime partite!




Diventa PRIMA NAZIONALE in due giorni risolvendo il problema della gestione di un FORM in CODEIGNITER FRAMEWORK

web developer umbria

A Roma dicono te fai paura da solo a no quello era te sei parlato da solo, ma quello che é successo dal punto di vista di crescita del punteggio elo tra Lunedì due novembre e oggi Mercoledì 4 novembre ha dell’ incredibile dal punto di vista della risoluzione dei problemi. Sul punteggio elo e le categorie negli scacchi ormai ne parlo da diverso tempo ma per fare un ripasso vediamo quali sono questi step di crescita sportiva che un agonista in erba (definito inclassificato) dovrebbe compiere verso l’alto prima di arrivare alla TRASCENDENZA della categoria GM:

Non Classificato (NC)
Terza Sociale (3S)
Seconda Sociale (2S)
Prima Sociale (1S)
Terza Nazionale (3N)
Seconda Nazionale (2N)
Prima Nazionale (1N)
Candidato Maestro (CM)
Maestro (M)
Maestro FIDE (MF)
Maestro Internazionale (MI)
Grande Maestro (GM)

web developer umbriaSe una guerra è composta da molte battaglie, così come un torneo di scacchi fatto di diversi turni é segnato da sconfitte e vittorie, così l’avventura formativa QUOTIDIANA iniziata su una tecnologia sconosciuta lunedì 12 novembre si sta rivelando un viaggio ricco di insidie ma anche NON PRIVA DI soddisfazioni e di vittorie parziali, esattamente a quello che accade all’ agonista di scacchi in torneo. Lunedì fino alle 21 e 15 ero equiparato (o meglio autoequiparato!) a livello simbolico di conoscenze alla terza sociale. Poi alle 21 e 15 riesco a realizzare il passaggio da SERVER LOCALE A SERVER DI PRODUZIONE e passo di categoria guadagnando elo (sempre simbolicamente) diventando TERZA NAZIONALE. Categoria che é perdurata fino alle 21 e 40 di Martedì 3 Novembre, quando per grazia divina sono riuscito a far funzionare il mio form grazie ai suggerimenti indiretti presenti in https://umbriawayformazione.wordpress.com/2020/11/03/imparare-dagli-errori-non-sono-gli-scacchi-ma-e-codeigniter/ dove si capisce una cosa sostanzialmente ribadita anche alla mia prima richiesta sul forum ufficiale, https://forum.codeigniter.com/, cioé il fatto che non PUOI RISOLVERE UN PROBLEMA se non consulti una fonte che può aiutarti a risolvere il problema è questa sorgente di acqua fresca é il MANUALE, https://codeigniter.com/userguide3/index.html . Quindi ieri leggendo alcune sezioni specifiche del manuale SONO RIUSCITO A FAR FUNZIONARE IL MIO FORM, passando simbolicamente alla categoria SECONDA NAZIONALE. Ma questa mattina sempre spulciando il manuale sono riuscito a risolvere i problemi legati ALLA SICUREZZA DEI FORM, passando simbolicamente PRIMA NAZIONALE! Quante emozioni nell’ arco di poche ore! A questo punto se nei prossimi giorni riesco a risolvere il problema della PAGINAZIONE passo a tutti gli effetti CM di Codeigniter nel senso che poi c’è comunque un abisso di conoscenze da colmare! Ma vediamo in dettaglio cosa è successo sui FORM che quando vengono messi in piedi (FASE 1) sono delicati sotto il punto di vista della sicurezza (FASE 2). All’ indirizzo http://umbriawayformazione.altervista.org/ c’è in alto a destra un form che ora funziona grazie alle istruzioni presenti sul manuale alla voce specifica https://codeigniter.com/userguide3/libraries/input.html?highlight=form :

Accessing form data
Using POST, GET, COOKIE, or SERVER Data

CodeIgniter comes with helper methods that let you fetch POST, GET, COOKIE or SERVER items. The main advantage of using the provided methods rather than fetching an item directly ($_POST[‘something’]) is that the methods will check to see if the item is set and return NULL if not. This lets you conveniently use data without having to test whether an item exists first. In other words, normally you might do something like this:

$something = isset($_POST[‘something’]) ? $_POST[‘something’] : NULL;

With CodeIgniter’s built in methods you can simply do this:

$something = $this->input->post(‘something’);

The main methods are:

$this->input->post()
$this->input->get()
$this->input->cookie()
$this->input->server()

TRADOTTO non riuscivo a risolvere i problemi perché nel mio MODEL mancava una istruzione MOLTO IMPORTANTE messa a un certo punto ossia

$something = $this->input->get(‘something’);

A questo punto tutto si è messo a funzionare come per magia nel senso che se digito il nome di un regista l’operatore LIKE fa il suo sporco lavoro ma poi il novizio deve interrogarsi e chiedersi in particolare:

se digito nulla che cosa accade?
se digito un nome inesistente restituisci all’ utente un messaggio specifico?
e la questione di SQL iniecton come la gestisci?

Allora che cosa è stato fatto Martedì 3 novembre 2020 verso le 22? Sono state risolte le prime due questioni con una clausola IF – ELSE IF in modo da dire all’ utente “guarda che se fai questa cosa qui vai incontro a questo messaggio etc”. Dopodichè soddifatto SONO SBIANCATO quando verificando che inserendo un singolo APICE ingrediente tipico degli ATTACCHI SQL INIECTJON tutta la mia applicazione diventava vulnerabile anche perché il messaggio di sistema riportava ulteriore info da dare all’ utente per capire la struttura del mio database! PANICO ASSOLUTO, che fare, devo trovare subito il modo di disabilitare il FORM senza alterare il codice e scartabellando in rete e anche sul manuale è saltato fuori all’ indirizzo https://codeigniter.com/userguide3/libraries/input.html?highlight=input%20security:

Input Filtering
Security Filtering

The security filtering method is called automatically when a new controller is invoked. It does the following:

If $config[‘allow_get_array’] is FALSE (default is TRUE), destroys the global GET array.
Destroys all global variables in the event register_globals is turned on.
Filters the GET/POST/COOKIE array keys, permitting only alpha-numeric (and a few other) characters.
Provides XSS (Cross-site Scripting Hacks) filtering. This can be enabled globally, or upon request.
Standardizes newline characters to PHP_EOL (\n in UNIX-based OSes, \r\n under Windows). This is configurable

OK! Ottimo anche se ero seccato perché il form risultava inagibile, l’idea era di togliere la funzionalità di GET sul form in attesa di risolvere i problemi di sicurezza e allora vado sul CONFIG.PHP e cerco $config[‘allow_get_array’] per dargli un valore FALSE che non è di default! Carico i file e verifico che funzioni! Ottimo! Peccato però che l’inibizione sul GET é assoluta e questo mi ha portato a rendere inutile tutto il lavoro sul resto dell’ applicativo basato sul passaggio di querystring! Quindi mi sono detto che serviva altro e infatti l’ho trovato apparentemente:

$nomevariabile = $this->security->xss_clean($this->input->get(‘nomevariabile’));

 

ma questa soluzione non lavorava, per cui alla fine ho trovato anche:

$nomevariabile = $this->security->sanitize_filename($this->input->get(‘nomevariabile ‘));

 

e questa volta il malintenzionato che cerca di giocare con gli APICI sul mio form si vede restituire un PIKKE come risposta!

Grazie a queste incredibili scoperte raggiunte consultando il manuale di CODEIGNITER, https://codeigniter.com/userguide3/index.html , non senza difficoltà, oggi mi sento MOLTO PRIMA NAZIONALE. Ma sono bene che se voglio passare CM e guadagnare altro elo per acquisire almeno le basi di Codeigniter Framework devo RISOLVERE ancora il problema della PAGINAZIONE. Un ultimo scoglio fatale per http://umbriawayformazione.altervista.org/ ? La sfida con questo potentissimo e affascinante Framework continua, at the next battle! Intanto oggi siamo arrivati al giorno 24 con tre vittorie di fila negli ultimi tre turni di quotidianità (risultati reali raggiunti sul campo!). Non so dire se http://umbriawayformazione.altervista.org/ sia realmente sicuro adesso ma almeno mi sembra di aver fatto qualcosa per prevenire eventuali attacchi esterni!