Back to top

Autore Topic: Comportamento NON OTTIMALE di JInput  (Letto 4438 volte)

Offline jabber

  • Esploratore
  • **
  • Post: 114
    • Mostra profilo
Comportamento NON OTTIMALE di JInput
« il: 29 Lug 2015, 10:01:25 »
Ciao a tutti,

premetto che il tema è l'uso della funzione di cui sotto: (il nome della var che viene passata via GET è "var_name")
Codice: [Seleziona]
$var = JFactory::getApplication()->input->get( 'var_name', 'var_default', 'INT');
Se var_name NON la si passo affatto oppure il valore inserito dall'utente è errato tipo "aaa",
allora come risultato ricevo sempre "0".
Nel mio programma "0" è un valore legittimo in quanto è il valore di un id, quindi lo uso ed
è assolutamente valido, quindi come faccio a sapere se l'utente ha passato effettivamente
"0" oppure se è il risultato che deriva dal filtraggio di un valore errato ?
In pratica la "input->get" unifica rendendo irriconoscibile i 2 casi e secondo me non è il
massimo come comportamento, comunque aspetto una chiarificazione, mi potrei sempre sbagliare
e non considerare le ragioni altre di una tale scelta di risultato in caso di input illegittimo.

Io avrei preferito che in caso di valore errato la mia var $var fosse impostata a null,
così' posso discriminare tra il valore "0" corretto (cioè effettivcamente inserito dall'utente)
oppure un valore null ottenuto come risultato del filtraggio.

Magari uso male la funzione io ? Boh! Aspetto delucidazioni


Grazie
« Ultima modifica: 29 Lug 2015, 10:24:27 da jabber »

Offline jabber

  • Esploratore
  • **
  • Post: 114
    • Mostra profilo
Re:Comportamento di JInput
« Risposta #1 il: 29 Lug 2015, 10:21:10 »
Continuo da solo dai test che ho fatto 5 minuti fa.

E' vero che io posso usare i valori default, infatti se la variabile "var_name" 
non viene passata affatto allora JInput imposta il valore al default -> QUESTO E' OTTIMO!

Comunque rimane il problema che se l'utente inserisce "aaaa" ed io mi aspetto un INT (il mio filtro),
allora JInput imposta il valore a "0" ignorando il mio valore di default -> COMPORTAMENTO NON DESIDERATO.

Quindi, se io (nel mio caso, cioè INT) inserisco un valore sballato allora vorrei che
la var acquisisse il valore di default.

Continuo a pensare che JInput ha un comportamento NON ottimale perché non permette
di discriminare tra input errato (ovviamente cioò è in base al valore del filtro) ed input inserito
direttamente a 0 dall'utente.




Offline giovi

  • Instancabile
  • ******
  • Post: 9835
  • Sesso: Maschio
    • Mostra profilo
Re:Comportamento NON OTTIMALE di JInput
« Risposta #2 il: 29 Lug 2015, 10:38:38 »
Nel mio programma "0" è un valore legittimo in quanto è il valore di un id, quindi lo uso ed
è assolutamente valido, quindi come faccio a sapere se l'utente ha passato effettivamente
"0" oppure se è il risultato che deriva dal filtraggio di un valore errato ?
In pratica la "input->get" unifica rendendo irriconoscibile i 2 casi e secondo me non è il
massimo come comportamento
jabber consentimi di dire che il comportamento sbagliato è quello di utilizzare lo 0 come id e non il contrario ;) In joomla id=0 vuol dire che l'elemento manipolato non è ancora presente sul db.
Ad ogni modo la funzione filtro INT in joomla è implementata così:
Codice: [Seleziona]
// Only use the first integer value
preg_match('/-?[0-9]+/', (string) $source, $matches);
$result = @ (int) $matches[0];
Quindi quello che ricevi è il contenuto dell'array $matches generato direttamente da php.
Da notare che pre_match restituisce un intero (numero di occorrenze), quindi lo 0 è da considerare come "nessuna occorrenza"! Inoltre in php lo 0 è assimilabile al booleano false.


Se non è il risultato che ti aspettavi, comunque, puoi utilizzare la funzione di php filter_var per ovviare al problema.

Offline steganoga

  • Abituale
  • ****
  • Post: 1313
    • Mostra profilo
Re:Comportamento NON OTTIMALE di JInput
« Risposta #3 il: 29 Lug 2015, 10:53:32 »
beh... 0 in effetti è un numero e non necessariamente è False
anche secondo me potrebbe essere comunque migliorata, 0 è 0 e false è false.

E' un po' la stessa cosa per cui è conveniente usare === invece di ==

Puoi costruirti il tuo override della classe o molto più sbrigativo crearti un metodo statico per quella funzione
...sono dove non ti aspetti di trovarmi, mi alimento della tua supponenza e disseto la mia curiosità nel silenzio.
Non sono un nemico, considerami un ospite.

Offline jabber

  • Esploratore
  • **
  • Post: 114
    • Mostra profilo
Re:Comportamento NON OTTIMALE di JInput
« Risposta #4 il: 29 Lug 2015, 11:03:20 »

@steganoga,

si infatti per ora sto usando un mio metodo statico esattamente come da te suggerito.
Infatti la questione è che vorrei usare i metodi standard di Joomla!, o almeno provarci.


@giovi

ok, quindi per quello che riguarda gli id (in linea agli standard adottati da joomla)
sono io a  sbagliare, no problem.

PERO' se io non usassi quel numero come possibile id, comunque rimarrebbe un altro
problemino, a meno che non sia io ad essere nuovamente in errore.

Se ad esempio dal form di un modulo che  realizza dei sondaggi,  io mi aspettassi
"0","1","2" ... "5" come valori di rating, la questione resta viva.

Come faccio a sapere se l'utente ha votato "0" (perché io voglio dare la possibilità di farlo)
oppure se abbia hackerato il form ed inserito "aaaaa", ritrovandomi io ugualmente "0"
dopo appunto l'applicazione del filtro JInput ?

Se sono ancora io ad essere in errore allora in Joomla! il valore di input "0" è
un VALORE DA CONSIDERARSI RISERVATO e quindi mai utilizzabile.

Io continuo a sostenere che in caso di inserimento da parte dell'utente di un valore illegittimo
(per inciso, la cosa è sempre in relazione al filtro usato), JInput debba restituire null.
Quando farò il mio test ed otterrò null, saprò sicuramente che l'utente o mi ha hackerato
il form oppure ha fatto un casino di qualche tipo.

« Ultima modifica: 29 Lug 2015, 11:10:24 da jabber »

Offline giovi

  • Instancabile
  • ******
  • Post: 9835
  • Sesso: Maschio
    • Mostra profilo
Re:Comportamento NON OTTIMALE di JInput
« Risposta #5 il: 29 Lug 2015, 12:01:47 »
Comprendo in pieno la tua necessità ma la funzione si comporta esattamente nel modo che ci si aspetta: se il valore di ritorno atteso è un intero, non puoi aspettarti che uno 0 in caso di fallimento. D'altronde il caso era già stato segnalato nel 2006 (e molte altre volte ancora) ma è sempre stato giustificato in questo modo. Dovrai ricorrere ad un filtro esterno, come quello che ti ho suggerito.

Offline jabber

  • Esploratore
  • **
  • Post: 114
    • Mostra profilo
Re:Comportamento NON OTTIMALE di JInput
« Risposta #6 il: 29 Lug 2015, 13:06:51 »

@giovi
Beh, non sapevo che fosse una discussione così datata (2006 come dici tu).
Comunque la mia esigenza nasce da un bisogno concreto che non trova una
soddisfazione completa e professionale nell'utilizzo della funzione JInput.

Infatti non riesco mai a risolvere definitivamente il problema di questo stramaledetto
"0" della cippa (usando JInput per inciso, ovviamente con le mie funzioni custom ci riesco).

Allora la mia domanda provocatoria (in senso buono) è, come mai sono costretto,
nonostante la potenza del CMS Joomla!, a scrivermi (ancora nel 2015) una funzione
di filtro custom ? E pergiunta per risolvere dei semplici numeri INTEGER ?!
(La questione è un errore concettuale di fondo di JInput)

Come già detto in precedenza , io sto già usando un mio metodo, però nel mio "malsano"
desiderio di voler usare le funzioni native Joomla! preposte a tale scopo, non posso far
altro che riscontrarne un'imperfezione (secondo la mia opinione).

E la cosa nasce da un'ambiguità, e cioè dal fatto che non è possibile sapere se lo "0" sia
l'input effettivo dell'utente oppure se derivi dal filtro (e quindi un valore da rigettare).

Allora giunto a questo punto, lo "0" è davvero da considerarsi un valore riservato.
E' riservato perché i programmatore joomla (che per inciso ritengo siano molto bravi)
hanno pensato (intelligentemente e furbamente) di rendere tale risultato direttamente
sottoponibile allo statement "if".

E con ciò mi voglio riagganciare a quello che ha detto steganoga:
Citazione
beh... 0 in effetti è un numero e non necessariamente è False
anche secondo me potrebbe essere comunque migliorata, 0 è 0 e false è false.
E' un po' la stessa cosa per cui è conveniente usare === invece di ==

In sostanza io e lui diciamo la stessa cosa, però io propongo la soluzione con null e lui
preferirebbe andare ad agire sul tipo, "false" booleano piuttosto che "0" come numero.
Così infatti verrà DEFINITIVAMENTE ELIMINATA L'AMBIGUITA' :
$mio_valore_ritornato_da_jinput = Jinput->...
if(  $mio_valore_ritornato_da_jinput === false  ) { return false; }

E' devo dire che mi piace più la soluzione proposta da steganoga ripetto alla mia (con il null).



@giovi, tu dici:
Citazione
comprendo in pieno la tua necessità ma la funzione si comporta esattamente nel
modo che ci si aspetta: se il valore di ritorno atteso è un intero, non puoi aspettarti che uno
0 in caso di fallimento
Io non sono d'accordo, perché si comporta esattamente come ci si aspetta ?
Per esempio, anche dalla funzione "strpos" ci si aspetta che restituisca un intero,
però solo nel caso che il risultato sia coerente, guardacaso lanciando la seguente linea di codice:
strpos("aaba", "c");
si ottiene un bellissimo "false" (booleano!) e non uno "0" stringa oppure uno 0 integer.
Probabilmente il tipo booleano è stato pensato/creato/ideato proprio od anche
per risolvere queste ambiguità.

Qui occorre prendere razionalmente atto di una cosa, la soluzione adottata finora
dai programmatori di Joomla è una soluzione imperfetta perché è ambigua, dall'esempio
sopra mi da ragione anche il PHP.

C'è di fondo un vero e proprio errore concettuale.

Io penso che questa cosa i programmatori del team di Joomla! lo sappiano bene, 
è solo un annoso problema che ancora però non ha trovato una soluzione completamente
soddisfacente.

Io non sono molto pratico con la segnalazione di errori, e nel caso questo è un errore
concettuale e non un bug del codice.
Però la cosa dovrebbe essere segnalata di nuovo per risolvere definitivamente il problema,
poi che la cosa avvenga in Joomla v4 o v5 amen! Visto e considerato che questo è Open Source.


Un saluto
  J
« Ultima modifica: 29 Lug 2015, 13:23:17 da jabber »

Offline giovi

  • Instancabile
  • ******
  • Post: 9835
  • Sesso: Maschio
    • Mostra profilo
Re:Comportamento NON OTTIMALE di JInput
« Risposta #7 il: 29 Lug 2015, 13:24:54 »

Citazione
Beh, non sapevo che fosse una discussione così datata (2006 come dici tu).

Una ricerchina potevi farla pure tu ;)


Citazione
Allora la mia domanda provocatoria (in senso buono) è, come mai sono costretto,

nonostante la potenza del CMS Joomla!, a scrivermi (ancora nel 2015) una funzione
di filtro custom ? E pergiunta per risolvere dei semplici numeri INTEGER ?!
(La questione è un errore concettuale di fondo di JInput)

Evidentemente joomla non è così potente o semplicemente si attiene agli standard che si prefissa. Ad ogni modo gli sviluppatori "Joomla" non sono una categoria a se, sono semplici sviluppatori php che sanno bene che se una funzione promette di restituire un valore INT quando la variabile è impostata, non possono pretendere che restituisca un valore NULL. Questo vincolo esiste in tutti i linguaggi di programmazione, sebbene in php siamo abituati a pensarla diversamente.
La segnalazione è stata fatta tante ma tante ma tante volte, ed aprirne un'altra è molto semplice su github. Ma se dal 2006 a questa parte il "problema" non è stato risolto è perché evidentemente un problema non era. Bada bene, mi trovi d'accordo sul fatto che una funzione che lavora nel modo da te descritto sia molto più utile di quella attuale, fatto sta che non è la funzione attuale quella di cui hai bisogno in quanto restituisce un valore INTERO sempre e comunque quando la variabile esiste. Se non esiste, invece, restituisce il valore di default. E' la sua definizione, c'è poco da fare!


Il tuo metodo "malsano" è invece quello perfetto per ciò che serve a te, ovvero ottenere un intero solo quando il valore immesso è un intero.


Citazione
E con ciò mi voglio riagganciare a quello che ha detto steganoga:
In sostanza io e lui diciamo la stessa cosa, però io propongo la soluzione con null e lui
preferirebbe andare ad agire sul tipo, "0" numero oppure su "false" booleano.
Così infatti verrà DEFINITIVAMENTE ELIMINATA L'AMBIGUITA' :
$mio_valore_ritornato_da_jinput ) Jinput->...
if(  $mio_valore_ritornato_da_jinput === false  ) { return false; }

E' devo dire che mi piace più la soluzione proposta da steganoga ripetto alla mia (con il null).
Null, false, array vuoto, sono tutte soluzioni che non hanno nulla a che vedere con la definizione della funzione e presentano la stessa identica incompatibilità: non sono interi.


A questo punto mi viene in mente un'unica possibilità: hai provato ad impostare -1 come valore di default?


Citazione
però solo nel caso che il risultato sia coerente, guardacaso lanciando la seguente linea di codice:
strpos("aaba", "c");
si ottiene un bellissimo "false" (booleano!) e non uno "0" stringa oppure uno 0 integer.
Questa è una funzione nativa di php, non ha nulla a che vedere con joomla e comunque è definita in modo diverso. Non promette un intero ma un mixed.


Offline jabber

  • Esploratore
  • **
  • Post: 114
    • Mostra profilo
Re:Comportamento NON OTTIMALE di JInput
« Risposta #8 il: 29 Lug 2015, 13:51:27 »

Guarda giovi, sei gentilissomo a continuare a discutere con me, però se le tua risposte
sono del tipo "joomla è fatto così per una questione di definizioni", io ti rispondo lo stesso in
politichese e ti direi  "Ammesso ma non concesso che questo sia accettabile ... ecc ecc ecc".

Ma ti prego di dimenticare le 3 righe che ho scritto sopra e mi limito a dire che se si afferma,
per qualsiasi motivo, che la funzione JInput è giusta così com'è, io comunque non sarò mai
d'accodo, mai.

Io, se il risultato è incoerente mi aspetto (non un null, io sono disposto a rimigliorare/ridiscutere
le mie affermazioni) ma un false booleano.
Io comunque mi sono scritto la mia funzioncina custom, e se le cose stanno così, allora
continuerò a farlo, amen!

In fondo noi stiamo discutendo per apportare un miglioramente ad un sistema che spero
possano ereditare i posteri, e spero che Joomla! migliori sempre più.

Però mi piange veramente il cuore a vedere come JInput consideri di fatto lo 0 come un
valore riservato (questo non è bene).

In questo vedo una logica fallace, in sostanza un errore concettuale ed allora vorrei 
che le definizioni di Joomla siano migliorate.

Mia nonna mi diceva: "Caspita se tutti si buttano nel pozzo allora ti ci butti anche tu ?".

Ma caspita lo dico in senso positivo, chi me lo fa fare a consumare così tante parole
e tempo ? ;)

Spero di essere stato chiaro, cioè riguardo al fatto di vedere le cose con meno dogmi ma
migliorarle per renderle più utili dal punto di vista pratico, cioè cose su cui devi
picchiarci la testa ogni santo giorno.
E se ogni giorno devi fronteggiare situazioni ambigue (come appunto il risultato "0"
di JInput), io sento l'esigenza almeno di pormi il problema per risolverlo una volta
per tutte.

Se la questione va avanti da 10 anni oppure è stata gia affrontata tante volte
senza essere stata risolta in modo soddisfacente allora vuol dire che deve
continuare ad essere discussa.


  J
« Ultima modifica: 29 Lug 2015, 14:04:30 da jabber »

Offline giovi

  • Instancabile
  • ******
  • Post: 9835
  • Sesso: Maschio
    • Mostra profilo
Re:Comportamento NON OTTIMALE di JInput
« Risposta #9 il: 29 Lug 2015, 14:41:55 »
Qui è dove si discutono i problemi riguardanti joomla: https://github.com/joomla/joomla-cms
se sei convinto che la funzione vada migliorata proponi la  tua soluzione. mi raccomandò torna a farci sapere cosa ti rispondono ;-)

Offline steganoga

  • Abituale
  • ****
  • Post: 1313
    • Mostra profilo
Re:Comportamento NON OTTIMALE di JInput
« Risposta #10 il: 29 Lug 2015, 14:51:12 »

E' devo dire che mi piace più la soluzione proposta da steganoga ripetto alla mia (con il null).
-------------------------------------------------------------
...traumi di gioventù... erano riusciti a bucarmi un forum per un valore null, da allora per me non esiste più :)

il problema è che null è abbastanza ambiguo anche lui ... se è inteso come vuoto... vuoto +1 fa 1 ... se è inteso come non definito non definito+1 dà non definito

----------------------------------------------------------------------------------------------
Qui è dove si discutono i problemi riguardanti joomla: https://github.com/joomla/joomla-cms
se sei convinto che la funzione vada migliorata proponi la  tua soluzione. mi raccomandò torna a farci sapere cosa ti rispondono ;-)
-----------------------------------------------------------------------------------------------
...prima di iniziare una discussione con gli sviluppatori di J procurati delle gocce di diazepam e tienle lì accanto al pc con un bel bicchierone d'acqua...
...sono dove non ti aspetti di trovarmi, mi alimento della tua supponenza e disseto la mia curiosità nel silenzio.
Non sono un nemico, considerami un ospite.

Offline jabber

  • Esploratore
  • **
  • Post: 114
    • Mostra profilo
Re:Comportamento NON OTTIMALE di JInput
« Risposta #11 il: 29 Lug 2015, 19:13:42 »
Diazepam ? Roba pesante ;) .
Aprire una discussione lì mette veramente alla prova fino alle convulsioni ?
Dato che questa estate faccio già 2 lavori sono già abbastanza stressato di mio.
L'energica discussione di oggi era anche lo sfogo di qualche anno d'insoddisfazione
sulla questione/argomento di questo thread.

Comunque se gli sviluppatori Joomla sono così difficili da convincere e tendono a
tirar dritto per la loro, ciò potrebbe in parte spiegare la flessione dello share di joomla.

J
« Ultima modifica: 29 Lug 2015, 20:15:52 da jabber »

Offline steganoga

  • Abituale
  • ****
  • Post: 1313
    • Mostra profilo
Re:Comportamento NON OTTIMALE di JInput
« Risposta #12 il: 29 Lug 2015, 20:31:35 »
Aprire una discussione lì mette veramente alla prova fino alle convulsioni ?
-----------------------------------------------------------------------
...se quella piccola modifica li costringe a rivedere un po' tutto il framework altro che convulsioni. :)
E' vero che però molti sviluppatori sono cambiati... magari questi sono più propensi ad ascoltare..
Se non capita il tuo problema è difficile capire tutto il discorso e dargli la giusta importanza soprattutto se ti basi sul CMS che difficilmente, come diceva Giovi, cade in questa ambiguità... ma il CMS è fatto per supportare i test del framework per questo credo che sia importante questo problema.

...sono dove non ti aspetti di trovarmi, mi alimento della tua supponenza e disseto la mia curiosità nel silenzio.
Non sono un nemico, considerami un ospite.

Offline giovi

  • Instancabile
  • ******
  • Post: 9835
  • Sesso: Maschio
    • Mostra profilo
Re:Comportamento NON OTTIMALE di JInput
« Risposta #13 il: 30 Lug 2015, 10:40:46 »
Continuo a non capire perché vi ostiniate ad attribuire alla funzione filtro uno scopo diverso da quello per cui è stato pensato. State sicuramente confondendo il filtro, che è una cosa prettamente legata alla programmazione, con la validazione di un form. La funzione filtro è una funzione di sicurezza che impedisce, ad esempio, di distruggere un database a causa di una sql injection o di un codice errato. La validazione invece si occupa di assicurarsi che il tipo di dato immesso nel form corrisponda a quello che ci si aspetta (il cosiddetto controllo a prova di imbecille)....

E' chiaro che se aprite un ticket richiedendo un'altra volta la stessa cosa - a cui tra l'altro è già stata data una risposta legittima e condivisibile - vi rideranno in faccia... ;)

Offline steganoga

  • Abituale
  • ****
  • Post: 1313
    • Mostra profilo
Re:Comportamento NON OTTIMALE di JInput
« Risposta #14 il: 30 Lug 2015, 11:28:04 »
E' chiaro che se aprite un ticket richiedendo un'altra volta la stessa cosa - a cui tra l'altro è già stata data una risposta legittima e condivisibile - vi rideranno in faccia... ;)
----------------------------------------------------------------------------------
... già, per questo consigliavo a Jabber il diazepam...non capiscono e ridono.
Pensa che quando gli segnali le vulnerabilità, per farli smettere di ridere. gli devi buttare giù il sito o scrivere qualcosa in home :)
Non perdere tempo, vai avanti con il tuo filtro
« Ultima modifica: 30 Lug 2015, 11:31:44 da steganoga »
...sono dove non ti aspetti di trovarmi, mi alimento della tua supponenza e disseto la mia curiosità nel silenzio.
Non sono un nemico, considerami un ospite.

Offline jabber

  • Esploratore
  • **
  • Post: 114
    • Mostra profilo
Re:Comportamento NON OTTIMALE di JInput
« Risposta #15 il: 01 Ago 2015, 15:37:37 »
@steganoga

mi puoi dire che cosa avevano già risposto ? Ovviamente se vuoi oppure se hai tempo.




Ciao,
  J

Offline steganoga

  • Abituale
  • ****
  • Post: 1313
    • Mostra profilo
Re:Comportamento NON OTTIMALE di JInput
« Risposta #16 il: 01 Ago 2015, 15:56:14 »
non so, io non ho mai posto questioni su jinput, era giovi che parlava di una discussione già risolta
...sono dove non ti aspetti di trovarmi, mi alimento della tua supponenza e disseto la mia curiosità nel silenzio.
Non sono un nemico, considerami un ospite.

 



Web Design Bolzano Kreatif