Visualizzazione risultati 1 fino 6 di 6

Discussione: $_server['http_referer']

  1. #1
    Guest

    Predefinito $_server['http_referer']

    Salve a tutti.
    Nel mio sito (http://automodelli.altervista.org/) ho inserito un'area riservata e ovviamente anche l'area in cui gli utenti si possono registrare..
    Una volta inseriti i dati viene eseguito il file controllo_dati.php che appunto controlla la validità di ciò che l'utente ha inserito..
    Una volta fatto questo, se i dati sono corretti, questi ultimi vengono inseriti nel database e viene lanciata la pagina invio_mail.php (a cui viene passato tramite metodo GET l'id della riga corrispondente del db) che si occupa di inviare all'utente una mail di riepilogo dei dati appena introdotti.
    Fatto questo viene lanciata una pagina di riepilogo in cui tra l'altro si avvisa l'utente del corretto (o meno) invio della mail riepilogativa.
    Premetto che ho preferito spezzare tutte queste fasi in 3 file poichè il sito ha uno scopo didattico (è un progetto dell'università) e quindi preferisco mantenere una certa pulizia nel codice..
    Mi piacerebbe che la pagina di riepilogo fosse visibile solo ed esclusivamente dopo l'inserimento dei dati, in modo che sia visibile solo all'utente interessato e a nessun altro (nel remoto caso il browser venga poi utilizzato da qualcun'altro, magari senza che nel frattempo sia stato chiuso.. Lo so è alquanto raro, ma è per un esame..)
    Per questo avevo pensato di confrontare la pagina di provenienza dell'utente con quella che lancia la pagina di riepilogo (la invio_mail.php, che può essere lanciata solo in seguito alla corretta introduzione dei dati per la registrazione..).
    A tale scopo avevo utilizzato la variabile di sessione $_SERVER['HTTP_REFERER']
    Qui però è sorto il mio problema: con Mozilla il tutto funziona perfettamente (provare per credere..) ma con Internet Explorer invece non funziona, infatti non viene interpretato HTTP_REFERER.
    Questo è il codice da me utilizzato per fare tale confronto:

    <?php
    session_start(); //inizia la sessione
    $redirect="accesso_negato.php";
    $prov="http://automodelli.altervista.org/utenti/invio_mail.php?id=$_GET[id]";
    if ($_SERVER['HTTP_REFERER'] != $prov)
    {
    $_SESSION=array(); // Desetta tutte le variabili di sessione.
    session_destroy(); //Distrugge la sessione.
    header("Location: $redirect");
    }
    else
    {
    $_SESSION=array(); // Desetta tutte le variabili di sessione.
    session_destroy(); //Distrugge la sessione.
    ?>

    Poi segue il codice necessario per visualizzare il riepilogo.
    Ho provato ad usare apici, virgolette ($_SERVER["HTTP_REFERER"]), oppure niente, ma il risultato non cambia e non capisco perchè (maledetto Bill..)

    Sarei molto grato a chiunque riuscisse a darmi un suggerimento, altrementi dovrò cambiare l'approccio alla questione, ma francamente mi piacerebbe usare questa..

  2. #2
    Guest

    Predefinito

    Qui però è sorto il mio problema: con Mozilla il tutto funziona perfettamente (provare per credere..) ma con Internet Explorer invece non funziona, infatti non viene interpretato HTTP_REFERER.
    Ciò non ti ha fatto pensare che forse il problema non è lato server ma lato client?

    Probabilmente con IE non passi il referer della pagina da cui provieni; puoi controllarlo facilmente printando a video il contenuto di $_SERVER['HTTP_REFERER']. Se non ti visualizza il referer allora vorrà dire che esso non viene passato allo script dal browser che utilizzi.

    Bye.
    Ultima modifica di AngelinoAnt : 03-05-2006 alle ore 15.34.30

  3. #3
    Guest

    Predefinito

    forse dipende dalle impsotazioni disicurezza, infatti cn determinate impostazioni i browser possono anche non inviare il referer...penso che l'unico modod sicuro sia quello di usare una variabile di sessione in cui inserisci tu un 'referer manuale' accompagnato dal timestamp in modo da farlo scadere dopo solo 3-5 secodni...

  4. #4
    Guest

    Predefinito

    Citazione Originalmente inviato da AngelinoAnt
    Ciò non ti ha fatto pensare che forse il problema non è lato server ma lato client?

    Probabilmente con IE non passi il referer della pagina da cui provieni; puoi controllarlo facilmente printando a video il contenuto di $_SERVER['HTTP_REFERER']. Se non ti visualizza il referer allora vorrà dire che esso non viene passato allo script dal browser che utilizzi.

    Bye.
    Avevo già provato e avevo già capito che il problema era a lato client (o meglio a lato IE), ed il problema resta anche settando al minimo tutti i parametri di sicurezza del browser...ed è proprio qui che non riesco a capire perchè non funzioni, visto che $_SERVER['HTTP_REFERER'] dovrebbe essere universale..
    Comunque ora proverò a creare la variabile manualmente (ammesso di riuscirci..)

  5. #5
    Guest

    Predefinito

    mmm.... Fossi in te io farei semplicemente in modo che la pagina di riepilogo non fosse altro che una inclusione di un else derivante dal buon esito dell'invio dell'email .. Non perderai nulla in fatto di pulizia del codice..:

    Codice PHP:
    $feedback ="";
    if(!@
    mail ($email, $oggetto_email, $mail_body, $headers)) {
    $feedback .= 'Si è verificato un problema durante l\'invio dell\'email.';
    } else
    $feedback .= ' Pagina di riepilogo e tutti i suoi contenuti vanno in questo else';

    return
    $feedback;
    Eviterei in altre parole di creare un'altra pagina php... Farei tutto in una..
    Facendo in questo modo sarai certo che la pagina di riepilogo sia soltanto una conseguenza del buon invio dell'email..

    Se proprio vuoi che la pagina di riepilogo stia in una pagina a se stante.. Modifica quell'else di cui sopra, e fai in modo che definisca una variabile di sessione..

    Poi nella pagina di riepilogo fai in modo che lui cerchi l'esistenza di questa variabile di sessione anziche cercare il referrer
    Ultima modifica di attorianzo : 04-05-2006 alle ore 01.47.06

  6. #6
    Guest

    Predefinito

    Più che nell'ambito "sicurezza" in questo caso cadiamo in quello di "privacy", quindi cose che l'utente può decidere o meno di far girare.
    Citazione Originalmente inviato da automodelli
    ...ed è proprio qui che non riesco a capire perchè non funzioni, visto che $_SERVER['HTTP_REFERER'] dovrebbe essere universale..
    Certo lo HTTP_REFERER è uno degli header HTTP, ma appunto sta al client (browser e estensioni) far decidere all'utente se trasportarlo o meno, o meglio anche "mascherarlo" con altro.

    In conclusione il discorso di base è:
    non basate nessuna procedura sul referrer, è solo un dato utilizzabile per curiosità in ambito "statistiche", se c'è bene, se non c'è poco male.

Regole di scrittura

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