Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Ricercare parole con l'apostrofo

    Devo ricercare un record nel campo "cognome" di una tabella.
    Ora l'untente inserisce il cognome da ricercare tramite webform (POST).

    $sql = "SELECT * from utenti WHERE cognome=$cognome";

    Leggendo i vari articoli e post sull'argomento sicurezza e SQL injection mi sono preoccupato di validare l'input e di impostare il magic_quotes_gpc.

    Tutto bene, tranne quando il cognome ha l'apostrofo (D'Amico per esempio), in questo caso dovrei usare uno stripslash andando a perdere la protezione che mi garantiva il magic_quotes_gpc.

    Come si procede in questo caso?

    Grazie.


  2. #2
    Il magic_quote_gpc ti inserisce il carattere di escape davanti all'apostrofo. Quindi nessun problema.
    Non devi usare stripslashes nell'immissione, ma nell'estrazione del record quando ormai mysql non c'entra piu'....

    $cognome = stripslashes($row['cognome']);



    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it L'avatar di alegia76
    Registrato dal
    Mar 2003
    Messaggi
    1,179
    Oppure puoi fare una replace di ' con ''
    Sei l'eventualità di un'anomalia che nonostante i miei più onesti sforzi non sono stato in grado di eliminare da quella che altrimenti sarebbe un'armonia di precisione matematica..

  4. #4
    Ok, ha funzionato senza far nulla e con magic_quotes sempre attivo.

    Quando gli passo un cognome con l'apostrofo, il magic quotes aggiunge l'escape, però poi la query SQL funziona correttamente restituendomi i record cercati.

    Grazie per le risposte.



  5. #5
    Volevo aggiungere che il controllo contro le SQL-Injection lo faccio cosí:


    codice:
    if (isset($_GET["nome"])){
    
    	$nome = $_GET["nome"];
    	
    	//Add slashes se magic_quotes è off
    	if (!get_magic_quotes_gpc()) $nome = addslashes($nome);						
    	
    	//Stripping caratteri pericolosi
    	$nome = str_replace(array(",", ":", "-", "%", "_", "<", ">"), "", $nome);	
    
    }else{
    	exit ("Errore!");  
    }
    va bene?


  6. #6
    Ciao, io purtroppo non riesco a risolvere il problema anche se simile al tuo.
    Devo ricercare anch'io un cognome in una tabella tramite un form passato dall'utente. Qunado l'utente scrive il suo cognome lo passo a uno script che fa la select in tabella. Da notare che la variabile mi parte dall'utente così D'Amico e mi arriva così D\\'Amico . Facendo la select non trovo niente pur essendo inserito,nel db e'inserito senza escape. Non riesco a capire se quando si inserisce nel db, bisogna forzargli l'escape e poi utilizzare la funzione per togierlo quando bisogna visualizzarlo, oppure inserirlo correttamente nel db e toglierlo dal form dell'utente con qualche funzione?


    $query = "SELECT * FROM staff WHERE Cognome ='$cognome_log' AND Password ='$pass_log'";
    $result = mysql_query($query);
    $cognome = stripslashes($row['Cognome']);
    $password = stripslashes($row['Password']);
    if (($cognome_log != $cognome) or ($pass_log != $password))
    {
    echo"Cognome e/o Password sono errati.";
    }


    ciao e grazie a chi mi darà un suggerimento

    Gianni
    :coll:

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 © 2024 vBulletin Solutions, Inc. All rights reserved.