Kom ihåg mig?
Home Menu

Menu


Inloggings funktion (PHP)

 
 
Ämnesverktyg Visningsalternativ
Oläst 2010-02-16, 19:01 #1
youheardit youheardit är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Oct 2008
Inlägg: 1 168
youheardit youheardit är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Oct 2008
Inlägg: 1 168
Exclamation Inloggings funktion (PHP)

Tjena!
Först nu har jag börjat tvivla eller inse att min egen skrivna funktion för inloggning inte är så bra som den MÅSTE vara.
Skrev den för ett år sen med hjälp av en tutorialsite.

Mina kunskaper om PHP har höjts rejält under året och först nu när jag lägger tanken på det så känns den inte så bra.

så här ser koderna ut:
PHP-kod:
if(isset($_POST['login'])){

include
'../dbcon.php'//databas uppkopplingen

$user=$_POST['user']; 
$pass=$_POST['pass'];


$userstripslashes($user);
$passstripslashes($pass);
$usermysql_real_escape_string($user);
$passmysql_real_escape_string($pass);


$sql="SELECT * FROM users WHERE user='$user' and pass='$pass'";
$result=mysql_query($sql);

$count=mysql_num_rows($result);

if(
$count==1){
$_SESSION['anv_id'] = mysql_result($result0"id");
header("Location: sidan.php");
}
else {
die(
"Fel inloggningsuppgifter");


Frågan här är att jag är rädd för att det finns någon form av BOT som försöker ta sig in till administrationen genom att skicka POST begäran till filen tills den hittar rätt uppgifter..

Och nej, jag kör inte md5 på lösenorden än.. vill först fixa till systemet..

Tacksam för svar och idéer

Ha en trevlig afton!
//Philip Andersson!
youheardit är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-02-16, 19:43 #2
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
Att inte köra krypterade lösenord är nog faktiskt den största bristen i ditt system så det kan du nog fixa till Du kan lika gärna köra sha1 (+ salt, helst dubbla) också eftersom det inte medför något merarbete.

Trial and error kan givetvis alla botar köra, vill du stoppa den möjligheten får du blockera användaren efter ett visst antal felaktiga inloggningar. Huruvida det är lönt eller inte beror väl mest på hur känslig informationen i administrationen är.

Sedan beror det ju lite på hur kollen på administrationssidorna ser ut.

Stripslashes? Magic quotes? Ska du ha en magic quotes-koll så lägger du det lämpligtvis i en inkluderad funktion istället.
__________________
Full-stack developer, free for smaller assignments

Senast redigerad av tartareandesire den 2010-02-16 klockan 19:47
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-02-16, 22:40 #3
SimonPs avatar
SimonP SimonP är inte uppkopplad
Mycket flitig postare
 
Reg.datum: May 2006
Inlägg: 832
SimonP SimonP är inte uppkopplad
Mycket flitig postare
SimonPs avatar
 
Reg.datum: May 2006
Inlägg: 832
Som sagt, du bör använda SHA1 + salt på lösenordet.

Nästa förbättring är att du lägger på ett till fält (INT) i databasen, kan kalla det för "tries", och för varje misslyckat lösenord ökar du och updaterar databasfältet tries med 1, vid t.ex. 5 misslyckade försök sätter du tries-fältet till (time() + 1800) (för 30 min. låstid)

Innan varje inloggning kollar du sen typ:
IF (tries > time() ) die('Your account has been locked due to too many failed login attempts')

Vissa grupper, t.ex Admin bör inte skyddas av tries-låsningen, annars kan någon medvetet låsa ute Admin.

Ovan är det enklaste och, med mina ögon, bästa sättet att hantera felaktiga inloggningar.

Vill man göra det ännu svårare för botar/hackers måste man skapa en separat tabell där man även kontrollerar antal försök per IP-nr.

Senast redigerad av SimonP den 2010-02-16 klockan 22:43
SimonP är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-02-16, 23:24 #4
youheardit youheardit är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Oct 2008
Inlägg: 1 168
youheardit youheardit är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Oct 2008
Inlägg: 1 168
Tack för era svar, smarta idéer det som gäller är tillgången till mitt CMS på en hemsida. Finns en admin. Eftersom ni rekommenderar sha1+salt så ska jag köra på det.

Ni tror inte det skulle kunna passa med tex recaptcha innan varje inloggning? (ungefär 1gång om dagen)

eller kan bottar, hackers komma förbi den med på något vis?

Tackar igen för era svar!
youheardit är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-02-16, 23:44 #5
SimonPs avatar
SimonP SimonP är inte uppkopplad
Mycket flitig postare
 
Reg.datum: May 2006
Inlägg: 832
SimonP SimonP är inte uppkopplad
Mycket flitig postare
SimonPs avatar
 
Reg.datum: May 2006
Inlägg: 832
Citat:
Ursprungligen postat av youheardit Visa inlägg
Ni tror inte det skulle kunna passa med tex recaptcha innan varje inloggning? (ungefär 1gång om dagen)

eller kan bottar, hackers komma förbi den med på något vis?

Tackar igen för era svar!
Jo, om det gäller ett CMS där det är få användare så räcker det nog bra med captcha.
Googla bara först så du vet att din captcha inte är "knäckt".

Edit: å andra sidan, eftersom det är få användare och om du har ett bra lösenord så behöver du ju inte göra nått? Det är ju inte så att nån kan bruteforca ett bra lösenord...

Senast redigerad av SimonP den 2010-02-16 klockan 23:48
SimonP är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-02-17, 00:07 #6
Nihilnovi Nihilnovi är inte uppkopplad
Medlem
 
Reg.datum: Jun 2008
Inlägg: 233
Nihilnovi Nihilnovi är inte uppkopplad
Medlem
 
Reg.datum: Jun 2008
Inlägg: 233
Lite simpel referenskod i ungefär samma login gjord i OOP fast me sha1 o salt.
Bör ej användas rakt av!!!

login.php
PHP-kod:
    $login = new Validate($_POST['username'],$_POST['password']);
    if(
$login->validateUser() != NULL) {
    
session_start();
    
$_SESSION['username'] = $_POST['username'];
    
$getid mysql_query("SELECT `id` FROM users WHERE `username` =  '{$_POST['username']}' LIMIT 1") or die("Database error.");
    
$setid mysql_fetch_object($getid);
    
$_SESSION['id'] = $setid->id
validate.php
PHP-kod:
    class Validate {
        
        public 
$username;
        public 
$password;
        
        function 
__construct($username,$password) {
            
            
$this->username $username;
            
$this->password $password;
            
        }
        
        public function 
validateUser() {
                
            
$sql "SELECT * FROM users WHERE username = '$this->username'";
            
$this->query mysql_query($sql);
            
            if (!
$this->query) {
                exit(
"Error");
                return 
FALSE;
            } else {
                
                
$row mysql_fetch_object($this->query);            
                
$this->hashedpassword sha1($this->password $row->passsalt);
                if(
$row->password != $this->hashedpassword) {
                    return 
FALSE;
                } else {
                    return 
TRUE;
                }
            }            
        }
    } 

Senast redigerad av tartareandesire den 2010-02-17 klockan 00:31 Anledning: Kommentarer som leder OT
Nihilnovi är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-02-17, 06:13 #7
Jonas Jonas är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2004
Inlägg: 3 364
Jonas Jonas är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2004
Inlägg: 3 364
Vad händer med din inloggning om jag inte har något att skicka? Dvs om $_POST['user'] är tom.
Detta beror helt och hållet på hur felhanteringen i php.ini & scriptet är inställd
Jonas är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-02-26, 11:00 #8
StateCollapse StateCollapse är inte uppkopplad
Banned
 
Reg.datum: Nov 2009
Inlägg: 399
StateCollapse StateCollapse är inte uppkopplad
Banned
 
Reg.datum: Nov 2009
Inlägg: 399
Ser inga fel, men du bör ju köra något slags:
PHP-kod:
$userstripslashes($user);
$passstripslashes($pass);
$usermysql_real_escape_string($user);
$passmysql_real_escape_string($pass); 
StateCollapse är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-02-26, 11:21 #9
sprite sprite är inte uppkopplad
Hej, jag är ny här.
 
Reg.datum: Dec 2009
Inlägg: 1
sprite sprite är inte uppkopplad
Hej, jag är ny här.
 
Reg.datum: Dec 2009
Inlägg: 1
Humor från StateCollapse igen?

http://www.cout.se/php/918-inloggings-funktion-php.html

Han är väl admin på den sidan, eller har youheardit tagit över och blivit skitsofren?
sprite är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-02-26, 12:54 #10
StateCollapse StateCollapse är inte uppkopplad
Banned
 
Reg.datum: Nov 2009
Inlägg: 399
StateCollapse StateCollapse är inte uppkopplad
Banned
 
Reg.datum: Nov 2009
Inlägg: 399
Citat:
Ursprungligen postat av sprite Visa inlägg
Humor från StateCollapse igen?
felpost. felpost.

Senast redigerad av StateCollapse den 2010-02-26 klockan 12:57
StateCollapse är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 13:02.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017