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

    caratteri che possono disturbare il db: come mi comporto

    Salve ragazzi!
    Mi serve più che altro un parere su come comportarmi.
    Sappiamo bene che alcuni carateri possono disturbare il db in quanto lo espongono ad attacchi di vario tipo.
    Io vi chiedo: come mi comporto nei confronti di questi caratteri?

    Le possibilità che ho preso in considerazione sono 3:
    1) Li trasformo in spazi bianchi
    2) Li trasformo in entità HTML
    3) Mostro un messaggio di errore all'utente deciendogli che non possono essere inseriti

    Vi chiederete: il problema dov'è?

    Bhe, il problema sta nel fatto che finchè si tratta di inserire uno user o una password problemi non ce ne sono. Ma quando devo inserire una descrizione o cmq un testo che necessiti dell'utilizzo di tali caratteri?
    Io faccio anche dei controlli sulla lunghezza delle stringhe e capirete che nel momento in cui vado a trasformare questi caratteri il numero stesso di caratteri "inseriti" aumenta".
    E ci sono anche altre fattispecie. Insomma, voi come vi comportereste?

  2. #2
    Utente di HTML.it L'avatar di M4rko
    Registrato dal
    Dec 2000
    Messaggi
    619

    Re: caratteri che possono disturbare il db: come mi comporto

    [supersaibal]Originariamente inviato da mircov
    Salve ragazzi!
    Mi serve più che altro un parere su come comportarmi.
    Sappiamo bene che alcuni carateri possono disturbare il db in quanto lo espongono ad attacchi di vario tipo.
    Io vi chiedo: come mi comporto nei confronti di questi caratteri?

    Le possibilità che ho preso in considerazione sono 3:
    1) Li trasformo in spazi bianchi
    2) Li trasformo in entità HTML
    3) Mostro un messaggio di errore all'utente deciendogli che non possono essere inseriti

    Vi chiederete: il problema dov'è?

    Bhe, il problema sta nel fatto che finchè si tratta di inserire uno user o una password problemi non ce ne sono. Ma quando devo inserire una descrizione o cmq un testo che necessiti dell'utilizzo di tali caratteri?
    Io faccio anche dei controlli sulla lunghezza delle stringhe e capirete che nel momento in cui vado a trasformare questi caratteri il numero stesso di caratteri "inseriti" aumenta".
    E ci sono anche altre fattispecie. Insomma, voi come vi comportereste? [/supersaibal]
    Trasformare in entità HTML prima dell'inserimento nel DB non ha senso. E' giusto farlo quando dal DB prelevi questi dati che andranno poi mostrati in output al browser.

    Per quel che riguarda i caratteri dannosi (potenzialmente), la scelta più flessibile è probabilmente quella di utilizzare le funzioni di escape del tuo database (mysql_real_escape_string() ad esempio), facendo attenzione anche, ad esempio, al discorso dei magic_quotes (per evitare di fare l'escape due volte, e tenendo inoltre presente che le funzioni di escape agiscono su caratteri specifici. Nel caso di mysql, vengono filtrati apici e virgolette, ma non i caratteri % e _ (usati nelle query con LIKE).

    Quanto scritto è valido nel caso tu debba inserire, ad esempio da un form, uno o piu campi di lunghezza variabile che dovranno contenere del testo di vario tipo (pensa ad esempio ad un sistema di gestione di news, o a mille altri esempi simili).
    Qui trovi delle idee per proteggersi dalla sql injection:
    http://freephp.html.it/articoli/view...olo.asp?id=123
    ma il concetto di fondo, cioè filtrare o comunque validare l'input degli utenti, andrebbe applicato sempre (es: esecuzione di comandi di sistema, dare un nome ai file che vengono uploadati via PHP, ecc.ecc.)
    Tutti hanno bisogno di credere in qualcosa.
    Io credo che mi farò un'altra birra.


  3. #3
    Quell'articolo l'ho già letto però avrei voluto anche un vostro parere visto che è abbastanza generale.

    Quindi, da quello che ho capito, per proteggere il db basta che metta davanti ai caratteri potenzialmente pericolosi un carattere di escape?

  4. #4
    Utente di HTML.it L'avatar di M4rko
    Registrato dal
    Dec 2000
    Messaggi
    619
    [supersaibal]Originariamente inviato da mircov
    Quell'articolo l'ho già letto però avrei voluto anche un vostro parere visto che è abbastanza generale.

    Quindi, da quello che ho capito, per proteggere il db basta che metta davanti ai caratteri potenzialmente pericolosi un carattere di escape? [/supersaibal]
    Dipende dal tipo di dato e dal database.

    Nel tuo caso non c'è molto da fare:
    - o impedisci l'inserimento di alcuni caratteri, andando quindi a "tagliare" alcune cose, e probailmente non è ciò che vuoi
    - o fai attenzione ad utilizzare l'escape correttamente

    In linea di massima se fai un controllo per togliere gli slash dati dal magic_quotes e se usi sempre le funzioni specifiche del tuo database per l'escape, non dovresti avere problemi.
    Nel caso di SELECT con LIKE invece, devi valutare se l'eventuale passaggio di % o _ sia pericoloso o meno, per cui in quel caso decidi se lasciarli passare o toglierli.
    Tutti hanno bisogno di credere in qualcosa.
    Io credo che mi farò un'altra birra.


  5. #5
    Ma quei caratteri con l'escape non verrebbero "neutralizzati"?

    Edit
    Mi riferisco a % e _

  6. #6
    Utente di HTML.it L'avatar di M4rko
    Registrato dal
    Dec 2000
    Messaggi
    619
    Bhe o li togli, ad esempio con strtr(), oppure fai una sorta di escape artigianale con str_replace, oppure fai finta di niente

    In linea di massima questi caratteri possono preoccuparti quando esegui una select con clausula like. In questi casi ti poni la domanda: cosa succede se l'input viene "manipolato" inserendo % e _ ? E poi agisci di conseguenza
    Tutti hanno bisogno di credere in qualcosa.
    Io credo che mi farò un'altra birra.


  7. #7
    Vabbè, io non posso sapere a priori quali operazioni andrò a svolgere sul db quindi meglio premunirsi!

    Cmq per escape artigianale intendi quello che sto tentando di fare qui ?

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.