Domanda

Ho uno script PHP che viene eseguito come programma CGI e HTTP Authenticate la testata viene mangiata e sputata.Quindi vorrei implementare una sorta di autenticazione basata su FORM.Come ulteriore vincolo, non esiste un database, quindi non è possibile archiviare dati di sessione.

Sono molto disponibile ad avere un nome utente e una password principali.Devo solo proteggere l'applicazione da un intruso che non conosce queste credenziali.

Quindi come lo implementeresti?

Biscotti?

Potrei presentare il modulo e, se convalidato, posso rispedire un cookie che è un hash dell'indirizzo IP come codice segreto.Quindi posso impedire il rendering delle pagine a meno che la cosa non venga decodificata correttamente.Ma non ho idea di come implementarlo in PHP.

È stato utile?

Soluzione

Alcuni modi in cui potresti farlo.

  1. htaccess -- fai in modo che il tuo server web gestisca la protezione delle pagine in questione (non esattamente basate su moduli CGI però).
  2. Utilizza i cookie e una sorta di algoritmo di hashing (md5 è abbastanza buono) per archiviare le password in un file flat in cui ogni riga nel file è nomeutente:passwordhash.Assicurati che sale i tuoi hash per una maggiore sicurezza rispetto alle tabelle arcobaleno.(Questo metodo è un po’ ingenuo...Essere molto fai attenzione alla sicurezza se segui questa strada)
  3. usa qualcosa come a sqlite database solo per gestire l'autenticazione.Sqlite è compatto e abbastanza semplice da poter comunque soddisfare le tue esigenze anche se non desideri un backend DB di grandi dimensioni.

In teoria, potresti anche archiviare i dati della sessione in un file flat, anche se non puoi disporre di un database.

Altri suggerimenti

Se attualmente utilizzi Authenticate, potresti già avere un file htpasswd file.Se desideri continuare a utilizzare quel file, ma passare all'autenticazione basata su FORM anziché tramite l'intestazione Authenticate, puoi utilizzare uno script PHP per utilizzare lo stesso file htpasswd e utilizzare le sessioni per mantenere lo stato di autenticazione.

Una rapida ricerca su Google per php htpasswd rivela questa pagina con una funzione PHP per verificare le credenziali rispetto a un htpasswd.Potresti integrarlo (supponendo che tu abbia sessioni impostate per l'avvio automatico) con un codice come questo:

// At the top of your 'private' page(s):
if($_SESSION['authenticated'] !== TRUE) {
    header('Location: /login.php');
    die();
}

// the target of the POST form from login.php
if(http_authenticate($_POST['username'], $_POST['password']))
    $_SESSION['authenticated'] = TRUE;

Hai davvero bisogno di un modulo?Qualunque cosa tu faccia, sei limitato dal fatto che nome utente e password siano noti.Se lo sanno, ricevono il tuo biscotto magico che glielo permette.Vuoi impedire loro di vedere le pagine se non conoscono il segreto, e l'autorizzazione di base lo fa, è facile da configurare e non richiede molto lavoro da parte tua.

Hai davvero bisogno di vedere l'intestazione Autorizzazione se il server web si occupa del controllo degli accessi per te?

Inoltre, se fornisci l'applicazione a un elenco noto di persone (anziché al pubblico), puoi fornire l'accesso basato su server Web su altri fattori, come l'indirizzo IP in entrata, i certificati client e molte altre cose che sono una questione di configurazione piuttosto che di programmazione.Se spiegassi i tuoi vincoli di sicurezza, potremmo essere in grado di offrire una soluzione migliore.

Buona fortuna, :)

...A proposito di salt, aggiungere il nome utente nel tuo hash salt impedirà a qualcuno che conosce il tuo salt e ha accesso al file delle tue password di scrivere una tabella arcobaleno e decifrare il numero della password dei tuoi utenti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top