Trädvy Permalänk
Medlem
Plats
Piteå
Registrerad
Okt 2004

problem med php login kod

jag försöker modifiera ett login script som hade username och lösen i Define nedan för att istället lagra det i databas.

Jag lagrar lösenordet med MD5 i databasen och det fungerar som det ska att logga in, men när jag går till någon sida som kräver login får jag fram login rutan igen som säger att lösenordet är fel

vad gör jag för galet riktigt?

<?php $un = $_POST['user']; require_once ('/inc/login_conn.php'); $dsn = "mysql:Server=$Lhost:$Lport;Database=$Ldb"; $sql = "SELECT * FROM Users WHERE UserName= '$un'"; $stmt = $conn->prepare($sql); $stmt->execute (); $sett1= $stmt->fetch(PDO::FETCH_ASSOC); $user = $sett1['UserName']; $pass = $sett1['Password']; define('LOGIN_USER', "$user"); //define('LOGIN_USER', "USERNAME"); define('LOGIN_PASS', "$pass"); //define('LOGIN_PASS', "PASSWORD"); class Login { // unique prefix that is used with this object (on cookies and password salt) var $prefix = "login_"; // days "remember me" cookies will remain var $cookie_duration = 1; var $user = ""; var $pass = ""; function authorize() { //save cookie info to session if(isset($_COOKIE[$this->prefix.'user'])){ $_SESSION[$this->prefix.'user'] = $_COOKIE[$this->prefix.'user']; $_SESSION[$this->prefix.'pass'] = $_COOKIE[$this->prefix.'pass']; } // else{echo "no cookie<br>";} //if setting vars if(isset($_POST['action']) && $_POST['action'] == "set_login"){ $this->user = $_POST['user']; $this->pass = md5($this->prefix.md5($_POST['pass'])); //hash password. salt with prefix $this->check();//dies if incorrect //if "remember me" set cookie if(isset($_POST['remember'])){ setcookie($this->prefix."user", $this->user, time()+($this->cookie_duration*86400));// (d*24h*60m*60s) setcookie($this->prefix."pass", $this->pass, time()+($this->cookie_duration*86400));// (d*24h*60m*60s) } //set session $_SESSION[$this->prefix.'user'] = $this->user; $_SESSION[$this->prefix.'pass'] = $this->pass; } //if forced log in elseif(isset($_GET['action']) && $_GET['action'] == "prompt"){ session_unset(); session_destroy(); //destroy any existing cookie by setting time in past if(!empty($_COOKIE[$this->prefix.'user'])) setcookie($this->prefix."user", "blanked", time()-(3600*25)); if(!empty($_COOKIE[$this->prefix.'pass'])) setcookie($this->prefix."pass", "blanked", time()-(3600*25)); $this->prompt(); } //if clearing the login elseif(isset($_GET['action']) && $_GET['action'] == "clear_login"){ session_unset(); session_destroy(); //destroy any existing cookie by setting time in past if(!empty($_COOKIE[$this->prefix.'user'])) setcookie($this->prefix."user", "blanked", time()-(3600*25)); if(!empty($_COOKIE[$this->prefix.'pass'])) setcookie($this->prefix."pass", "blanked", time()-(3600*25)); $msg = '<h2 class="msg">**Logout complete**</h2>'; $this->prompt($msg); } //prompt for elseif(!isset($_SESSION[$this->prefix.'pass']) || !isset($_SESSION[$this->prefix.'user'])){ $this->prompt(); } //check the pw else{ $this->user = $_SESSION[$this->prefix.'user']; $this->pass = $_SESSION[$this->prefix.'pass']; $this->check();//dies if incorrect } }#-#authorize() function check(){ if(md5($this->prefix . LOGIN_PASS) != $this->pass || LOGIN_USER != $this->user){ //destroy any existing cookie by setting time in past if(!empty($_COOKIE[$this->prefix.'user'])) setcookie($this->prefix."user", "blanked", time()-(3600*25)); if(!empty($_COOKIE[$this->prefix.'pass'])) setcookie($this->prefix."pass", "blanked", time()-(3600*25)); session_unset(); session_destroy(); $msg='<h2 class="warn">Incorrect username or password</h2>'; $this->prompt($msg); } }#-#check() function prompt($msg=''){ ?>

Session:

<?php session_start(); require("/Login.class.php"); $login = new Login; $login->authorize(); ?>

om jag ändrar raden:

$this->pass = md5($this->prefix.md5($_POST['pass'])); //hash password. salt with prefix

Till som den var innan jag började tjorva:

$this->pass = md5($this->prefix.$_POST['pass']); //hash password. salt with prefix

och loggar in med mitt hashade lösen verkar det inte heller fungera.... så jag vette tusan vart felet ligger då? om jag sätter define_user och define_pass i toppen av koden utan variablar så fungerar det som det ska...

Jag är way over my head känns det som, några tips hade uppskattats

CPU: AMD Ryzen 1700x @ 3.8GHz || Mem: 16GB Corsair LPX 3000mhz || Mobo: Asus x370 Prime || GPU: EVGA Geforce GTX1070 SC || SSD: WD black 500GB m2 || OS: Linux Mint/Win 10 || Monitor: Dell 43" 4K P4317Q

Citera om du vill ha svar :)

Trädvy Permalänk
Medlem
Registrerad
Jan 2014

Några spontana tips:
En av hasharna är kanske beräknad på lösenord och den andra på lösenord + radbrytning?
Har du verifierat att den hash du genererat för hand är likadan, byte för byte, med hashen som lagrats i databasen?
Har du testat att köra endast check()-funktionen?

Skrivet av pellle87:

vad gör jag för galet riktigt?

Förutom eventuella syntaktiska och semantiska fel i koden? Well, du använder samma salt för alla användarkonton, en svag hashalgoritm och du skriver en egen lösenordskontrollfunktion, när det finns färdig kod som PHPass, som har granskats av relativt många ögon.

Trädvy Permalänk
Forumledare
Kent
Registrerad
Jan 2005

*Bump raderad*

Observera att vi inte tillåter bumpning/meningslösa inlägg. Den här gången har jag inte låst tråden, men kom i fortsättningen ihåg att regeln finns.

Citat:

§4 Bumpning
Det är inte tillåtet att skriva inlägg som endast är till för att flytta tråden högre upp i trådlistningen (så kallad bumpning). Däremot är det tillåtet att skriva flera inlägg i rad förutsatt att varje nytt inlägg tillför information eller på annat sätt för diskussionen framåt. Regeln finns för att alla ska få samma chans att få sina trådar uppmärksammade och för att forumet ska bli så överskådligt som möjligt.

/moderator

Skrivet av pellle87:

Synpunkter eller frågor gällande modereringen? Då kan du kontakta mig eller moderatorerna.
Ursäkta min stavning, jag är dansk