Visualizzazione risultati 1 fino 9 di 9
Like Tree3Likes
  • 1 Post By alemoppo
  • 1 Post By GraphOGLRisorse
  • 1 Post By dreadnaut

Discussione: Semplice autenticazione con PHP_AUTH_USER e password_hash

  1. #1
    laravista non è connesso Utente AlterBlog
    Data registrazione
    07-12-2019
    Messaggi
    60

    Question Semplice autenticazione con PHP_AUTH_USER e password_hash

    Ciao,
    per il mio progetto di studio di VanillaPHP sto cercando di fare la più semplice (minimalista) forma di autenticazione in PHP utilizzando:



    però non mi funziona il Logout (anche con l'aiuto del mio chatbot🤖 di fiducia)

    https://laravista.altervista.org/Van...test_login.php (admin / password)

    Codice PHP:
    <?php
    if (!isset($_SERVER['PHP_AUTH_USER'])) {
    header('WWW-Authenticate: Basic realm="My Realm"');
    header('HTTP/1.0 401 Unauthorized');
    echo
    'Text to send if user hits Cancel button';
    exit;

    } else {
    $secretPassword = password_hash("password", PASSWORD_DEFAULT);
    $hashPassword = password_hash($_SERVER['PHP_AUTH_PW'], PASSWORD_DEFAULT);

    if (!
    password_verify("password", $hashPassword )) {
    header('WWW-Authenticate: Basic realm="My Realm"');
    header('HTTP/1.0 401 Unauthorized');
    echo
    'Text to send if user hits Cancel button';
    exit;
    }

    echo
    "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
    echo
    '<a href="test_logout.php">Logout</a>';
    }

    https://laravista.altervista.org/VanillaCMS/test_logout.php


    Codice PHP:
    <?php
    header
    ('WWW-Authenticate: Basic realm="My Realm"');
    header('HTTP/1.0 401 Unauthorized');

    // Reindirizza l'utente alla pagina di accesso
    //header('Location: index.php');
    exit;

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    23,246

    Predefinito

    Non ho mai usato il sistema di autenticazione HTTP (e nemmeno mi era così chiaro cosa fosse): ho sempre implementato il tutto lato server, anche perché se non ho capito male, nel modo che stai facendo rimane tutto lato client, a parte PHP che può leggere $_SERVER['PHP_AUTH_USER'] e $_SERVER['PHP_AUTH_PW'] (sicuramente non puoi fidarti solo di quei dati).

    Ho come l'impressione che il logout non funziona perché i browser moderni se "li chiudi", in realtà non si chiudono ma tendono a mantenere in memoria i dati di navigazione (ma potrei sbagliarmi).

    Quindi, dipende cosa vuoi fare: se vuoi avere un sistema di registrazione "classico", dove hai n iscritti e ciascun iscritto ha le proprie informazioni, forse (ma è un mio pensiero soggettivo) non è la strada corretta.
    Se invece vuoi creare un sistema di login "temporaneo", senza salvare nulla lato server, allora ok ma temo che il problema del logout non sia così facilmente risolvibile (perché dipende appunto dal browser).

    Se vuoi implementare un sistema login "classico", su internet è pieno di tutorial, ci sono anche su AlterVista, ad esempio questo. Ci sarebbe anche il mio script invecchiato malissimo, qui.

    Ciao!
    laravista likes this.

  3. #3
    laravista non è connesso Utente AlterBlog
    Data registrazione
    07-12-2019
    Messaggi
    60

    Predefinito

    Chiudendo il browser funziona perchè è proprio un sistema che resta solo in memoria, ma è brutto

    Allora sto provando questa soluzione (è in realtà un Workaround) https://log:out@example.com/ che ho trovato su Stack Overflow

    che però mi funziona solo in locale ma non online /VanillaCMS/test_login.php (in qualche commento viene scritto che per ragioni di sicurezza veniva giustamente tolta la possibilità di passare la password nell'URL)

  4. #4
    laravista non è connesso Utente AlterBlog
    Data registrazione
    07-12-2019
    Messaggi
    60

    Predefinito

    Adesso con Firefox funziona, avevo un problema col protocollo, devo fare un FIX a questo codice errato (la prima riga)

    Codice PHP:
    $protocol = stripos($_SERVER['SERVER_PROTOCOL'],'https') === 0 ? 'https://' : 'http://'; // TO FIX
    $protocol = "https://";
    echo
    "<p>{$_SERVER['SERVER_PROTOCOL']}</p>";
    $url_path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
    $path = pathinfo($url_path, PATHINFO_DIRNAME);
    $logout_link = "{$protocol}log:out@{$_SERVER['HTTP_HOST']}$path/test_login.php";
    echo
    "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
    echo
    "<a href=\"{$logout_link}\">Logout</a>";
    Sicuramente c'è un modo più semplice per fare "il tutto" con PHP finisco sempre a fare "spaghetti code"

    /VanillaCMS/test_login.php (admin / password)

    Su Wikipedia è spiegato chiaramente che non è supportato il logout (mi sembra una cosa incredibile)
    Ultima modifica di laravista : 11-10-2025 alle ore 23.19.09

  5. #5
    laravista non è connesso Utente AlterBlog
    Data registrazione
    07-12-2019
    Messaggi
    60

    Predefinito

    Quindi se funziona anche sui vostri web browser (desktop e mobile) forse per la login ci siamo:

    1) link in altro a destra per la Login (admin / password)

    2) poi appare il link a sinistra 👋Logout


  6. #6
    GraphOGLRisorse non è connesso AlterGuru 2500
    Data registrazione
    14-02-2015
    Messaggi
    4,529

    Predefinito

    Salve,
    ho fatto la prova. Una vota entrato con il login, quando eseguo il link logout, mi butta furi. Però mi rimanda alla pagina di login chiedendomi nuovamnte le credenziali.

    Io mi aspetterei come comportamnto corretto, di tornare alla pagina d'origine, ovvero, a quella da cui ho eseguito il link del login.

    Le prove le ho fatte con Firefox e Chrome. Non noto differenze.

    Cordiali saluti.
    Ultima modifica di GraphOGLRisorse : 12-10-2025 alle ore 20.38.07
    laravista likes this.

  7. #7
    laravista non è connesso Utente AlterBlog
    Data registrazione
    07-12-2019
    Messaggi
    60

    Predefinito

    Effettivamente sto ancora capendo come rendere "dinamico" il link di USCITA, anche in base a dove è installato il software:

    • in locale
    • nella root di AlterVista
    • o in una cartella (come adesso)



    Codice PHP:
    <p>
    <!--
    a href="http://log:out@127.0.0.1/?a=login">&#128075;Logout</a -->
    <a href="https://log:out@laravista.altervista.org/VanillaCMS/?a=login">&#128075;Logout</a>
    </p>

  8. #8
    laravista non è connesso Utente AlterBlog
    Data registrazione
    07-12-2019
    Messaggi
    60

    Predefinito

    Citazione Originalmente inviato da laravista Visualizza messaggio
    Chiudendo il browser funziona perchè è proprio un sistema che resta solo in memoria, ma è brutto

    Allora sto provando questa soluzione (è in realtà un Workaround) https://log:out@example.com/ che ho trovato su Stack Overflow

    che però mi funziona solo in locale ma non online /VanillaCMS/test_login.php (in qualche commento viene scritto che per ragioni di sicurezza veniva giustamente tolta la possibilità di passare la password nell'URL)
    Devo provare questa soluzione: Basic Auth log-out with JavaScript

  9. #9
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,322

    Predefinito

    Occhio che la "Basic Auth" HTTP è considerata poco sicura, non è un gran fondamento per un sito: le credenziali vengono inviate senza controlli con ogni requesta, rimangono in memoria nel browser, non ci sono protezioni contro richieste cross-site, non c'è modo di annullare una sessione lato server.
    laravista likes this.

Regole di scrittura

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