2009-09-04 3 views
8

Come creare uno script di accesso facile che non richiede un database. Mi piacerebbe che fosse al sicuro.Script di accesso facile senza database

OK, che dire di questo script, l'ho appena realizzato in base alle mie conoscenze in php.

<?php 
// Start session 
session_start(); 

// Username and password 
$ID = "admin"; 
$pass = "123456"; 

if (isset($_POST["ID"]) && isset($_POST["pass"])) { 

    if ($_POST["ID"] === $anvandarID && $_POST["pass"] === $pass) { 
    /
    $_SESSION["inloggedin"] = true; 

    header("Location: safe_site.php"); 
    exit; 
    } 
     // Wrong login - message 
     else {$wrong = "Bad ID and password, the system could not log you in";} 
} 
?> 

Il safe_site.php contiene questo ed alcuni contenuti:

session_start(); 

if (!isset($_SESSION["inloggning"]) || $_SESSION["inloggning"] !== true) { 
header("Location: login.php"); 
exit; 
} 
+1

Come creeresti uno script di accesso semplice che non richiede un database in ASP? – Gumbo

+1

@Gumbo: con OpenID :) – Sampson

+0

Ora, per quanto riguarda il mio esempio, ho aggiunto nel primo post qui sopra. –

risposta

20

Non è una soluzione ideale, ma qui è un esempio rapido e sporco che mostra come è possibile memorizzare informazioni di accesso nel codice PHP:

<?php 
session_start(); 

$userinfo = array(
       'user1'=>'password1', 
       'user2'=>'password2' 
       ); 

if(isset($_GET['logout'])) { 
    $_SESSION['username'] = ''; 
    header('Location: ' . $_SERVER['PHP_SELF']); 
} 

if(isset($_POST['username'])) { 
    if($userinfo[$_POST['username']] == $_POST['password']) { 
     $_SESSION['username'] = $_POST['username']; 
    }else { 
     //Invalid Login 
    } 
} 
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
     <title>Login</title> 
    </head> 
    <body> 
     <?php if($_SESSION['username']): ?> 
      <p>You are logged in as <?=$_SESSION['username']?></p> 
      <p><a href="?logout=1">Logout</a></p> 
     <?php endif; ?> 
     <form name="login" action="" method="post"> 
      Username: <input type="text" name="username" value="" /><br /> 
      Password: <input type="password" name="password" value="" /><br /> 
      <input type="submit" name="submit" value="Submit" /> 
     </form> 
    </body> 
</html> 
+0

Grazie! Forse è meglio del mio. –

+0

Questo non è affatto sicuro. –

+0

Cosa ne pensi di alcuni dettagli? –

0

se non avete un database, si dovrà hardcode i dati di accesso nel codice, o leggere da un file flat su disco.

+1

Non riesco a memorizzare i dettagli di login nelle variabili? –

+0

È possibile, questo è ciò che intende per "hardcode i dettagli di accesso nel codice." – jimyi

3

Salvare gli hash nome utente e password nell'array in un file php anziché in db.

Quando è necessario autenticare l'utente, eseguire l'hash delle sue credenziali e quindi confrontarle con gli hash nell'array.

Se si utilizza la funzione di hash sicura (vedere hash function and hash algos nella documentazione di PHP), dovrebbe essere abbastanza sicuro (si può considerare l'uso di hash salato) e aggiungere anche alcune protezioni al modulo stesso.

2

Se non si dispone di un database, dove verrà memorizzata la registrazione PERMANENTE dei dati di accesso dei propri utenti? Certo, mentre l'utente ha effettuato l'accesso, le informazioni minime dell'utente necessarie per il funzionamento del tuo sito possono essere memorizzate in una sessione o cookie. Ma dopo che si disconnettono, allora cosa? La sessione va via, il cookie può essere violato.

Quindi il tuo utente torna al tuo sito. Cerca di accedere. Che cosa attendibile il tuo sito confronta le sue informazioni di accesso con?

11

FacebookConnect o OpenID sono due grandi opzioni.

Fondamentalmente, i tuoi utenti accedono ad altri siti di cui sono già membri (Facebook o Google), e poi ricevi conferma da quel sito che ti dice che l'utente è affidabile - avvia una sessione e hanno effettuato l'accesso. Nessun database necessario (a meno che non si voglia associare più dati al proprio account).

+0

L'https://developers.facebook.com/connect.php URL ora mostra * "Spiacenti, il link che hai seguito potrebbe essere danneggiato, o la pagina potrebbe essere stata rimossa." * - Dovrebbe essere rimosso. –

0

Si può fare il controllo di accesso a livello di server Web utilizzando HTTP di base autenticazione e htpasswd. Ci sono una serie di problemi con questo:

  1. Non è molto sicuro (nome utente e password sono banalmente codificati sul filo)
  2. E 'difficile da mantenere (è necessario accedere al server per aggiungere o rimuovere gli utenti
  3. Non hai il controllo sulla finestra di dialogo di accesso presentata dal browser
  4. Non c'è modo di disconnettersi, a meno di riavviare il browser.

A meno che non si stia costruendo un sito per uso interno con pochi utenti, non lo consiglio veramente.

-2

Non c'è motivo per non utilizzare il database per l'implementazione di login, il minimo che si possa fare è scaricare e installare SQLite se la società di hosting non ti fornisce abbastanza DB.

8

vorrei usare una configurazione a due file in questo modo:

index.php

<?php 
session_start(); 

define('DS', TRUE); // used to protect includes 
define('USERNAME', $_SESSION['username']); 
define('SELF', $_SERVER['PHP_SELF']); 

if (!USERNAME or isset($_GET['logout'])) 
include('login.php'); 

// everything below will show after correct login 
?> 

login.php

<?php defined('DS') OR die('No direct access allowed.'); 

$users = array(
"user" => "userpass" 
); 

if(isset($_GET['logout'])) { 
    $_SESSION['username'] = ''; 
    header('Location: ' . $_SERVER['PHP_SELF']); 
} 

if(isset($_POST['username'])) { 
    if($users[$_POST['username']] !== NULL && $users[$_POST['username']] == $_POST['password']) { 
    $_SESSION['username'] = $_POST['username']; 
    header('Location: ' . $_SERVER['PHP_SELF']); 
    }else { 
     //invalid login 
    echo "<p>error logging in</p>"; 
    } 
} 

echo '<form method="post" action="'.SELF.'"> 
    <h2>Login</h2> 
    <p><label for="username">Username</label> <input type="text" id="username" name="username" value="" /></p> 
    <p><label for="password">Password</label> <input type="password" id="password" name="password" value="" /></p> 
    <p><input type="submit" name="submit" value="Login" class="button"/></p> 
    </form>'; 
exit; 
?> 
0

*** script di login che pretende molto collegamento a un database o file esterno. Buono per una password globale -

posto sulla pagina del modulo Login - luogo questo alla parte superiore della pagina di login - sopra ogni altra cosa ***

<?php 

if(isset($_POST['Login'])){ 

if(strtolower($_POST["username"])=="ChangeThis" && $_POST["password"]=="ChangeThis"){ 
session_start(); 
$_SESSION['logged_in'] = TRUE; 
header("Location: ./YourPageAfterLogin.php"); 

}else { 
$error= "Login failed !"; 
} 
} 
//print"version3<br>"; 
//print"username=".$_POST["username"]."<br>"; 
//print"password=".$_POST["username"]; 
?> 

* Entrata nelle pagine seguenti - Posizionare questo al parte superiore di ogni pagina che deve essere protetta dal login. questo controlla la sessione e se un nome utente e una password è *

<?php 
session_start(); 
if(!isset($_SESSION['logged_in']) OR $_SESSION['logged_in'] != TRUE){ 

header("Location: ./YourLoginPage.php"); 
} 
?> 
+0

Questa soluzione non è uguale a quella già contenuta nella domanda originale? – FoolishSeth

1

Prova questa:

<?php 
     session_start(); 
     $userinfo = array(
      'user'=>'5d41402abc4b2a76b9719d911017c592', //Hello... 
     ); 

     if(isset($_GET['logout'])) { 
      $_SESSION['username'] = ''; 
      header('Location: ' . $_SERVER['PHP_SELF']); 
     } 

     if(isset($_POST['username'])) { 
      if($userinfo[$_POST['username']] == md5($_POST['password'])) { 
       $_SESSION['username'] = $_POST['username']; 
      }else { 
       header("location:403.html"); //replace with 403 
      } 
     } 
?> 
<?php if($_SESSION['username']): ?> 
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
     <head> 
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
      <title>Logged In</title> 
     </head> 

     <body> 
      <p>You're logged in.</p> 
      <a href="logout.php">LOG OUT</a> 
     </body> 
    </html> 

<?php else: ?> 
    <html> 
     <head> 
      <title>Log In</title> 
     </head> 
     <body> 
      <h1>Login needed</h1> 
      <form name="login" action="" method="post"> 
       <table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF"> 
        <tr> 
         <td colspan="3"><strong>System Login</strong></td> 
        </tr> 
        <tr> 
         <td width="78">Username:</td> 
         <td width="294"><input name="username" type="text" id="username"></td> 
        </tr> 
        <tr> 
         <td>Password:</td> 
         <td><input name="password" type="password" id="password"></td> 
        </tr> 
        <tr> 
         <td>&nbsp;</td> 
         <td><input type="submit" name="Submit" value="Login"></td> 
        </tr> 
       </table> 
      </form> 
     </body> 
    </html> 
<?php endif; ?> 

Avrete bisogno di un logout, qualcosa di simile (logout.php):

<?php 
    session_start(); 
    session_destroy(); 
    header("location:index.html"); //Replace with Logged Out page. Remove if you want to use HTML in same file. 
?> 

// Below is not needed, unless header above is missing. In that case, put logged out text here. 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
     <title>Untitled Document</title> 
    </head> 
    <body> 
     <!-- Put logged out message here --> 
    </body> 
</html> 
+3

Frank, bella risposta - tuttavia la domanda era stata esaudita e la risposta è stata accettata. Se vuoi spiegare perché la tua risposta è diversa o migliore della risposta accettata, ciò potrebbe aiutarti. –