2009-09-04 16 views
8

Jak utworzyć łatwy skrypt logowania, który nie wymaga bazy danych. Chciałbym, żeby było bezpiecznie.Łatwy skrypt logowania bez bazy danych

Dobra, a co z tym skryptem, zrobiłem to dzięki mojej wiedzy w 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";} 
} 
?> 

safe_site.php zawiera ten i pewne treści:

session_start(); 

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

Jak utworzyć łatwy skrypt logowania, który nie wymaga bazy danych w ASP? – Gumbo

+1

@Gumbo: Z OpenID :) – Sampson

+0

Co z moim przykładem dodałem w pierwszym poście powyżej. –

Odpowiedz

20

To nie jest idealne rozwiązanie, ale tutaj jest to szybki i brudny przykład, który pokazuje, w jaki sposób można zapisać logowania informacji w kodzie 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

Dziękujemy! To może lepsze niż moje. –

+0

To wcale nie jest bezpieczne. –

+0

Co z niektórymi szczegółami? –

0

jeśli nie masz bazę danych, będzie trzeba zakodować dane logowania w kodzie, lub odczytać z pliku płaskiego na dysku.

+1

Nie mogę zapisać danych logowania w zmiennych? –

+0

Możesz, to właśnie ma na myśli, "zakodowuj dane logowania w swoim kodzie". – jimyi

3

Zapisz nazwę użytkownika i hashy w tablicach w pliku php zamiast w db.

Gdy trzeba uwierzytelnić użytkownika, oblicz hashe swoich poświadczeń, a następnie porównaj je z hashe w tablicy.

Jeśli używasz bezpiecznej funkcji skrótu (zobacz hash function and hash algos w dokumentacji PHP), powinna ona być całkiem bezpieczna (możesz rozważyć użycie solonego skrótu), a także dodać pewne zabezpieczenia do samego formularza.

2

Jeśli nie masz bazy danych, gdzie będzie przechowywany PERMANENTNY rejestr danych logowania użytkownika? Oczywiście, gdy użytkownik jest zalogowany, minimalne informacje o użytkowniku wymagane do działania witryny mogą być przechowywane w sesji lub pliku cookie. Ale kiedy się wylogują, to co? Sesja znika, ciasteczko może zostać zhackowane.

Twój użytkownik wraca do Twojej witryny. Próbuje się zalogować. Jaką wiarygodną rzeczą jest Twoja witryna porównująca dane logowania?

11

FacebookConnect lub OpenID to dwie świetne opcje.

Zasadniczo Twoi użytkownicy logują się do innych stron, które są już członkami (Facebook lub Google), a następnie otrzymujesz potwierdzenie z tej strony informujące, że użytkownik jest godny zaufania - rozpocznij sesję i są oni zalogowani. Brak bazy danych (chyba że chcesz powiązać więcej danych z kontem).

+0

Adres URL https://developers.facebook.com/connect.php teraz pokazuje * "Niestety, link, który podałeś, może być zepsuty lub strona mogła zostać usunięta." * - powinna zostać usunięta. –

0

Można wykonać kontrolę dostępu na poziomie serwera WWW za pomocą protokołu HTTP Podstawowe uwierzytelnianie i htpasswd. Istnieje kilka problemów z tym:

  1. To nie jest bardzo bezpieczny (nazwa użytkownika i hasło są trywialnie kodowane na drucie)
  2. To trudne do utrzymania (trzeba zalogować się do serwera, aby dodać lub usunąć użytkowników)
  3. Nie masz kontroli nad polem logowania prezentowanym przez przeglądarkę.
  4. Nie ma możliwości wylogowania, bez restartowania przeglądarki.

Jeśli nie budujesz strony do użytku wewnętrznego z niewielką liczbą użytkowników, nie polecam jej.

-2

Nie ma powodu, aby nie używać bazy danych do implementacji loginu, co najmniej można zrobić, aby pobrać i zainstalować SQLite, jeśli firma hostingowa nie zapewnia wystarczającej bazy danych.

8

chciałbym użyć konfiguracji dwóch plików takiego:

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

*** skrypt logowania, który robi odnośnik do bazy danych lub plik zewnętrzny. Biorąc pod uwagę globalny hasło -

Place na stronie formularza logowania - to miejsce na górze strony logowania - przede wszystkim innym ***

<?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"]; 
?> 

* logowania na kolejnych stronach - Place to na górna część każdej strony, która musi być chroniona przez logowanie. to sprawdza sesję, a jeśli nazwa użytkownika i hasło *

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

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

Czy to rozwiązanie nie jest takie samo, jak w pierwotnym pytaniu? – FoolishSeth

1

Spróbuj tego:

<?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; ?> 

Musisz wylogowania, coś takiego (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, dobra odpowiedź - jednak odpowiedź na pytanie została przyjęta. Jeśli chcesz wyjaśnić, dlaczego twoja odpowiedź jest inna lub lepsza niż zaakceptowana odpowiedź, może to pomóc. –

Powiązane problemy