ancora gli apici

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.044
150
63
PR
www.borgo-italia.it
ciao
per programmatore:
io so cosa trovo digitando $_POST, trovo questo

$_POST
$HTTP_POST_VARS [deprecated]
$_POST -- $HTTP_POST_VARS [deprecated] — HTTP POST variables

per trogo
si metti d'accordo, in un certo senso è quello che dicevo io
 
ciao, divulgatore di foto non autorizzate:D
l'ho messo qui perche ritenevo che si trattase di una discussione più filosofika che proprio di php e avevamo iniziato la discussione in un post di un altro (intasandolo), la discussione era iniziata in riferimento al fatto di mettere apici a:

mysql_query("UPDATE ........ WHERE id='$id'");
oppure no, ecc....
 
Riguardo a $_POST e $HTTP_POST_VARS.

E' proprio vero che sono contorto, credevo che il consiglio di programmatore a borgo fosse una sorta di "presa in giro", dicendo di usare una variabile deprecata dato che usa gli apici, ritenuti deprecati anche questi, con i valori numerici nelle query.

Mi sa che son da ricovero.... :hammer:
 
ciao trogo
Mi sa che son da ricovero....
con quello che costa:D è meglio evitare.

comunque come detto sono "parzialmente" d'accordo con te, parzialmente in quanto anche se deprecati gli apici non sono un errore (forse un orrore)

mi piacerebbe sentire il parere anche di qualcun'altro
 
Infatti, ma il mio ricovero sarebbe in un birrificio come "garante della qualità" e "primo assaggiatore" :beer:

Mi sembra che nei post precedenti a riguardo nessuno abbia mai detto che sia un errore, come non è un errore usare $HTTP_POST_VARS invece di $_POST.

Solo sarebbe buona norma evitare di farlo, almeno a mio avviso.

Ma anche a me piacerebbe sentire altre voci a riguardo, anche se come argomento è magari un po' "filosofico".
 
Per quanto riguarda l'utilizzo di variabili o funzioni deprecate credo sia ben più che una buona norma il non utilizzarle. Anche se il loro utilizzo può essere considerato un errore vero e proprio, così facendo ci si vincola inevitabilmente ad una determinata versione di PHP, nel nostro caso, in quanto tali funzioni non saranno più supportate nelle release successive e ciò comporta modifiche al codice in caso di migrazione ad una versione più recente dell'interprete.
Io personalmente considero estremamente errato l'utilizzo di funzionalità deprecate.
 
Vabbè, allora continuiamo.

1) Il typecasting viene fatto da MySQL e non da PHP. Per PHP la query è tutta una stringa, non se ne occupa minimamente. Se l'esempio fosse stato trovato sulla documentazione ufficiale di MySQL, avrei inviato una mail dicendo di correggere l'esempio dato che potrebbe essere fuorviante.

2) Per il semplice fatto che un campo si chiami "id" non è assolutamente detto che nella tabella corrisponda ad un campo numerico. Potrebbe benissimo essere una stringa, dato che nella query si usano gli apici per contornare il valore.

3) Potrei anche capire se mi dici di voler usare gli apici per "proteggere" alcune query da un SQL Injection, anche se io preferisco altri controlli per la validazione dell'input utente.
 
Riguardo all' SQL Injection non avevo un esempio sottomano, ma poi l'ho trovato. Provate questo http://www.sinfonica.com/english/per_id.php?id=221.

E' evidente che il parametro passato viene poi usato per effettuare la query. Adesso vediamo se chi ha programmato questo sito valida l'input utente. Proviamo ad aggiungere al link questo: "%20AND%201=0" (senza le virgolette), ottenendo questo http://www.sinfonica.com/english/per_id.php?id=221 AND 1=0.

Direi che la validazione non c'è.... In un caso come questo, l'uso degli apici avrebbe potuto impedire il nostro giochetto.

Differenza tra le query ipotizzate:

SELECT * FROM books WHERE id = $_GET['id']

con i nostri parametri diventa:

SELECT * FROM books WHERE id = 221 AND 1=0

che non ritorna nessun libro.

Se avesse usato gli apici:

SELECT * FROM books WHERE id = '221 AND 1=0'

Che avrebbe funzionato a dovere.

P.S. Ho mandato un avviso al gestore del sito per avvisarlo del problema. Se effettuerete i test è possibile che non siano più funzionanti.
 

Discussioni simili