Facile script di login senza database

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

Bene, che mi dici 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 file safe_site.php contiene questo e alcuni contenuti:

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

Non è una soluzione ideale, ma ecco un esempio veloce e sporco che mostra come è ansible memorizzare le informazioni di accesso nel codice PHP:

 <?php session_start(); $userinfo = arrays( '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> 

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 session, e hanno effettuato l'accesso. Nessun database necessario ( a less che non si voglia associare più dati al proprio account).

Vorrei usare un setup di due file come questo:

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 = arrays( "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; ?> 

Salva il nome utente e l'hash della password nell'arrays in un file php invece di db.

Quando è necessario autenticare l'utente, computare gli hash delle sue credenziali e quindi confrontarli con gli hash dell'arrays.

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

Se non si dispone di un database, where verrà memorizzata la logging 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 session o cookie. Ma dopo che si disconnettono, allora cosa? La session 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?

Prova questo:

 <?php session_start(); $userinfo = arrays( '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; ?> 

Avrai bisogno di un logout, qualcosa del genere (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> 

se non si dispone di un database, sarà necessario codificare i dettagli di accesso nel codice o leggerlo da un file flat su disco.

È ansible eseguire il controllo degli accessi a livello di server Web utilizzando l'authentication di base HTTP e htpasswd . Ci sono una serie di problemi con questo:

  1. Non è molto sicuro (username e password sono codificati banalmente sul filo)
  2. È difficile da mantenere (devi accedere al server per aggiungere o rimuovere utenti)
  3. Non hai alcun controllo sulla window di dialogo di accesso presentata dal browser
  4. Non c'è modo di disconnettersi, a less di riavviare il browser.

A less che tu non stia costruendo un sito per uso interno con pochi utenti, non lo consiglierei davvero.

*** LOGIN script che non si collega a un database o file esterno. Buono per una password globale –

Posiziona nella pagina del module di accesso – posiziona questo nella parte superiore della pagina di accesso, sopra each 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"]; ?> 

* Accedi alle seguenti pagine: posizionalo nella parte superiore di each pagina che deve essere protetta tramite login. questo controlla la session e se un nome utente e una password ha *

 <?php session_start(); if(!isset($_SESSION['logged_in']) OR $_SESSION['logged_in'] != TRUE){ header("Location: ./YourLoginPage.php"); } ?> 

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.