Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 26

Discussione: caratteri speciali

  1. #1

    caratteri speciali

    Salve raga. Ho aperto un post simile ma questo è più specifico.
    Vorrei sapere quali sono i caratteri che possono essere pericolosi per il db. Io ho individuato questi:

    '
    "
    ;

    Ce ne sono altri?
    Come posso neutralizzarli? Li devo trasformare per forza o ci sono altri metodi?

  2. #2
    Ciao,
    in parte dipende dal db comunque...
    io controllerei anche la , (virgola) negli INSERT (es VALUES (1,2,3),(4,5,6))

    comunque se l'api PHP per il database che ti interessa prevede una funzione xxx_escape_string usala, e in più verifica anche la lunghezza massima delle stringe che provengono dall'utente.
    Alcuni attacchi prevedono un invio di stringhe molto molto lunghe per "impallare" il db.

    Fino a mysql 4.0 non serviva preoccuparsi troppo del ; (si poteva eseguire una sola query alla volta) ma, se non sbaglio, con mysqli si possono inviare più espressioni sql con una sola query
    per favore NIENTE PVT TECNICI da sconosciuti

  3. #3
    Il db che mi interessa è mysql.

    Sto chiedendo tutte queste info perchè sto ampliando la classe del tuo articolo su freephp (smartform).

    Quindi vorrei creare un metodo che prepari la stringa all'inserimento nel db.

    Di conseguenza i caratteri interessati sono
    '
    "
    ;
    ,
    _

    Ora, io ho preprato questa funzione

    Codice PHP:
    function _preparingToDb($var)
                    {
                       
    // Controllo se magic_quotes_gpc è attivato
                       
    if (get_magic_quotes_gpc() == 0// Non è attivata
                         
    {
                            
    // Devo fare l'escape di tutti i caratteri
                            
    $var str_replace("'""\'"$var);
                            
    $var str_replace('"''\"'$var);
                            
    $var str_replace("\ \", "\ \'", $var);
                            $var = str_replace(",", "\,", $var);
                            $var = str_replace(";", "\;", $var);
                            $var = str_replace("_", "\_", $var);
                         }
                       elseif (get_magic_quotes_gpc() == 1) // E' 
    attivata
                         
    {
                            
    $var str_replace(",""\,"$var);
                            
    $var str_replace(";""\;"$var);
                            
    $var str_replace("_""\_"$var);
                         }
                       return 
    $var;
                    } 
    Le domande sono:

    1) Devo inserire qualche altro carattere? O ne devo eliminare quacuno?

    2) Il manuale parla di un valore "NUL" ma non ho capito bene come identificarlo all'interno di una stringa

    3) Il manuale parla anche di una funzione, magic_quotes_sybase ma non ho ben capito la sua funzione nè se ne devo tener conto.

    Potreste chiarirmi un po' la faccenda?
    Grazie!

  4. #4
    Mi sono accorto che il forum mi ha modificato un po' il codice! VVoVe:

    Cmq credo che si capisca lo stesso. In pratica nel secondo parametro di str_replace aggiungo un \

  5. #5
    Tutti quei str_replace non servono perchè la funzione accetta come parametro anche degli array. Comunque io userei str_replace solo per i caratteri "pericolosi" che mysql_real_escape_string non tratta (es. il ; e la ,) e poi applicherei substring per troncare la stringa alla lunghezza massima che io ho predefinito.
    per favore NIENTE PVT TECNICI da sconosciuti

  6. #6
    io utilizzo sempre eregi_replace()... spero di non commettere errori!

    solitamente rimpiazzo i tag ( < e > ) e l'apostrofo ( ' )

    nient'altro

  7. #7
    Ho appena fatto una prova.

    Ho impostato un campo varchar di lunghezza 1 ed ho provato ad inserire \". Risultato? Il valore viene inserito come ".

    Da questo deriva che per fare il conteggio dei caratteri potrei contare tutti i caratteri contenuti nella stringa; poi contare quante volte una determinata stringa viene ripetuta (es \" , \' , \, , ecc.).

    Dalla somma totale dei caratteri sottrarre quella ottenuta dal conteggio delle stringhe ripetute e quindi otterrei il numero di caratteri che verrà inserito nel db.

    Ti trovi? Ho sbagliato qualcosa?

  8. #8
    [supersaibal]Originariamente inviato da c montecristo
    io utilizzo sempre eregi_replace()... spero di non commettere errori!

    solitamente rimpiazzo i tag ( < e > ) e l'apostrofo ( ' )

    nient'altro [/supersaibal]
    Meglio non usare le espressioni regolari quando una funzione "normale" fa le stesse cose con minor impatto sul server
    per favore NIENTE PVT TECNICI da sconosciuti

  9. #9
    [supersaibal]Originariamente inviato da mircov
    Ho appena fatto una prova.

    Ho impostato un campo varchar di lunghezza 1 ed ho provato ad inserire \". Risultato? Il valore viene inserito come ".

    Da questo deriva che per fare il conteggio dei caratteri potrei contare tutti i caratteri contenuti nella stringa; poi contare quante volte una determinata stringa viene ripetuta (es \" , \' , \, , ecc.).

    Dalla somma totale dei caratteri sottrarre quella ottenuta dal conteggio delle stringhe ripetute e quindi otterrei il numero di caratteri che verrà inserito nel db.

    Ti trovi? Ho sbagliato qualcosa? [/supersaibal]
    Non devi fare un conteggio preciso, basta che la stringa stia entro quello che stabilisci a priori e non arrivi, ad esempio, ad alcuni mega di roba quando non sia previsto.
    per favore NIENTE PVT TECNICI da sconosciuti

  10. #10
    [supersaibal]Originariamente inviato da Fabio Heller
    Meglio non usare le espressioni regolari quando una funzione "normale" fa le stesse cose con minor impatto sul server [/supersaibal]
    pero' almeno so che cosa sta filtrando... con htmlentities non sono sicuro di quello che fa

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.