Diventa PRIMA NAZIONALE in due giorni risolvendo il problema della gestione di un FORM in CODEIGNITER FRAMEWORK
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)
Se 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!