Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di Nix82
    Registrato dal
    Oct 2001
    residenza
    Mussolente (VI)
    Messaggi
    1,122

    [Querystring] Controlli su GET


    Giorno PHPisti

    ho sempre ritenuto di aver eseguito controlli relativamente sicuri sui valori passati con GET ma oggi il Membro Senior DLLiano mi ha creato un errore 500 su Apache. Non potete immaginare che figura

    Allora dal menu passo i parametri con GET

    codice:
    HOMEPAGE -> index.php?page=home
    NEWS        -> index.php?page=news
    FOTO        -> index.php?page=foto
    Adesso nell'index.php eseguo i controlli
    Codice PHP:
    // Lista di tutte le pagine del sito
    $all_pages = array('home','news','foto');

    // Prelevazione valore passato tramite GET
    $page = isset($_GET['page']) ? $_GET['page'] : 'home'
    Ora devo controllare se $page è contenuto in $all_pages. Per farlo utilizzo la funzione array_search

    Codice PHP:
    if(array_search($page$all_pages) === FALSE) {
            
    $page 'home';

    Con gli script precedenti ho identificato TUTTI i casi:
    -> Se $page non esiste allora $page = 'home'
    -> Se $page esiste ed è uguale a un valore di $all_pages allora $page resta invariata
    -> Se $page esiste ed è diversa da un valore di $all_pages allora $page = 'home'

    Dopo importo tutto con
    Codice PHP:
    include($page .'.php'); 
    Ho provato anche a modificare la querystring sul valore di page ed effettivamente lo script funziona!

    Però non capisco una cosa: se metto sull'indirizzo
    index.php?page=../
    Mi restituisce un errore 500

    Non mi torna sta roba! ../ resta sempre una stringa non contenuta nell'array $all_pages quindi non dovrebbe darmi errore e invece me lo da! Come mai ?
    :master: :master:
    La cultura è il nostro passaporto per il domani. Il futuro appartiene alle persone che si preparano oggi.
    Martin Luther King

  2. #2
    innanzi tutto un consiglio al volo ... forse ti conviene fare, per maggiore facilità, un qualcosa del genere


    invece di
    $all_pages = array('home','news','foto');

    un bel
    $all_pages = array('home' => 'home.php','news' => 'news.php','foto' => 'foto.php');

    in modo che poi

    codice:
    if (
            !isset($_GET['page']) || 
            !isset($all_pages[$_GET['page']])
        )
    {
      $requiredPage = $all_pages['home'];
    }
    else
    {
      $requiredPage = $all_pages[$_GET['page']];
    }
    e poi sotto

    require_once $requiredPage;

    ovviamente un controllino per verificare l'esistenza sarebbe anche cosa buona

    un'altra alternativa e verificare se semplicemente il modulo richiesto esiste all'interno di una data cartella e verificando anche che il percorso richiesto sia esattamente quello della cartella dei moduli.

    in questo modo sei comunque al sicuro a sufficenza e non devi modificare ogni volta l'elenco dei moduli

    il requisito per l'esecuzione infatti dovrebbe essere che il modulo richiesto è un modulo conosciuto e quindi:
    - se sta nella cartella che dici tu
    - e il modulo esiste nella cartella che dici tu
    può essere eseguito

    certo, si è soggetti a problemi riguardanti l'upload di file esterni in quella cartella ... ma di certo se posso uppare file esterni in uno spazio web, il mio ultimo pensiero e far comparire un modulo con la scritta sei fesso ^^


    ---

    PS1: per curiosità ... fai un bel var_dump di array search, e guarda cosa restituisce

    PS2: comunque per l'utilizzo che fai è più convieniente usare in_array, infatti a te non serve sapere, almeno col codice attuale, l'indice esatto, ma solo se c'è o no

    PS3: guarda che sono membro junior e non senior!
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  3. #3
    Utente di HTML.it L'avatar di Nix82
    Registrato dal
    Oct 2001
    residenza
    Mussolente (VI)
    Messaggi
    1,122
    Originariamente inviato da daniele_dll
    PS2: comunque per l'utilizzo che fai è più convieniente usare in_array, infatti a te non serve sapere, almeno col codice attuale, l'indice esatto, ma solo se c'è o no

    zio stradino

    ho provato solo a cambiare lo script

    Codice PHP:
    if(array_search($page$all_pages) === FALSE) {
            
    $page 'home';

    con

    Codice PHP:
    if(!in_array($page$all_pages)) {
            
    $page 'home';

    e funziona alla grande

    alla fine avevo solo sbagliato funzione

    Comunque ottimo anche il tuo metodo!
    Grazie daniè
    La cultura è il nostro passaporto per il domani. Il futuro appartiene alle persone che si preparano oggi.
    Martin Luther King

  4. #4

    Re: [Querystring] Controlli su GET

    Originariamente inviato da Nix82

    Giorno PHPisti

    :master: :master:
    cioe' lui non ti becca .. ?
    forse perche' devi usare la notazione %2E%2E :master:

  5. #5
    Utente di HTML.it L'avatar di Nix82
    Registrato dal
    Oct 2001
    residenza
    Mussolente (VI)
    Messaggi
    1,122

    Re: Re: [Querystring] Controlli su GET

    Originariamente inviato da kentaromiura
    cioe' lui non ti becca .. ?
    forse perche' devi usare la notazione %2E%2E :master:

    no no avevo solo sbagliato funzione
    La cultura è il nostro passaporto per il domani. Il futuro appartiene alle persone che si preparano oggi.
    Martin Luther King

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.