+ Rispondi alla Discussione
Risultati da 1 a 9 di 9

Problema con variabili estrapolate da MySql in PHP5

Ultimo Messaggio di murnik il:
  1. #1
    User Newbie L'avatar di murnik
    Data Registrazione
    Nov 2008
    Località
    Ponte Nizza (PV)
    Messaggi
    8

    Problema con variabili estrapolate da MySql in PHP5

    Sì, lo so, avrei dovuto farlo molto tempo fa, ma mi sono deciso solo adesso a passare a PHP5.
    Da vecchio smanettone, ho trovato tutto quello che mi serve per adattare/modificare 20 anni di file.
    Però mi sono impiantato su una facility che mi sono voluto creare.
    Mi ero creato un file che contiene la conversione delle variabili che incontravo via via che mi apparivano i vari "Notice: Undefined variable: [variabile] in C:\[path]".
    Una serie di righe come queste che seguono:
    if(isset($_GET['id'])) { $id = $_GET['id']; } else { $id = ""; }
    if(isset($_GET['id_cli_orig'])) { $id_cli_orig = $_GET['id_cli_orig']; } else { $id_cli_orig = ""; }
    if(isset($_GET['id_dom'])) { $id_dom = $_GET['id_dom']; } else { $id_dom = ""; }
    if(isset($_GET['id_mnt_orig'])) { $id_mnt_orig = $_GET['id_mnt_orig']; } else { $id_mnt_orig = ""; }

    oppure
    if(isset($_POST['ggx'])) { $ggx = $_POST['ggx']; } else { $ggx = ""; }
    if(isset($_POST['giorno'])) { $giorno = $_POST['giorno']; } else { $giorno = ""; }
    if(isset($_POST['id'])) { $id = $_POST['id']; } else { $id = ""; }
    if(isset($_POST['ids'])) { $ids = $_POST['ids']; } else { $ids = ""; }

    Ovvio che ho voluto sveltire. Così mi sono creato una tabella, contenente i nomi di tutte le variabili e ho scritto il seguente codice, che però non funziona: il messaggio d'errore continua a comparirmi.
    Qualcuno sa dirmi dove sbaglio? Grazie in anticipo per ogni aiuto.

    $sql_var = "SELECT Var FROM 98_var ORDER by Var";
    $sql_result_var = mysql_query($sql_var,$connection) or die(mysql_error());
    while ($ValoriRiga_var = mysql_fetch_array($sql_result_var))
    {
    $var = $ValoriRiga_var ["Var"];
    $varout = "$".$var;

    if(isset($_GET['$var'])) { $varout = $_GET['$var']; } else { $varout = ""; }
    }
    mysql_free_result($sql_result_var);

  2. #2
    ModSenior L'avatar di Thedarkita
    Data Registrazione
    Aug 2006
    Località
    Messina
    Messaggi
    7,268
    Segui Thedarkita su Twitter Aggiungi Thedarkita su Google+ Aggiungi Thedarkita su Facebook Aggiungi Thedarkita su Linkedin Visita il canale Youtube di Thedarkita
    Ciao,
    al massimo dovrebbe essere:
    Codice:
    $sql_var = "SELECT Var FROM 98_var ORDER by Var"; 
    $sql_result_var = mysql_query($sql_var,$connection) or die(mysql_error()); 
    while ($ValoriRiga_var = mysql_fetch_array($sql_result_var)) 
    { 
         $nome_variabile = $ValoriRiga_var ["Var"]; 
         if(isset($_GET[$nome_variabile])) { $$nome_variabile = $_GET[$nome_variabile]; } else { $$nome_variabile = ""; } 
    } 
    mysql_free_result($sql_result_var);

    Anche se utilizzare cosi una tabella del database è abbastanza assurdo, oltre che inutile. Poi lo rifai anche per evitare SQL INJECTION o quelle le ignori completamente?

  3. #3
    User Newbie L'avatar di murnik
    Data Registrazione
    Nov 2008
    Località
    Ponte Nizza (PV)
    Messaggi
    8
    Grazie molte per l'indicazione. Finalmente ho risolto e ho (spero) imparato qualcosa. Quindi doppio grazie.
    Per quanto riguarda l'uso della tabella, in effetti potrei usare foreach. Immagino che ti riferissi a quello. Ammetto che è una pigrizia, dovuta alla migliore visibilita per me, quando controllo se una variabile esiste o no.
    Invece non ti seguo (certamente per mia ignoranza, che è tantissima) sulla SQL INJECTION. I dati in tabella sono inseriti da me manualmente, non con un form. Certo anche questo non è elegante, ma sono le conseguenze dell'avere smanettato tanti anni, imparando da sé: ci si trascinano i vizi, ai quali però siamo affezionati.
    Sempre disposto ad imparare però, nel caso si abbia la pazienza ti insegnarmi.
    Grazie ancora.

  4. #4
    User L'avatar di MiniGiochi
    Data Registrazione
    Sep 2014
    Località
    Udine
    Messaggi
    17
    Segui MiniGiochi su Twitter Aggiungi MiniGiochi su Facebook
    Si riferisce alla GET passata senza nessun controllo direttamente al database, quello è il metodo sicuro per farsi "bucare" il database e poi estrarre i dati in modo fraudolento. (detto in parole povere)
    In pratica le SQL Injection o iniezione di codice SQL in modo fraudolento sono proprio questo, si inserisce un pezzo di query tramite un form e si "buca" il database, se non ci si sta attenti ai dati immessi il rischio è enorme. Per esempio proprio quest'anno a Udine un ragazzino di 14 anni ha messo in rete tutte le cartelle cliniche dell'ospedale di Udine con una SQL Injection vecchia come il cucco ( 1 = 1 ) eppure il sistema era fornito e manutenuto da una grossa ditta regionale...
    Ora che tu dici di riempire il database a mano va bene, ma è buona pratica stare attenti a quelle cose, una GET o un POST non si passano mai direttamente senza prima fare un controllino a ciò che contengono, anche perché se si tratta di GET non serve il form per manipolarli, basta la barra degli url del browser.
    Infine se usi PHP5 studiati l'uso dei filtri e magari usa mysqli_ come funzioni che offrono una protezione superiore a quella delle vecchie funzioni che usi e che lo stesso PHP definisce deprecate ( vedi il manuale online alla pagina MySQL introduzione ).

    Ciao.
    www.minigiochi.it

  5. #5
    User Newbie L'avatar di murnik
    Data Registrazione
    Nov 2008
    Località
    Ponte Nizza (PV)
    Messaggi
    8
    Grazie per le indicazioni. Vedrò di capire se nel mio codice c'è qualche possibilita di SQL injection. Intendo dire che ci provano mille volte, ma ogni form viene prima controllato. E non uso mai GET. Il che però non mi tranquillizza del tutto. Mi studierò meglio la materia.

  6. #6
    ModSenior L'avatar di Thedarkita
    Data Registrazione
    Aug 2006
    Località
    Messina
    Messaggi
    7,268
    Segui Thedarkita su Twitter Aggiungi Thedarkita su Google+ Aggiungi Thedarkita su Facebook Aggiungi Thedarkita su Linkedin Visita il canale Youtube di Thedarkita
    Ciao,
    qui trovi una guida che ho scritto alcuni anni fa in merito all'argomento:
    http://www.giorgiotave.it/forum/scri...injection.html

    Può esserti utile a capire meglio come avviene una SQL INJECTION e di conseguenza a come proteggerti.

  7. #7
    User Newbie L'avatar di murnik
    Data Registrazione
    Nov 2008
    Località
    Ponte Nizza (PV)
    Messaggi
    8
    Grazie davvero, Thedarkita. È esattamente ciò che mi serve: sintetico, chiaro, efficace.

  8. #8
    ModSenior L'avatar di Thedarkita
    Data Registrazione
    Aug 2006
    Località
    Messina
    Messaggi
    7,268
    Segui Thedarkita su Twitter Aggiungi Thedarkita su Google+ Aggiungi Thedarkita su Facebook Aggiungi Thedarkita su Linkedin Visita il canale Youtube di Thedarkita
    Prego
    Se non capisci qualcosa, hai dubbi, o ti serve un aiuto chiedi pure nella discussione più appropriata per la tua domanda e appena possibile ti risponderò.


  9. #9
    User Newbie L'avatar di murnik
    Data Registrazione
    Nov 2008
    Località
    Ponte Nizza (PV)
    Messaggi
    8
    Grazie. Non mancherò.

+ Rispondi alla Discussione

^ Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
  • Il codice BB è Attivato
  • Le faccine sono Attivato
  • Il codice [IMG] è Attivato
  • Il codice [VIDEO] è Attivato
  • Il codice HTML è Disattivato
  • Trackbacks Attivato
  • Pingback Attivato
  • Refback Attivato

SEO by vBSEO 3.6.0 PL2 ©2011, Crawlability, Inc.