Autentifikacia v php

24.02.2006 18:04 | kabel

Stalo sa vám niekedy, že ste robili nejakú stránku, ktorá potrebovala prihlasovanie na základe dvoch údajov: mena a hesla?
A stalo sa vám, že ste mali problémy s korektným odhlasovaním, alebo že ste sa vôbec nemohli prihlásiť? V tomto článku uvádzam niektoré typy autentifikácie.

Ešte predtým treba povedať, že autentifikácia cez cookie má jednu chybu: totiž užívateľ, ktorý nemá v prehliadači zapnuté cookies sa nemôže korektne prihlásiť.

1. HTTP autentifikácia - pozri ukážku - pozri zdroj

<?php
function autentifikacia () {
  header("WWW-Authenticate: Basic realm=\"Názov autentifikácie\"");
  header("HTTP/1.0 401 Unauthorized");
  echo "Text, ktorý sa zobrzí pri nesprávnom zadaní mena a hesla.";
  die();
}
$users = array( // pole užívateľov - meno (kľúč) => heslo (obsah)
  "meno" => "heslo",
  "user" => "password"
);
if (isset($users[$_SERVER["PHP_AUTH_USER"]])
  && $users[$_SERVER["PHP_AUTH_USER"]] == $_SERVER["PHP_AUTH_PW"]
  && $_REQUEST["log"] != "out") {
  echo "Vitaj, užívateľ ".$_SERVER["PHP_AUTH_USER"]."<br />\n"
      ."<a href=\"".$_SERVER["SCRIPT_NAME"]."\">INDEX</a><br />\n"
      ."<a href=\"".$_SERVER["SCRIPT_NAME"]."?log=out\">Odhlásiť sa</a>\n";
} else {
  autentifikacia();
}
?>

2. Autentifikácia cez cookies - pozri ukážku - pozri zdroj

<?php
$users = array( // pole užívateľov - meno (kľúč) => heslo (obsah)
  "meno" => md5("heslo"),
  "user" => md5("password")
);
if ($_POST["logni"] == "ma") {
  if (isset($_POST["meno"]) && $users[$_POST["meno"]] ==
md5($_POST["heslo"])) {
      setcookie("authname",$_POST["meno"],time()+1800); // cookie
bude ulozeny 1800 sekund, ak sa stranka neobnovy
      setcookie("authpass",md5($_POST["heslo"]),time()+1800); //
cookie bude ulozeny
1800 sekund, ak sa stranka neobnovy
      $_COOKIE["authname"] = $_POST["meno"];
      $_COOKIE["authpass"] = md5($_POST["heslo"]);
  } else {
      echo "CHYBA!<br />\n";
  }
}
if (isset($users[$_COOKIE["authname"]])
  && $users[$_COOKIE["authname"]] == $_COOKIE["authpass"]
  && $_REQUEST["log"] != "out") {
  setcookie("authname",$_COOKIE["authname"],time()+1800); // obnovenie
  cookie
  setcookie("authpass",$_COOKIE["authpass"],time()+1800); // obnovenie
  cookie
  echo "Vitaj, užívateľ ".$_COOKIE["authname"]."<br />\n"
      ."<a href=\"".$_SERVER["SCRIPT_NAME"]."\">INDEX</a><br />\n"
      ."<a href=\"".$_SERVER["SCRIPT_NAME"]."?log=out\">Odhlásiť sa</a>\n";
} else {
  setcookie("authname"); // odstarni cookie
  setcookie("authpass");
  echo "<form method=\"post\">\n"
      ."<input type=\"hidden\" name=\"logni\" value=\"ma\">\n"
      ."Meno: <input type=\"text\" name=\"meno\" value=\"\"><br />\n"
      ."Heslo: <input type=\"password\" name=\"heslo\" value=\"\"><br />\n"
      ."<input type=\"submit\" name=\"submit\" value=\"  OK  \">\n"
      ."</form>\n";
}
?>

Autentifikácia cez session - pozri ukážku - pozri zdroj

<?php
session_start();
$users = array( // pole užívateľov - meno (kľúč) => heslo (obsah)
  "meno" => md5("heslo"),
  "user" => md5("password")
);
if ($_POST["logni"] == "ma") {
  if (isset($_POST["meno"]) && $users[$_POST["meno"]] ==
md5($_POST["heslo"])) {
      $_SESSION["authname"]=$_POST["meno"];
      $_SESSION["authpass"]=md5($_POST["heslo"]);
  } else {
      echo "CHYBA!<br />\n";
  }
}
if (isset($users[$_SESSION["authname"]])
  && $users[$_SESSION["authname"]] == $_SESSION["authpass"]
  && $_REQUEST["log"] != "out") {
  echo "Vitaj, užívateľ ".$_COOKIE["authname"]."<br />\n"
      ."<a
href=\"".$_SERVER["SCRIPT_NAME"]."?".session_id()."\">INDEX</a><br />\n"
      ."<a href=\"".$_SERVER["SCRIPT_NAME"]."?log=out\">Odhlásiť sa</a>\n";
} else {
  unset($_SESSION["authname"],$_SESSION["authpass"]);
  echo "<form method=\"post\">\n"
      ."<input type=\"hidden\" name=\"logni\" value=\"ma\">\n"
      ."Meno: <input type=\"text\" name=\"meno\" value=\"\"><br />\n"
      ."Heslo: <input type=\"password\" name=\"heslo\" value=\"\"><br />\n"
      ."<input type=\"submit\" name=\"submit\" value=\"  OK  \">\n"
      ."</form>\n";
}
?>

    • s cookies na vecne veky a nikdy inak :) 24.03.2006 | 19:49
      Avatar blackhole_ventYl   Používateľ
      robil som rocnikovu pracu, kde som potreboval autentifikaciu, tak som to spravil takym silenym sposobom, ze by si s tym lamal hlavu nejeden sniffer :) ale kazdopadne ak je dobre napisana kniznica na autentifikaciu, tak sa to da prevadzkovat aj s cookies, aj bez nich a samotna stranka to ani nemusi spoznat :)
      --- Cuchat s nadchou, to je ako sniffovat bez promiscu.