Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    errore su espressione regolare

    ho un form per la ricerca anagrafica con le magic quote attive. quindi se qualcuno cerca una persona che abbia l'apostrofo nel cognome il parametro pasato anzichè ' sarà \'

    per eludere questo volevo impostare un'espressione regolare che permetta di sostituire l'apostrofo con un % ed eludere il controllo anti injection.

    l'espressione è questa:

    $cognome = eregi_replace("^([a-z]+)(\'[a-z])","\\1%\\2", $cognome);

    non funziona. qualcuno sa dirmi dov'è l'errore?

    es: deve sostituire "dall'oca" con "dall%oca"

  2. #2

    Re: errore su espressione regolare

    ti basta uno stripslashes() se hai un \ di troppo
    altrimenti se proprio vuoi fare la sostituzione basta $string=str_replace("'","%",$string);

  3. #3
    le due alternative che mi presenti aumenterebbero i rischi di sql injection. per questo, per circoscrivere la casistica, vorrei utilizzare le espressioni regolari...

  4. #4
    se hai magic gpc ad ON (pare tu lo abbia) e quindi fa automaticamente l'addslashes non capisco quale sia il problema VVoVe:

  5. #5
    si', il magic quotes è on.

    il problema è non posso permettere che passi nella query di richiesta apici semplici. eppure ci sono cognomi che lo includono.
    non vorrei togliere il backslash.

    comunque con:

    $cognome=str_replace("\'","%",$cognome);


    potrebbe funzionare, anche se non sono convinto. credo che con un po' di hacking serio se non ci sono i backslash cade il palco.

  6. #6
    $query="select * from tab where nome like '{$nome}'";

    $nome viene passato da form , la persona scrive d'iego per magic gpc diventa d \ ' iego

    la query diventa
    codice:
    select * from tab where nome like 'd \ 'iego'
    e viene eseguita senza problemi

  7. #7
    sì, verrà eseguita la query ma non troverà d'iego sul db perchè sta cercando d\'iego che non esiste.

  8. #8
    Originariamente inviato da ..::h0p::..
    sì, verrà eseguita la query ma non troverà d'iego sul db perchè sta cercando d\'iego che non esiste.

    ma non troverà? che significa??

  9. #9
    lo troverà
    per trovare d \ ' iego bisognerebbe cercare d \ \ \ ' iego

  10. #10
    spiacente ma l'ho appena testato. se fosse possibile quello che dici tu sarebbe possibile "iniettare" stringhe maliziose.

    es.

    voglio cercare cognome = DALL'OCA

    il parametro sarà $cognome = "DALL'OCA"

    lo passa e scatta il controllo del magic quote sull'apice
    --> $cognome = "DALL\'OCA"

    che nella query diventa:

    select * from tabella where cognome = 'DALL\'OCA"

    ovvero INESISTENTE.

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.