Gå til innhold

Forbedringsforslag til pålogging


Anbefalte innlegg

Hei.

 

Jeg har følgende funksjon som sjekker innlogging. Dette er et ett-brukersystem, så brukernavnet og passordet ligger lagret i to variabler.

 

function checkLogin($v1, $v2){

global $username,$password,$lang_login_fail,$lang_pw_missing,$lang_un_missing,$lang_both_missing;

if($v1 && $v2){
	if($v1 == $username && $v2 == $password){
		setcookie("auth", "$password", time()+86400, "/" , "");
		header("Location: main.php");
		exit;
	}else{
		<p align=center class=warnText>$lang_login_fail!";
	}
}else if ($v1){
	echo "<p align=center class=warnText>$lang_pw_missing!";
}else if ($v2){
	echo "<p align=center class=warnText>$lang_un_missing!";
}
}

 

Forslag til forbedring av sikkerheten mottas med takk :)

Lenke til kommentar
Videoannonse
Annonse

Vel.

 

- Alltid lagre passord som en hash.

- Alltid salt passordet før det hashes - SPESIELT hvis det skal lagres i en cookie.

- Velg en sikker hashingalgoritme, f.eks. SHA-256

- Det er ikke så veldig praktisk å bruke nøkkelordet global for å hente globale variabler. Send heller variablene funksjonen bruker som parametere.

- Autentiseringen bør lagres i session med mindre du trenger å bli husket til neste gang du besøker siden.

- Brukeren bør autentiseres for hver eneste sidevisning.

Lenke til kommentar

Takker for svar Lokaltog.

Hva vil det si å salte passordet?

 

 

Her er funksjonen som sjekker om en er logget inn.

function checkAuth(){
global $auth,$password;
if($password != $auth){
	setcookie("auth", "", time()+86400, "/" , "");
	header("Location: index.php");
	exit;
}
}

Lenke til kommentar

En enkel 3 fils login for en bruker som kan utvides til flere brukere. Testet som en fil.

Usikker på om den define sjekken gjøre noe bra, men den gjør ikke noe dårlig...

 

<?php
//file ../secretpassword.php
if (!defined('START_PAGE')) {
trigger_error('Invalid page load', E_USER_ERROR);
}

$myUser = new My_User('hey', '33afa8016066238ba50e59bff7793dec' /*password is "test"*/, 'mySalt');

 

<?php
//file My_User.php or ./My/User.php (change require accordingly)
class My_User {
private $_username;
private $_password;
private $_salt;

public function __construct($username, $saltedPassword, $salt)
{
	$this->_username = $username;
	$this->_password = $saltedPassword;
$this->_salt = $salt;
}

protected function saltPassword($password)
{
	return md5(md5($password) . $this->_salt);
}

public function getUsername()
{
	return $this->_username;
}

public function checkAuth($username, $password)
{
	return (!strcmp($username, $this->_username)) && (!strcmp($this->saltPassword($password), $this->_password));
}
}

 

<?php
//file login.php
define('START_PAGE', true);
//without autoload
require_once 'My_User.php';
require_once '../secretpassword.php';

$myUser->checkAuth($username, $password) or exit('Not authed!');

Endret av OISNOT
Lenke til kommentar

Salting av passord brukes for å gjøre innloggingsystemet sikrere for eventuelle innbrudd.

Du har kanskje hørt om hashing av passord, dvs. enveiskryptering av passord. Sett at du lager deg en bruker på en side, og følgende logindata blir registrert og lagt inn i databasen:

+---+------------+------------+
| id  | username|   password|
+---+------------+------------+
| 42 |		alec1|	   querty|
+---+------------+------------+

Dersom uvedkommende kommer seg inn i databasen vil de kunne se passordet ditt med en gang. Ved å hashe passordet unngår vi dette. Ved hjelp av md5()-funksjonen i PHP vil det da se slik ut:

+---+------------+------------+
|  id|  username|					  password|
+---+------------+------------+
|  42|  alec1|d8578edf8458ce06fbc5bb76a58c5ca4|
+---+------------+------------+

Passordet blir da enveiskryptert slik at det vil være umulig for et menneske alene å finne ut hva passordet ditt var. Men hackere kan utstyre seg med såkalte rainbow tables, som er tabeller bestående av forhåndshashede passord. Siden qwerty er et veldig vanlig passord, er sjansen stor for at passordet ditt blir røpet. Derfor bruker man salt. Ved å salte passord legger man til en tilfeldig variabel før hashing av passordet, noe som gjør sjansen for å få tak i det opprinnelige passordet minimal.

 

Handlingsrekkefølgen blir da:

1: Få tak i logindata

2: Generer salt

3: Hash salt og passord (md5($password.$salt))

4: Legg logindata pluss salt inn i databasen

 

+---+------------+------------+----+
|  id|  username|  password|  salt| 
+---+------------+------------+----+
|  42|  alec1|9c2c3bcf02365f0deb66e1a8a7fd3070|oplx|
+---+------------+------------+----+

 

Saltet taes vare på til senere, fordi en ny hash må genereres senere når brukeren skal logge inn neste gang.

 

Edit: Ble litt stygt dette :blush: Du bør kanskje lese om hashing hos http://norskwebforum.no/ , de har mange fine guider :)

 

Lykke til!

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...