Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di hyb
    Registrato dal
    Aug 2003
    Messaggi
    424

    [php][register_globals]

    come si sa un codice di questo tipo:

    if ($_GET["id"]=13){
    $var="dir/dir2";
    /* questa var andra a completare un percorso relativo
    di un include.*/
    }

    la variabile var non esiste solo quando la si kiama con quell'if. Basta avere register globals su ON perche quella variabile possa essere facilmente settata dalla barra di indirizzo a piacimento:

    index.php?id=13 --> con register globals su on, una persona potrebbe cancellare id per settare a piacimento var... e ci riuscirebbe

    come posso ovviare a questo?
    C'è chi si mette degli occhiali da sole, per avere più carisma e sintomatico mistero.

  2. #2
    ci riuscirebbe in qualunque caso. Anche se register_globals fosse su OFF...

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it L'avatar di hyb
    Registrato dal
    Aug 2003
    Messaggi
    424
    beh no, perche la variabile che viene passata all'include è $var.

    se tu setti una $var sulla barra, con register_globals su off, devi per forza richiamarla $_GET["var"] e non semplicemente con $var.
    C'è chi si mette degli occhiali da sole, per avere più carisma e sintomatico mistero.

  4. #4
    Originariamente inviato da hyb
    beh no, perche la variabile che viene passata all'include è $var.

    se tu setti una $var sulla barra, con register_globals su off, devi per forza richiamarla $_GET["var"] e non semplicemente con $var.
    Chiamala come vuoi... e' il valore che conta... che differenza c'e' tra:
    codice:
    index.php?id=13
     
    if(isset($_GET['id']) and  $_GET['id'] == 13) 
    include "pippo.php";
    
    e
    
    if(isset($id) AND $id == 13)
    include "pippo.php";
    Il problema e' che non devi prendere tutto quello che ti passano ed usarlo senza verificarne il contenuto.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Utente di HTML.it L'avatar di hyb
    Registrato dal
    Aug 2003
    Messaggi
    424
    no, credo di non aver spiegato bene.
    per evitare i passaggi di variabili sulla barra ho creato un'unica variabile (id).
    in precedenza facevo passare diverse variabili, tra cui una che "selezionava" la directory, un'altra che selezionava il nome del file senza estensione. e tutto questo visibilmente (rido anche)

    ora, con usa serie di "case:" a seconda del numero id che passa, c'è una combinazione di queste variabili - rappresentate non più da $_GET["var"] --> ma semplicemente da $var, e che quindi non sono piu visibili sulla barra.

    il problema è che con register_globals su ON, chiamare $var è uguale a $_GET["var"].

    ho trovato cmq la soluzione: devo inizializzare le variabili al di fuori dell'if.

    però.... se setto le variabili su un certo valore di "deafult" diciamo: es. $var="default" - se una persona scrive nell'indirizzo index.php?var="abcsd" --- con il fatto che questa con reg_glob su On possa essere richiamata sia con $var e sia con $_GET["var"]... quale valore si impone con print $var ad esempio?
    Quello che ho settato sul foglio, inizializzata con default? O quella che proviene dalla barra?
    C'è chi si mette degli occhiali da sole, per avere più carisma e sintomatico mistero.

  6. #6
    Utente di HTML.it L'avatar di hyb
    Registrato dal
    Aug 2003
    Messaggi
    424
    up
    C'è chi si mette degli occhiali da sole, per avere più carisma e sintomatico mistero.

  7. #7
    Originariamente inviato da hyb
    up
    Non sei chiaro... stai tra la domanda e' l'affermazione..

    Il valore che vale e' l'ultimo immesso nel nome della variabile.
    $var e $_GET['var'] sono due variabili diverse. se trasferisci:

    $var = $_GET['var'];
    echo $var;

    verra' ovviamente stampato il contenuto di $_GET['var'].

    Se hai register_globals in ON basta non usare gli stessi nomi var che passi nella barra. Quando li trasferisci controlli i valori immessi. Che poi alla fine e quello che ti "obbliga" a fare il register_globals in off (oltre ad altre peculiarita' ovviamente)...

    Oppure forza register_globals in OFF con .htaccess

    Ma il nocciolo rimane. Non e' solo con get o la semplice var il problema sicurezza, ma nel controllo dei dati acquisiti (tipo, lunghezza, range ecc.).


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  8. #8
    Utente di HTML.it L'avatar di hyb
    Registrato dal
    Aug 2003
    Messaggi
    424
    ormai daniele mi ha messo in testa il tarlo della sicurezza
    Il valore che vale e' l'ultimo immesso nel nome della variabile.
    $var e $_GET['var'] sono due variabili diverse. se trasferisci:
    $var = $_GET['var'];
    echo $var;
    nello script non assumo mai $var = $_GET['var'].
    non posso cambiare register_global.
    la mia paranoia riguarda questo:

    con register global su on, $var e $_GET["var"] sono la stessa cosa se assumiamo index.php?var=1. Ok?

    "Ma il nocciolo rimane. Non e' solo con get o la semplice var il problema sicurezza, ma nel controllo dei dati acquisiti (tipo, lunghezza, range ecc.). "(piero)

    E' vero ho capito quello che vuoi dire.

    Quel var non è un problema. Cosi facendo pero, basta sapere il nome di qualsiasi variabile per settarla, ecco perche chiedevo:

    se inizializzo una variabile:

    esempio stupidino:

    $var= 0; /* inizializzo la variabile */
    if ($_GET["id"]=1){
    $var=1;
    }

    ragionando allo stato di paranoia, con reg_globals ON, se io provo a scrivere sulla barra ?var=1 (indovinando la variabile) - chi ha la meglio sul valore, la mia inizializzata nel foglio ($var=0) o quella che passa sulla barra?

    grazie della pazienza piero
    C'è chi si mette degli occhiali da sole, per avere più carisma e sintomatico mistero.

  9. #9
    A parte che daniele ha il suo mondo dove tutti lo attaccano e gli iniettano codice....da far venir voglia di provarci... La sicurezza di un server dipende maggiormente da come l'hoster gestisce il server che non da come imposti lo script.

    Se l'attacco sostituisce dei file puoi mettere tutte le cose buffe che vuoi. Se poi lo user si diverte a cambiare l'id di una ricerca non glielo puoi impedire ne con ON ne con OFF dei registri globali.
    Se passi una cosa del tipo ?delete=12 per cancellare un id allora si tratta di :fagianismo:

    any way...te lo gia detto....

    l'ultima cosa che scrivi nella variabile sovrascrive tutto il precedente.

    ammesso register globals = ON

    ?var=1

    entri nella pagina:

    echo "$var - Valore entrando nella pagina";

    $var= 0;
    echo "$var - Valore azzerato";

    provare .... no???


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

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.