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

    ereg || preg_match || mb_ereg_match

    ciao a tutti,
    ho un problemino non difficile ma mi sono perso fra le funzioni da usare; ho uno script in php e, per sicurezza, ho una condizione all'inizio del file.

    se l'url non è www.dominio.com/index.php?p=pagina redireziono alla homepage, altrimenti inizia lo script:
    codice:
    if (!ereg("^/index.php?p=pagina",$_SERVER['REQUEST_URI'])) header ("Location: www.dominio.com");
    else {codice php};
    purtroppo però non funziona
    dove sbaglio?

    grazie
    grazie... ancora

  2. #2
    nè così:
    if (!ereg('/^/index.php?p=pagina/',$_SERVER['REQUEST_URI']))

    nè così:
    if (!ereg('/^\/index\.php\?p\=pagina/',$_SERVER['REQUEST_URI']))

    sicuramente mi sono perso in un bicchier d'acqua
    grazie... ancora

  3. #3
    Utente di HTML.it L'avatar di M4rko
    Registrato dal
    Dec 2000
    Messaggi
    619
    I delimitatori, nel tuo caso gli slash all'inizio e alla fine della regex, servono solo nella sintassi perl-compatibile, quindi non con le ereg* ma con le funzioni preg*

    Utilizza quindi preg_match (tra l'altro le preg* sono piu veloci delle ereg*, quindi tanto vale usarle sempre), e già che ci sei mettici una "i" dopo il delimitatore di chiusura, in modo da rendere la regex case-insensitive.

    Detto questo mi viene in mente un'altra considerazione:
    $_SERVER['REQUEST_URI'] non è sempre disponibile, e probabilmente puoi giocartela facendo un semplice controllo su $_GET['p'], anche senza usare le espressioni regolari
    Tutti hanno bisogno di credere in qualcosa.
    Io credo che mi farò un'altra birra.


  4. #4
    ciao,
    grazie della risposta.

    alla fine me la sono cavata così:
    if (!preg_match('/^\/index\.php\?p\=pagina1\&d\=pagina2/',$_SERVER['REQUEST_URI']))

    volevo fare una cosa del genere perchè in realtà dopo il parametro p ho un parametro d che varia... volevo un'espressione che significasse "che inizia con"
    comunque se aggiungevo all'if una condizione con un or (||) non mi funzionava...


    ho un altro problemino però
    come valore al parametro d io ho bisogno di passargli degli url.
    il problema è che sia senza codifica esplicita con rawurlencode (perchè gli spazi gli encoda automaticamente con %20) che con, mi restituisce errori in presenza dell'apice ' (codificato come %27 per capirsi) e mi risponde con questo warning:
    Warning: opendir(../1989 - Jeff Beck\\'s Guitar Shop): failed to open dir: No such file or directory
    come vedi in realtà apache/php (sono su linux e forse può esserne la causa) automaticamente fa precedere l'apice da un back-slash (\\'), come in effetti la bash richiede... (tra l'altro anche su questo forum ha lo stesso effetto, ho dovuto scrivere \\ per far apparire \ )

    beh, se puoi darmi un parare su questo mi saresti utile!
    grazie



    ps:
    caspita, sono diventato un membro senior, devo mettere la testa a posto!
    grazie... ancora

  5. #5
    Utente di HTML.it L'avatar di M4rko
    Registrato dal
    Dec 2000
    Messaggi
    619
    [supersaibal]Originariamente inviato da UNIX-based

    ho un altro problemino però
    come valore al parametro d io ho bisogno di passargli degli url.
    il problema è che sia senza codifica esplicita con rawurlencode (perchè gli spazi gli encoda automaticamente con %20) che con, mi restituisce errori in presenza dell'apice ' (codificato come %27 per capirsi) e mi risponde con questo warning:come vedi in realtà apache/php (sono su linux e forse può esserne la causa) automaticamente fa precedere l'apice da un back-slash (\\'), come in effetti la bash richiede... (tra l'altro anche su questo forum ha lo stesso effetto, ho dovuto scrivere \\ per far apparire \ )

    beh, se puoi darmi un parare su questo mi saresti utile!
    grazie [/supersaibal]
    In php.ini hai per default la direttiva magic_quotes_gpc su On, la quale fa un escape in automatico dei dati che passi via $_GET, $_POST o $_COOKIE (gpc appunto), cioè aggiunge un backslash ai caratteri che lo richiedono, tipo l'apice o le virgolette.
    Dovrebbe bastare un stripslashes(), ma fai attenzione a controllare i dati che ti vengono passati. Ad esempio, visto che devi aprire file o directory, è il caso di evitare che l'utente possa usare "../", tipo index.php?p=pagina&d=../../../etc/passwd



    caspita, sono diventato un membro senior, devo mettere la testa a posto!
    Tutti hanno bisogno di credere in qualcosa.
    Io credo che mi farò un'altra birra.


  6. #6
    ottimo! ti ringrazio... ho risolto così:
    codice:
    if (!isset($_GET[d])) $dir=$rootdir;
    else $dir=stripslashes($_GET[d]);
    senti, già che ci siamo... sapresti consigliarmi anche una funzione per le lettere accentate à, è, é, ì, ò, ù?
    giusto per completezza... altrimenti, visto che ora funziona, le rinomino con l'apice a', e', o', i', u'.

    grazie ancora!
    grazie... ancora

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.