Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    376

    mysql_real_escape_string deprecato

    leggo su php.net che mysql_real_escape_string è deprecata e sarà rimossa da php 5.5. Perciò, uso la nuova mysqli_real_escape_string.
    Ma cosa avverrà esattamente? Il php non si occuperà di anteporre slash ma dovrò farlo io lato codice?

    Attualmente,uso questo tipo di codice che dovrebbe andar bene anche con php < 5.4
    codice:
    if (function_exists('get_magic_quotes_gpc') && !get_magic_quotes_gpc()) { 
    mysqli_real_escape_string($db, $_POST['campo']);
    } else {
    mysqli_real_escape_string($db, $_POST['campo']);
    }
    In pratica dico che se esiste la funzione "get_magic_quotes_gpc" (php < 5.4.0) e non è attiva allora antepongo io i \ ai caratteri pericolosi, altrimenti (php > 5.4.0 e, quindi, funzione "get_magic_quotes_gpc" rimossa) lo stesso devo anteporre io i \ per sicurezza.

    Sto procedendo bene oppure no?

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    292
    ciao lucianos, dovresti passare a mysqli o pdo. puoi trovare informazioni e guide online facilmente.

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    376
    Quote Originariamente inviata da arkus Visualizza il messaggio
    ciao lucianos, dovresti passare a mysqli o pdo. puoi trovare informazioni e guide online facilmente.
    infatti, sono passato a mysqli, come puoi vedere dal codice postato.

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    292
    scusa, non avevo letto il codice.
    la magic io la considero preistoria, tentava appunto di mettere una pezza in modo automatico ma non é specifica. se attivo andrebbe eseguito lo strip e successivamente l'escape, altrimenti esegui direttamente l'escape.
    sarebbe buona pratica avvalersi dei prepared statement.

    edit:
    la magic non dipende dal fatto che l'estensione mysql è deprecata. In ogni caso la magic quote è stata deprecata ancora prima con la 5.3 e rimossa con la 5.4
    Ultima modifica di arkus; 25-01-2015 a 22:55

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    376
    io non ho capito però, per non stravolgere tutta l'applicazione, come devo modificare il mio codice usando però mysqli_real_escape_string in presenza o meno delle magic: ha senso il codice che ho postato prima o va modificato in qualche modo?

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    292
    Direttamente dalla documentazione http://php.net/manual/en/function.ge...quotes-gpc.php
    un esempio:

    // Usage across all PHP versions
    if (function_exists("get_magic_quotes_gpc") && get_magic_quotes_gpc()) {
    $lastname = stripslashes($_POST['lastname']);
    }
    else {
    $lastname = $_POST['lastname'];
    }

    // If using MySQL
    $lastname = mysql_real_escape_string($lastname);
    (da usare mysqli)

    oppure troverai sempre un esempio con una funzione "stripslashes_deep" che può essere utilizzata per eseguire lo strip di tutti i dati passati in get,post e cookie

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    376
    Quote Originariamente inviata da arkus Visualizza il messaggio
    // Usage across all PHP versions
    if (function_exists("get_magic_quotes_gpc") && get_magic_quotes_gpc()) {
    $lastname = stripslashes($_POST['lastname']);
    }
    else {
    $lastname = $_POST['lastname'];
    }
    abbiate pazienza ma mi è poco chiaro questo codice.

    Se ho capito bene dice che se la funzione per anteporre i backslashes esiste ed è attivata allora aggiunge i \ ai POST: giusto? se sì, perchè dovrei togliere i \ prima di inviare i valori al db? non è pericoloso?
    Altrimenti (else), se la funzione per anteporre i backslashes non esiste o non è attiva, allora dovrei inserire i valori POST senza trattarli: non è anche questo pericoloso?
    Ultima modifica di LucianoS; 26-01-2015 a 23:05

  8. #8
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    Stai facendo veramente tanta confusione. Ciò che ti permette di fare l'escape è mysql_real_escape_string, o chi per lui. Tutto ciò che c'è prima è superfluo. Le magic quotes non sono una protezione per le sql injection. Non lo sono mai state. Sono solo un danno. E' imbarazzante che fino alla 5.4 erano ancora attivabili. Quindi ecco la risposta: smetti di preoccuparti se le magic quotes sono attive o meno. Non trattarle proprio nel tuo codice. Proteggerti dalle sql injection è un tuo compito, che non puoi affidare a nessun sistema pseudo automatico. http://stackoverflow.com/questions/6...jection-in-php

    Per quando riguarda le mysql_* funzioni, si, sono deprecate. Pure da parecchio. Questo significa che in una delle prossime versioni di php quell'estensione non verrà più distribuita con php. Penso che ci vorrà ancora parecchio prima che questo si verifichi, ma sarebbe una buona cosa fare "il passo in avanti" già oggi e iniziare ad utilizzare mysqli_* o ancora meglio pdo.

    Per quando riguarda la curiosità
    se sì, perchè dovrei togliere i \ prima di inviare i valori al db? non è pericoloso?
    Devi togliere i backslash aggiunto dalle magic quotes prima di passare il dato a mysql_real_escape_string. In caso contrario viene fatto un secondo escape, con il risultato che la stringa utilizzata nella sql conterrà anche il carattere di escape come un carattere valido da salvare/utilizzare.
    Ultima modifica di .Kurt; 26-01-2015 a 23:56

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    376
    Quote Originariamente inviata da .Kurt Visualizza il messaggio
    Devi togliere i backslash aggiunto dalle magic quotes prima di passare il dato a mysql_real_escape_string. In caso contrario viene fatto un secondo escape, con il risultato che la stringa utilizzata nella sql conterrà anche il carattere di escape come un carattere valido da salvare/utilizzare.
    e questo mi è chiaro: infatti sto usando mysqli.
    Ma come faccio a togliere i backslash aggiunti dalle magic quotes, come dici tu, prima di passare i valori a mysqli_real_escape_string ? come minimo devo controllare se la magic quotes sono attive, giusto? e qui interviene il codice da me postato all'inizio: non so se va bene così o devo modificarlo. Puoi farmi un esempio pratico su di esso, così capisco meglio? grazie

  10. #10
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    Ma come faccio a togliere i backslash aggiunti dalle magic quotes, come dici tu, prima di passare i valori a mysqli_real_escape_string ? come minimo devo controllare se la magic quotes sono attive, giusto?
    L'esempio te lo ha fornito arkus. stripslashes per togliere i backslash aggiunti e indesiderati. Ma come ti ho detto nel tuo codice non devi preoccuparti di trattarle. Se trovi un hosting in cui sono attive allora semplicemente disabilitale. Inoltre da php 5.4 non esistono neanche più. C'è un limite per quanto ti devi preoccupare per mantenere il tuo lavoro compatibile con le vecchie versioni di php.

    e qui interviene il codice da me postato all'inizio
    Quello che hai postato tu non ha significato: nel caso in cui le magic quotes sono attive effettui l'escape con mysqli_real_escape_string, nel caso in cui non lo sono effettui comunque l'escape con mysqli_real_escape_string. Capisci bene che così la condizione perde significato, perché in entrambi i casi effettui la stessa operazione.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.