2017. december 16., szombat

Ez egy PHP és MYSQl alapú beléptető rendszert tartalmazó fórum, hash védelemmel!

Kedves hallagtók!
Ez egy PHP és MYSQl alapú beléptető rendszert tartalmazó fórum, hash védelemmel!
Az ultrawebre töltöttem fel.
 Címe: secret.uw.hu
A szükséges fájlok:


install.sql – Az adatbázist létrehozó fájl.
config.php – A beállításokat tartalmazó fájl
index.php – A nyitó oldal
login.php – A bejelentkező lap
register.php – A regisztrációs lap
vedett.php – A rejtett(csak regisztráltaknak elérhető) oldal.
reg_check.php – A regisztrációs adatok helyességét ellenőrzi

 Kezdjük az adatbázissal

csak egy táblára lesz szükségünk. Legyen a neve users. Kell bele egy azonosító(id), egy nick, egy jelszó, és egy e-mail cím mező. ez SQL nyelven így néz ki:

install.sql

CREATE TABLE users(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
nick VARCHAR(30),
jelszo VARCHAR(32),
email VARCHAR(60)
);

Ezt futtassuk le mondjuk phpmyadmin – ban, vagy akár hol, és már kész is van az adatbázisunk.

A következő fájl a config.php Ezt fogjuk majd includolni a többi lapba

$dbhost = “localhost”;
$dbuser = “root”;
$dbpass = “”;
$dbname = “login”;
?>

 Itt definiáltuk a csatlakozáshoz szükséges adatokat, természetesen mindenki a saját adatait írja ide.
Van adatbázisunk, van config fájlunk, következik a regisztrációs rész elkészítése.

register.php

Regisztráció:
 method=“post” action=“”>
         colspan=“2”> type=“submit” name=“regisztracio”value=“regisztrálok” />
    
Nick:      type=“text” name=“nick” />
E-mail cím:      type=“text” name=“email” />
Jelszó:      type=“password” name=“pass1” />
Jelszó mégegyszer:      type=“password” name=“pass2” />

 Ezzel létrehoztunk egy formot, amin keresztül a felhasználó beírhatja az adatait. Már csak a letároló részt kell megírnunk bele. Akkor folytassuk:
Itt állnék meg egy szóra. Minden olyan adat, ami a felhasználótól érkezik, potenciális veszélyforrás, ugyanis nagyon sok a rosszindulatu user. Ezért minden formból jövő adatot ellenőrizni kell. Amit mi most ellenőrizni forunk, azok a következők:

-az összes mezőt kitöltötték – e
-a nickben csak a magyar ábécé betűi, számok, _ és – vannak – e
-valós e-mail címet adtak – e meg
-regisztráltak – e már a megadott nickkel
-a két jelszó egyezik – e

ez php nyelven így néz ki:

reg_check.php

function reg_check($adatok){
  if($adatok[‘nick’] == “” | $adatok[’email’] == “” | $adatok[‘pass1’] == “”)
  {
    return “Minden mező kitöltése kötelező”;
        break;
  }
  elseif(!ereg(‘^[a-zA-Z\-\_áéíóöüóűÁÉÍÓÖÜŐŰ]+$’, $adatok[‘nick’ ]))
  {
    return “A nickben csak a magyar ábécé kis – és nagybetűi, a számok, illetve a  _ és – jelek engedélyezettek”;
        break;
  }
  elseif($adatok[’email’] == (!eregi(“^[_\.0-9a-z-]+@
([0-9a-z][0-9a-z-]+\.)+[a-z]{2,6}$”,$adatok[’email’])))
  {
    return “Hibás e – mail cím!”;
        break;
  }
  elseif(mysql_num_rows(mysql_query(“SELECT nick FROM users WHERE (nick='”.$adatok[‘nick’].“‘)”)) > 0)
  {
    return “Már regisztráltak ezzel a nickkel”;
    break;
  }
  elseif($adatok[‘pass1’] !== $adatok[‘pass2’])
  {
    return “A két jelszó nem egyezik”;
        break;
  } 
  else
  {
    return “rendben”;
  }
}
?>
Ez egy függvény, kér egy tömböt, ami a mi esetünkben majd a $_POST tömb lesz (ebben lesznek a megadott adatok) és visszatér vagy a hibaüzenettel, vagy a rendben szóval.
Akkor jöjjön, aminek jönnie kell, a formból bekért adatokat ellenőrzés után írjuk mysql – be
folytassunk a register.php – t

include “config.php”;
include “reg_check.php”;
mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($dbname);

if (isset($_POST[‘regisztracio’]))
{
  if (reg_check($_POST) == “rendben”)
  {
    $sql = “INSERT INTO users (id,nick,jelszo,email) “;
    $sql.= “VALUES(”,'”.$_POST[‘nick’].“‘,'”;
    $sql.= md5($_POST[‘pass1’]).“‘,'”.$_POST[’email’].“‘)”;
    $query = mysql_query($sql) or die (“Valami baj van az adatbázissal.”);
    print “sikeres regisztráció!”;
          print “\”index.php\”>tovább“;
  }
  else
  {
    print reg_check($_POST);
  }
}
?>

beincludoltuk a két fájlt, csatlakoztunk a mysql – hez. Ezután az előbb megírt függvényünket használjuk a regisztráció ellenőrzésére. ha a “rendben” – el tér vissza, akkor beíratjuk az adatokat az adatbázisba. Ami feltűnő lehet, az az md5() függvény. Ezzel csináltunk egy hash értéket a jelszóból. Így egy kicsit biztonságosabbá tettünk az adatokat, mert ha netalántán illetéktelen kezekbe kerülnének az adatok, akkor az illető csak egy hash értéket lát, ami nem mond sokat. Ez is egy alapszabály: adatbázisban tilos közvetlenül tárolni a jelszavakat.

Most, hogy már regisztrálni is tudnak a felhasználóink, valahol be kéne őket léptetni.
Készítsünk egy  login.php –t.

include “config.php”;

mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($dbname);

/**************************************************
 * Ha még nem lépett be
 ***************************************************/

if ($_SESSION[‘belepett’]!== true)
{
  if (isset($_POST[‘login’]))
  { //Ha postolt adatokat
    $nick = addslashes($_POST[‘nev’]);
    $pass = md5($_POST[‘jelszo’]);

    $sql = “SELECT * FROM users “;
    $sql.= “WHERE (nick='”.$nick.“‘”;
    $sql.= ” AND jelszo='”.$pass.“‘)”;

    $query = mysql_query($sql);

    if (mysql_num_rows($query) !== 0)
    { //Helyes nick+pass
      $_SESSION[‘nick’] = addslashes($_POST[‘nev’]);
      $_SESSION[‘belepett’] = true;

      header(“Location: “.$_SERVER[‘PHP_SELF’]);
    }

    else
    {//Hibás nick+pass
      print “hibás nick/pass”;
    }
  }
?>
““ method=“post”>


nick:     “text” name=“nev” />     jelszó:     “password” name=“jelszo” />     “2” align=“center”>“submit” name=“login”value=“Belépés” />     “register.php”>regisztráció


}//Nem lépett be

/********************************
 * Ha már belépett
 *******************************/
else
  {//Be van lépve
    print “bejelentkezve: “.$_SESSION[‘nick’];
    print ” \”logout.php\”>kijelentkezés“;
  }
?>

Ezzel kiíratunk egy belépő formot, és egy linket a regisztrációra. Ha postolnak, akkor ellenőrizzük az adatokat, és ha passzol minden, akkor a $_SESSION[‘nick’] változóba tesszük a felhasználó nevét, és a $_SESSION[‘belepett’] értékét true – ra állítjuk.
Ez szép, és jó, de önmagában semmit nem ér.
Kell készíteni egy egyszerű index.php-t

session_start();
ob_start();
?>

   include “login.php”; ?>Ezt mindenki láthatja

  “vedett.php”>Védett rész


ob_end_flush();
?>


Remélem, ez nem szorul különösebb magyarázatra. Ami feltűnő lehet, az az ob_start, valamint a ob_end_flush sorok. Ez a header() fgv miatt van, ami a login.php – ben van.
Most, hogy be tudnak lépni felhasználóink, ki is kéne tudni őket léptetni.
Készítünk egy logout.php-t is

session_start();
unset($_SESSION[‘belepett’]);
unset($_SESSION[‘nick’]);
header(“location: index.php”);
?>

gyakorlatilag a kiléptetés azt jelenti, hogy töröljük a session változókat.

És akkor most a végén jöjjön a leg fontosabb dolog. Hozzunk létre védett tartalmat, amit csak regisztrált felhasználóink olvashatnak

vedett.php


session_start();

if($_SESSION[‘belepett’] == true)
{
  print “Védett tartalom, ha ezt olvasod, sikerült belépned, gratulálok”;
}
else
{
  print “Csak szeretnéd… :)”;
}

?>

Vizsgáljuk a $_SESSION[‘belepett’] értékét (a bejelentkezéskor állítottuk true – re).
Ezzel gyakorlatilag el is készültünk. Minden védett lapunk elejére be kell illeszteni a login.php -t (include “login.php”;). a session_start – ról se feledkezzünk meg.

Az alkalmazott függvények:

ereg

mysql num rows

mysql query

include

mysql conncet

mysql select db

isset

die

md5

header

session start

ob start

ob end flush

unset


Egy másik variáció:  http://szabolaci.uw.hu/


És egy másik variáció, itt már dátum és névnap is van a kezdő oldalon:

connect.php
<?php
$kapcsolat = mysql_connect("sql4.ultraweb.hu", "secret", "lindaa64");
if ( !mysql_select_db("secret",$kapcsolat) ) die ("Ilyen adatbázis nem létezik ".mysql_error());

?>

logout.php
<?php
session_start();
unset($_SESSION['login']);
header("Location:index.php");
?>
modosit.php
                                           

 MOST ÁTSZERKESZTHETED!
    

{Vissza}"; ?> " method="POST"> "/>    Megtekintéshez kérem jelentkezzen be a fiókjába. {Főoldal}"); } ?>












------------------------------------
Copyright © 2015 Szabó László István Neptun kód: BRXLXS . Minden jog fenntartva. szli@freemail.hu.

regiszter.php
 KÉREM REGISZTRÁLJA MAGÁT!
    


" enctype="multipart/form-data">  
E-mail:   
Jelszó:   
Vezetéknév:   
Keresztnév:   
Profilkép:   





- Minden mező kitöltése kötelező
- Feltölthető kép csak jpg típusú
- és maximum 1 Mb méretű.











------------------------------------
Copyright © 2015 Szabó László István Neptun kód: BRXLXS . Minden jog fenntartva. szli@freemail.hu.
Ellenőrizze a bevitt adatokat."); } } ?> 

torles.php
<?php
include('connect.php');
$mit=(int)$_GET['id'];

$sql="DELETE FROM bejegyzes WHERE bejegyzes_ID=$mit";
mysql_query($sql);
mysql_close($kapcsolat);
header("Location:fal.php");
?>

ujbejegyzes.php
                                           

 ÍRD MEG AZ ÜZENETET!
    








{Vissza}"; ?> " method="POST">    Megtekintéshez kérem jelentkezzen be a fiókjába. {Főoldal}"); } ?>











------------------------------------
Copyright © 2015 Szabó László István Neptun kód: BRXLXS . Minden jog fenntartva. szli@freemail.hu.

adatlap.php
{Üzenőfal}      {Adatlap}      {Új bejegyzés}      {Kijelentkezés}
E-mail cím:    
Vezetéknév:    
Keresztnév:    
Profilkép:   " width="100px"/> 
  ".$dbrec2['vezetek_nev']." ".$dbrec2['kereszt_nev']."   ".$dbrec2['datum']." 
".$dbrec2['szoveg']."  "); if($dbrec2['user_ID'] == $_SESSION['login']) { print("
{Módosítás} {Törlés}  
"); } else { print("
"); } } } else { print("Még nem osztott meg semmit."); } ?> Megtekintéshez kérem jelentkezzen be a fiókjába. {Főoldal}"); } ?> 

fal.php
{Üzenőfal}      {Adatlap}      {Új bejegyzés}      {Kijelentkezés}
  ".$dbrec2['vezetek_nev']." ".$dbrec2['kereszt_nev']."   ".$dbrec2['datum']." 
".$dbrec2['szoveg']."  "); if($dbrec2['user_ID'] == $_SESSION['login']) { print("
{Módosítás} {Törlés}  
"); } else { print("
"); } } } else { print("Még nem osztott meg semmit."); } ?> Megtekintéshez kérem jelentkezzen be a fiókjába. {Főoldal}"); } ?> 

index.php
<?php
session_start();
ob_start();
include('connect.php');


?>

<?php
if (isset($_POST['submit']))
{
    $login=$_POST['login'];
    $jelszo=sha1($_POST['jelszo']);
    $sql="SELECT * FROM users WHERE (email='".$login."' AND jelszo='".$jelszo."');";
    $query=mysql_query($sql);
   
   
   
    if (mysql_num_rows($query) !==0 )
    {
      
        $dbrec=mysql_fetch_array($query);
      
        $_SESSION['login']=$dbrec['user_ID'];
        header("Location:fal.php");
    }
    else
    {
        print("<p><font color='red'>Nem megfelelő felhasználónév és/vagy jelszó.</font></p>");
    }
}
?>
<!DOCTYPE HTML>
<html>
<head>
    <meta http-equiv="content-type" content="text/html" />
    <meta name="author" content="prometh" />
    <link rel="stylesheet" type="text/css" href="css/style.css"/>
    <title>SN kezdemény</title>
</head>

<body bgcolor="#87ADD3">






 <br>
 <font size="5"<PRE>                                            <h1 align="center"> SZABÓ LÁSZLÓ ISTVÁN TANÁR ÚR HONLAPJA! </h1>     </PRE> </font>

   <PRE>                                           <font size="5"  <h2><b>E-mail címed: Jelszavad:</b>  </h2>     </font></PRE>
<div id="menu" align='center'>
    <form method="POST" action="<?php print($_SERVER['PHP_SELF']);?>">
        <input type="text" name="login"/>
        <input type="password" name="jelszo"/>
 <br>
        
<input type="submit" name="submit" value="Bejelentkezés"/>
    </form>

  <br> <marquee behavior="alternate">Kedves hallgatók, a belépéshez regisztráció szükséges!</marquee>
 <br>
<br>
  <a href="register.php">Regisztráció</a>
</div>

 <br>
 <p align="center"><img src="arc.jpg "><br> </p>



 <p align="center"><a href="http://szabolaszloistvan.blogspot.hu/">Szabó László István blogja</a> </p>
 <p><font color="#000000">
    
<p align="center">

<SCRIPT LANGUAGE="JavaScript"><!--
function initArray() {
  this.length = initArray.arguments.length
  for (var i = 0; i < this.length; i++)
  this[i+1] = initArray.arguments[i]
}

/*  Hónap névnapjainak meghatározása */
function havinev(ev,ho,nap) {
if (ho==1)
  { var napok = new initArray("ÚJÉV, Fruzsina","Ábel","Genovéva, Benjámin",
        "Titusz, Leona","Simon","Boldizsár","Attila, Ramóna","Gyöngyvér","Marcell",
        "Melánia","Ágota","ErnO","Veronika","Bódog","Lóránt, Loránd",
        "Gusztáv","Antal, Antónia","Piroska","Sára, Márió","Fábián, Sebestyén",
        "Ágnes","Vince, Artúr","Zelma, Rajmund","Timót","Pál","Vanda, Paula",
        "Angelika","Károly, Karola","Adél","Martina, Gerda","Marcella","") }
if (ho==2)
  if ((ev!=2000) && (ev!=2004) && ev!=1996)
    { var napok=new initArray("Ignác","Karolina, Aida","Balázs","Ráhel, Csenge",
        "Ágota, Ingrid","Dorottya, Dóra","Tódor, Rómeó","Aranka","Abigél, Alex","Elvira",
        "Bertold, Marietta","Lívia, Lídia","Ella, Linda","Bálint, Valentin",
        "Kolos, Georgina","Julianna, Lilla","Donát","Bernadett","Zsuzsanna",
        "Aladár, Álmos","Eleonóra","Gerzson","Alfréd",
        "Mátyás","Géza","Edina","Ákos, Bátor","Elemér","","")  }
     else
    { var napok=new initArray("Ignác","Karolina, Aida","Balázs","Ráhel, Csenge",
        "Ágota, Ingrid","Dorottya, Dóra","Tódor, Rómeó","Aranka","Abigél, Alex","Elvira",
        "Bertold, Marietta","Lívia, Lídia","Ella, Linda","Bálint, Valentin",
        "Kolos, Georgina","Julianna, Lilla","Donát","Bernadett","Zsuzsanna",
        "Aladár, Álmos","Eleonóra","Gerzson","Alfréd",
        "Szokonap","Mátyás","Géza","Edina","Ákos, Bátor","Elemér","","") }
if (ho==3)
  { var napok=new initArray("Albin","Lujza","Kornélia","Kázmér","Adorján, Adrián",
        "Leonóra, Inez","Tamás","NEMZ.NONAP, Zoltán","Franciska, Fanni","Ildikó",
        "Szilárd","Gergely","Krisztián, Ajtony","Matild","NEMZETI ÜNNEP, Kristóf",
        "Henrietta","Gertrúd, Patrik","Sándor, Ede","József, Bánk","Klaudia",
        "Benedek","Beáta, Izolda","Emoke","Gábor, Karina","Irén, Irisz",
        "Emánuel","Hajnalka","Gedeon, Johanna","Auguszta","Zalán","Árpád","" ) }
if (ho==4)
  { var napok=new initArray("Hugó","Áron","Buda, Richárd","Izidor","Vince",
        "Vilmos, Bíborka","Herman","Dénes","Erhard","Zsolt","Leó, Szaniszló","Gyula",
        "Ida","Tibor","Anasztázia, Tas","Csongor","Rudolf","Andrea, Ilma","Emma",
        "Tivadar","Konrád","Csilla, Noémi","Béla","György","Márk","Ervin",
        "Zita","Valéria","Péter","Katalin, Kitti","" )}
if (ho==5)
  { var napok=new initArray("MUNKA ÜNN.,Fülöp, Jakab","Zsigmond","Tímea, Irma",
        "Mónika, Flórián","Györgyi","Ivett, Frida","Gizella","Mihály","Gergely",
        "Ármin, Pálma","Ferenc","Pongrác","Szervác, Imola","Bonifác","Zsófia, Szonja",
        "Mózes, Botond","Paszkál","Erik, Alexandra","Ivó, Milán",
        "Bernát, Felícia","Konstantin","Júlia, Rita","Dezso","Eszter, Eliza",
        "Orbán","Fülöp, Evelin","Hella","Emil, Csanád","Magdolna",
        "Janka, Zsanett","Angéla, Petronella","" )}
if (ho==6)
  { var napok=new initArray("Tünde","Kármen, Anita","Klotild","Bulcsú","Fatime",
        "Norbert, Cintia","Róbert","Medárd","Félix","Margit, Gréta","Barnabás",
        "Villo","Antal, Anett","Vazul","Jolán, Vid","Jusztin","Laura, Alida",
        "Arnold, Levente","Gyárfás","Rafael","Alajos, Leila","Paulina",
        "Zoltán","Iván","Vilmos","János, Pál","László","Levente, Irén",
        "Péter, Pál","Pál","" ) }
if (ho==7)
  { var napok=new initArray("Tihamér, Annamária","Ottó","Kornél, Soma","Ulrik",
        "Emese, Sarolta","Csaba","Appolónia","Ellák","Lukrécia","Amália",
        "Nóra, Lili","Izabella, Dalma","Jeno","Ors, Stella","Henrik, Roland","Valter",
        "Endre, Elek","Frigyes","Emília","Illés","Dániel, Daniella",
        "Magdolna","Lenke","Kinga, Kincso","Kristóf, Jakab","Anna, Anikó",
        "Olga, Liliána","Szabolcs","Márta, Flóra","Judit, Xénia","Oszkár","" )}
if (ho==8)
  { var napok=new initArray("Boglárka","Lehel","Hermina","Domonkos, Dominika",
        "Krisztina","Berta, Bettina","Ibolya","László","Emod","Lörinc",
        "Zsuzsanna, Tiborc","Klára","Ipoly","Marcell","Mária","Ábrahám",
        "Jácint","Ilona","Huba","ALKOTMÁNY ÜNN., István","Sámuel, Hajna",
        "Menyhért, Mirjam","Bence","Bertalan","Lajos, Patrícia","Izsó",
        "Gáspár","Ágoston","Beatrix, Erna","Rózsa","Erika, Bella") }
if (ho==9)
  { var napok= new initArray("Egyed, Egon","Rebeka, Dorina","Hilda","Rozália",
        "Viktor, Lorinc","Zakariás","Regina","Mária, Adrienn","Ádám","Nikolett, Hunor",
        "Teodóra","Mária","Kornél","Szeréna, Roxána","Eniko, Melitta","Edit",
        "Zsófia","Diána","Vilhelmina","Friderika","Máté, Mirella","Móric",
        "Tekla","Gellért, Mercédesz","Eufrozina, Kende","Jusztina","Adalbert",
        "Vencel","Mihály","Jeromos","" )}
if (ho==10)
  { var napok= new initArray("Malvin","Petra","Helga","Ferenc","Aurél","Brúnó, Renáta",
       "Amália","Koppány","Dénes","Gedeon","Brigitta","Miksa","Kálmán, Ede","Helén",
        "Teréz","Gál","Hedvig","Lukács","Nándor","Vendel","Orsolya","Elod",
        "KÖZT.KIKIÁLT., Gyöngyi","Salamon","Blanka, Bianka","Dömötör",
        "Szabina","Simon, Szimonetta","Nárcisz","Alfonz","Farkas","" )}
if (ho==11)
  { var napok=new initArray("Marianna","Achilles","Gyozo","Károly","Imre","Lénárd",
        "Rezso","Zsombor akitől kaptam a névnapos kódot","Tivadar","Réka","Márton","Jónás, Renátó","Szilvia",
        "Aliz","Albert, Lipót","Ödön","Hortenzia, Gergo","Jeno","Erzsébet",
        "Jolán","Olivér","Cecília","Kelemen, Klementina","Emma","Katalin",
        "Virág","Virgil","Stefánia","Taksony","András, Andor","" )}
if (ho==12)
  { var napok=new initArray("Elza","Melinda, Vivien","Ferenc, Olívia","Borbála, Barbara",
        "Vilma","Miklós","Ambrus","Mária","Natália","Judit","Árpád","Gabriella",
        "Luca, Otília","Szilárda","Valér","Etelka, Aletta","Lázár, Olimpia",
        "Auguszta","Viola","Teofil","Tamás","Zéno","Viktória","Ádám, Éva",
        "KARÁCSONY, Eugénia","KARÁCSONY, István","János","Kamilla",
        "Tamás, Tamara","Dávid","Szilveszter","") }
   return napok[nap];
}

/* Hónap neve */
function honev(ho) {
   var month = new initArray("Január","Február","Március","Április","Május",
   "Junius","Július","Augusztus","Szeptember","Október","November","December");
   return month[ho]
   }

/* Nap neve */
function napnev(szam) {
   var napok = new initArray("Vasárnap","Hétfo","Kedd","Szerda","Csütörtök",
                             "Péntek","Szombat","Vasárnap")
   return napok[szam]
   }

  var ido = new Date()
  var ev = ido.getYear()
  var ho = ido.getMonth()+1
  var nap = ido.getDate()
  if (ev<1900) ev+=1900;
  document.writeln("Ma <b>" + ev + ". " + honev(ho) + " " + nap + ". "
    + napnev(ido.getDay()+1)
    +",<font color=red> "+havinev(ev,ho,nap)+"</font></b> napja van.")
  document.writeln("Boldog névnapot kívánok!")
//--></SCRIPT></p>




 <hr size="3" align="center" width="850">
 <p align="center"> Copyright &#169; 2015 Szabó László István  . Minden jog fenntartva.  szli@freemail.hu. </p>
</body>
</html>

search.php
0){ #amennyiben van találat kiírjuk echo 'Találatok:'; while($sor = mysqli_fetch_assoc($query)){ echo $sor['username']; echo ''; } }else{ echo 'Nincs találat'; } }else{ echo 'Üres keresőmező'; # esetleg visszairányítás: //header('Location: kereso.html'); } }else{ echo 'Közvetlen meghívás nem engedélyezett!'; } ?> 

És egy hibás seasson alapu rendszer, na mi a hiba?: http://weblabor.hu/forumok/temak/108383
És ugyanaz helyesen: http://www.tutorial.hu/mysql-session-alapu-bejelentkezes-reszletesen/
 Biztonság:
https://www.usernet.hu/blog/biztonsagos-felhasznalo-azonositas-php-mysql-kornyezetben

Login rendszerekre példa:
http://phpmuhely.hu/muhely/letoltesek?act=cat_view&id=9

https://php-programozas.info/2011/04/18/beleptetes-i

http://szit.hu/doku.php?id=oktatas:programoz%C3%A1s:php:php_komplett_azonos%C3%ADt%C3%A1s_megval%C3%B3s%C3%ADt%C3%A1sa

http://www.tankonyvtar.hu/hu/tartalom/tamop425/0038_informatika_DinamikusWEBProg-HU/ch01s13.html

1. Jelszó tárolás
A jelszó tárolás az első kritikus pontja a rendszerednek. Sok féle adatbázisban tudod tárolni a jelszavaidat, lehet az akár LDAP vagy MySQL, sima szövegfájl. Amire figyelni kell, az a jelszavak megfelelő titkosítása. Ez két dologből tevődik össze. Az egyik maga az egyirányú titkosító algoritmus, pl MD5, SHA1, SHA256, Blowfish, etc. Ezek közül olyat érdemes választani, ami lassú és nincs ismert kriptoanalízis rá (tehát az MD5 kiesett). A második fontos pont az úgynevezett sózás. Ez annyit tesz, hogy nem magát a jelszót hash-eled le, hanem hozzáteszel egy felhasználónként egyedi véletlen generált karaktersorozatot, amit plain textben is eltárolsz. Ennek az a célja, hogy megakadályozza a rainbow table jelszótörést arra az esetre, hogy kikerül az adatbázisod.
2. Beléptetés
Amikor belépteted a felhasználót az oldaladra, alapvetően érdemes a HTTP autentikációt elkerülni, mert ez minden egyes lekérdezésre elküldi a jelszót a szervernek. Ehelyett úgynevezett munkamenetet vagy sessiont érdemes használni. A session úgy működik, hogy a szerver oldalon létrehozol egy adatbázis bejegyzést vagy fájlt, amiben eltárolod az adott munkamenethez kapcsolódó adatokat, például azt, hogy be van-e lépve és ha igen, milyen felhasználónéven. Ezek után kiküldesz egy sütit (cookie-t), ami tartalmazza a session azonosítót. Itt érdemes arra figyelni, hogy ha nem létezik a szerver oldalon a felhasználó által küldött munkamenet azonosító, akkor mindenképpen érdemes újat generálni.
Amellett, hogy az adatbázisok használatánál természetesen vigyázni kell az SQL injection kivédésére, fokozottan kell ügyelni az XSS elleni helyes védelemre is, hiszen egy beillesztett JavaScript kóddal a munkamenet azonosító adott esetben könnyen ellopható.
Érdemes arra is figyelni, hogy a beléptető oldalad kizárólag HTTPS-en legyen elérhető és az megfelelően legyen konfigurálva. Ha a teljes oldal HTTPS-en elérhető, érdemes a sütinél a secure jelzőt és a fejlécekben a HSTS fejléceket beállítani. Emellett a sütiknél mindenképpen érdemes használni a httpOnly jelzőt.
3. Hosszú távú bejelentkezés
Ha olyan funkciót szeretnél beépíteni, mint a Facebook, hogy hosszú távon megjegyzi a böngészőt, akkor erre külön adatbázis bejegyzést kell létrehoznod a felhasználóhoz kapcsolva. Amikor az alkalmazásod meglátja ezt az azonosítót és nincs élő munkamenet, akkor megnézheto, hogy az adott kulcs melyik felhasználóhoz tartozik és automatikusan beléptetheti.
4. Véletlen karaktersorozatok generálása
Volt szó sok féle véletlen karaktersorozatról. Itt érdemes vagy a uniqid() függvényt vagy az openssl_random_pseudo_bytes() függvényt használni és a saját hákolásokat elkerülni.
5. Általános jótanácsok
Ha PHP-s alkalmazást gyártasz, érdemes a 10 évvel ezelőtti praktikákat és tévhiedelmeket elfelejteni. Mostanában már egy modern PHP-s alkalmazás OOP szemlélettel épül fel és megfelelően központosítja az adatbázis-kezelést valamint a beléptetést. Ez csökkenti a hibalehetőségeket és növeli a hatékonyságot.

http://aries.ektf.hu/~serial/kiralyroland/download/BevezetesAWebprogramozashozKiralyRoland2011.pdf

A kód a belépésnél ami a jelszót nézi:

$check_password = hash('sha256', $_POST['password'] . $row['salt']);
for($round = 0; $round < 65536; $round++)
{
$check_password = hash('sha256', $check_password . $row['salt']);
}

if($check_password === $row['password'])
{
$login_ok = true; 


www.fzolee.hu/download/download.php?fname=./PHP_programozás.pdf

https://it-sziget.hu/tag/php?page=3

 

Nincsenek megjegyzések:

Megjegyzés küldése