Visualizzazione risultati 1 fino 8 di 8

Discussione: Logica IF php

  1. #1
    Guest

    Predefinito Logica IF php

    Mi sto cimentando nella conversione del mio sito con gli inlcude di php.

    Dalla pagina "sinistra" si passa la variabile con il nome del file da includere nel corpo centrale con il comando "index.php?page=nomepagina".

    La logia dell'IF di controllo della index.php però mi blocca quando tento un "index.php?page=../documenti/nomepagina"
    In realtà non c'è un errore e infatti se inibisco l'IF la pagina viene caricata.

    Vorrei modificare l'IF in modo che mi accetti tutto il percorso e magari mantendo il controllo solo sulle pagine che effettivamente non esistono.

    Qualcuno mi può aiutare che io di php non ci capisco quasi una fava (anche senza quasi)!


    la index del sito è questa:
    ----------------------------------------------------------
    <? include("titolo.php");
    include ("destra/destra.php");
    include("sinistra.php"); $p="homeA"; //pagina di default per i contenuti centrali
    if(isset($_GET['page'])){ //pagina passata via parametro
    $p=$_GET['page'];
    if($p!=basename($p) || !preg_match("/^[A-Za-z0-9\-_]+$/",$p) || $p=="index" || // !file_exists($p.".php"))
    $p="error"; //pagina di errore
    }
    include($p.".php");

    include("sponsor.php"); ?>
    -------------------------------------------------


    P.S.
    è inutile andare a vedere sulla mia home page, poichè il sito in php non lo metto on line finchè non ho sistemato tutto
    Ultima modifica di krampus : 07-04-2006 alle ore 17.44.49

  2. #2
    Guest

    Predefinito

    io uso questo metodo un po diverso:

    Codice PHP:
    $pages = array('homeA'); //tutte le pagine che vuoi far vedere

    $page = ( isset($_GET['page']) ) ? $_GET['page'] : 'homeA';

    if(
    in_array($page, $pages) )
    {
    include(
    $page . '.php');
    }
    else
    {
    include(
    'error.php');
    }
    codice modificato: possibilità di scegliere il nome del file.

    Codice PHP:
    $pages = array('homeA' => 'nomecartella/homeA.php', 'pagina2' => 'pagina.php'); //tutte le pagine che vuoi far vedere

    $page = ( isset($_GET['page']) ) ? $_GET['page'] : 'homeA';

    if(
    array_key_exists($page, $pages) )
    {
    include(
    $pages[$page] . '.php');
    }
    else
    {
    include(
    'error.php');
    }
    Ultima modifica di jostock : 16-04-2006 alle ore 21.28.02

  3. #3
    Guest

    Predefinito

    Citazione Originalmente inviato da jostock
    io uso questo metodo un po diverso:
    ... cut ...
    Direi più sicuro

    @krampus
    Ci sono i controlli del secondo if che non ti permettono quel genere di operazioni (per ovvi motivi di sicurezza), mi riferisco a
    $p!=basename($p)
    e
    !preg_match("/^[A-Za-z0-9\-_]+$/",$p)

  4. #4
    Guest

    Predefinito

    Citazione Originalmente inviato da Inverno
    Direi più sicuro

    @krampus
    Ci sono i controlli del secondo if che non ti permettono quel genere di operazioni (per ovvi motivi di sicurezza), mi riferisco a
    $p!=basename($p)
    e
    !preg_match("/^[A-Za-z0-9\-_]+$/",$p)
    ...cioè scusa, è più sicuro il "mio" script?
    ... siccome non ci capisco una mazza, quali sarebbero gli ovvi motivi?

  5. #5
    Guest

    Predefinito

    Citazione Originalmente inviato da krampus
    ...cioè scusa, è più sicuro il "mio" script?
    ... siccome non ci capisco una mazza, quali sarebbero gli ovvi motivi?
    no, il contrario preferisco quello di Jostock (se usi meno di 30 files)

    Perche se togli quei controlli io posso passare ad esempio index.php?page=../config.php e rubarti la password del database/account (è solo un esempio)

  6. #6
    Guest

    Predefinito

    l'array con le pagine lo puoi creare anche dinamicamente prendendo i dati da un database o file di testo

  7. #7
    Guest

    Predefinito

    Citazione Originalmente inviato da Inverno
    no, il contrario preferisco quello di Jostock (se usi meno di 30 files)

    Perche se togli quei controlli io posso passare ad esempio index.php?page=../config.php e rubarti la password del database/account (è solo un esempio)
    ... chiedo scusa, ma non ci sto capendo una mazza! i controlli che ti salvano la vita sarebbero "$p!=basename($p)" e "!preg_match("/^[A-Za-z0-9\-_]+$/",$p)" ?

  8. #8
    Guest

    Predefinito

    Codice PHP:
    !preg_match("/^[A-Za-z0-9\-_]+$/",$p)
    Questa è un'espressione regolare, che verifica che $p contenga solo lettere, numeri, trattini (-) e underscore (_).
    Codice PHP:
    $p!=basename($p)
    questa controlla che la pagina passata via GET non sia uguale al nome del file: deve perciò essere in una sottocartella.

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •