![]() |
"Kom ihåg mig" - säkraste sättet
Hej!
Sitter och programmerar en inloggning som jag vill ska ha en "kom ihåg mig" funktion. Jag funderar dock vad som är säkrast att göra? Min ide just nu är att lagra användarens uppgifter i hans egen cookie fil, och med dessa sedan göra en virtuell inloggning (och med en session kontrollera att detta bara görs vid första besöket, och inte vid varje uppdatering). Och sedan som vanligt sätta en session som dör när man stänger sidan. Min sida går ju så säker som den kan, men hur är det med användarens säkerhet? Förslag och synpunkter mottages. :) |
En bra idé kan vara att i användarens cookie endast spara en nyckel (ej kopplad till användarens lösenord) och i db:n spara t.ex. dennes user agent.
Det försvårar för någon som kommit över användarens cookie att själv logga in med den. Varje gång som någon gör en "vanlig" inloggning med sitt användarnamn samt lösenord kan man i databasen då spara en ny nyckel och user agent vilket gör den tidigare cookien inaktuell. Låt oss säga att användaren sitter på en dator där andra har tillgång (Internetcafé eller vad som helst) och av misstag/okunskap valt att bli ihåg kommen, då löser det sig självt när användaren loggar in på nästa ställe. För de som vill använda funktionen på t.ex. både hemmet och arbetet uppstår såklart problem... |
Spontant tycker jag inte att man ska lagra annat än en nyckel i användarens kakburk, själva inställningarna lägger man i databas eller dylikt.
|
Borde detta kunna fungera bra då?
Kom ihåg mig: 1. Generera en sträng med slumpade tecken 2. Spara tecknen & user agent i databasen 3. Sätt en cookie med samma tecken 4. Skapa en session för användaren Vid nästa besök: Finns en cookie men ingen session: 1. Kolla om den matchar någon med samma ID & user agent. 2. Gör den det: Skapa en session för användaren & generera ny sträng som sparas i cookien & databasen Om inte: Ta bort cookien. |
Citat:
|
Att enbart använda User Agent som salt ger inte speciellt mkt säkerhet, lägg även på IP-nr så får du en betydligt säkrare "kom ihåg".
|
Citat:
|
Citat:
|
Hur lång bör nyckeln vara? Minst 128 bitar antar jag.
Bör man även sätta user-id (eller annan unik integer) som cookie och i "auto-login-tabellen"? Alltså för att ha en indexerad integer att söka efter i databasen. Det kan nog vara bra att spara giltighetstid också i databasen. Man kanske även bör ha koll på om det kommer många inloggningsförsök med olika nycklar från samma IP inom en viss tid. Angående att spara user agent så höjer det förstås säkerheten, men som sagt kan det ställa till problem om användaren vill ha autoinloggning både på jobbet och hemma, eller om hen har flera olika webbläsare på sin dator. Cookien kanske bör ha en viss giltighetstid som aldrig förnyas, så att cookien kommer att försvinna efter ett tag från publika datorer om någon skulle ha gjort misstaget att vällja "kom ihåg inloggning" på en sådan dator. När cookiens gilitighetstid tar slut raderas den och användaren blir tvungen att logga in igen. Om användaren väljer att logga ut bör cookien raderas. |
User agent är inte direkt alltid statiskt. Beror på vad du har för ISP, ibland kan det växla under bara ett enda request. :P
|
Timeout när jag försöker spara redigerat inlägg. :(
Citat:
|
Citat:
|
Längden på nyckeln har väl i praktiken ingen direkt betydelse. Bättre att se över antalet inloggningsförsök från samma IP.
Men ur en hackares synvikel är det mycket lättare att köra en wordlistattack på lösenordet än på en unik sträng. Att spara gilltighetstiden i databasen eller att låta cookie:n dö efter en viss period har väl ingen betydelse? Att cookie:n raderas när man manuellt loggar ut är en självklarhet. Om att använda user agent ger högre säkerhet men leder som sagt till problem för vissa. Där är det en avägning vad som är att föredra. Angående att matcha IP så ger det även problem för det som bär med sig datorn... EDIT: ISP har ju ingen koppling till användarens user agent. Det som däremot kan ändra user agent är ju uppgradering av webbläsare eller OS |
Skall genomföra ett litet test på det jag själv skrev förut. Angående att man inte kan bli ihågkommen på flera olika platser så tycker jag nog mest att det är positivt. Som sagt, skulle man av misstag kryssa i kom ihåg mig någonstans så är det ju ogjort nästa gång man loggar in. :)
|
Citat:
Men som sagt, enbart User agent gör det inte svårare för en hacker, det handlar om sekunder så har man testat vilken User agent som validerar gentemot cookien. |
Citat:
Sen kan man alltid argumentera för att ett system ska vara säkert även om en hacker känner till alla säkerhetsåtgärder och algoritmer så ur det perspektivet är kom ihåg mig inte speciellt säkert... Sen krävs det ganska speciella omständigheter för att man ska lägga ner tiden på att komma över en cookie när det övergripande problemet är att användare tenderar att välja extremt svaga lösenord. |
En hacker har ändå väldigt liten chans att lyckas om han endast har 3 försök innan han blir IP-bannad, vilket är fallet på mina webbplatser. :)
Här är min början, vad tycks? Citat:
|
Citat:
Citat:
Det var trådskaparen som ville veta det "säkraste sättet". Citat:
|
Citat:
|
Citat:
IP är säkrare men fungerar inte för alla. Så värst mycket mer går inte att göra... |
På vissa ställen blir man påtvingad en ny IP varje dygn, även om all utrustning inklusive dator har varit påslagen hela tiden.
|
Citat:
Personligen tycker jag inte man ska ha "kom ihåg"-funktioner, dom flesta webbläsare klarar själva av att spara inloggning + lösenord, och då är det upp till användaren hur han vill göra, inte siteägaren. Betydligt enklare och i många fall säkrare. |
Citat:
Annars håller jag med dig, det finns inte längre någon större poäng med att göra egna kom ihåg mig-funktioner. |
Ett mellanalternativ är att komma ihåg användarnamnet, så användaren bara behöver skriva lösenord för att logga in. Markören kan placeras i lösenordsrutan automatiskt om användarnamn är satt.
|
Citat:
|
Citat:
Om alla här inne sitter på samma ISP och hämtar samma bild vid ungefär samma tidpunkt kommer i många fall bara ett HTTP request gå ut, vilket sparar väldigt mycket bandbredd och bandbredd är pengar. Du kan inte ens förvänta dig att ett IP är samma under en request (hämtning av bilder, filer etc). Detta går enkelt att se på vilken välbesökt sida som helst med ett någorlunda avancerat statistikskript. Så förlita er aldrig på att IP / user agent ska vara samma hela tiden. |
Citat:
Det låter som det absolut bästa alternativet, och bra mycket enklare! Däremot så kommer nog många användare bli lite fundersamma på att deras användarnamn blir ihågkommet men inte resten. :( Ang. detta med dynamisk IP så får jag en ny IP ungefär varje gång som jag startar om datorn. |
Citat:
|
Citat:
|
"Kom ihåg mig" - säkraste sättet
VPN kryptering, inbyggt tillägg som stegar igenom fördefinerade sha-256 strängar genom ett tillägg i webbläsaren som bakas in vid varje request... Ehm. En lite mer normal lösning; Använd mcrypt med t.ex. blowfish på ett liknande sätt Kod:
class Cookie { |
Citat:
Om man nu sparar användarnamn, finns det någon nackdel med att spara användarnamnet i klartext som en cookie? Är det bättre med en nyckel som pekar på användaren i databasen? Eller något annat alternativ? Spara en krypterad variant av användarnamnet som cookie? Det kanske duger med någon simpel kryptering och samma statiska nyckel för hela sajten. Om man sparar användarnamnet i klartext som cookie kanske viss privacy-mjukvara ogillar det? |
Citat:
Citat:
Sen finns det andra lösningar för att hantera dynamiska IP addresser också, som Clarence skrev, räcker det ofta med att använda klass C addressen. En påbyggnad på detta är att användarnamnet avgör vilka klass C-nät addresser som får logga in utan behöva skriva in lösenord, dvs. flera olika klass C tillåts för samma användare. Men det finns andra lösningar också. |
Man skulle väll antagligen kunna kolla dom 2, eller möjligtvis 3 första blocken i IP-adressen för att se ifall dem stämmer precis som ni säger.
Chansen att en hacker på 3 försök skulle lyckas använda exakt samma user agent, samma ip-range och dessutom lyckats gissa rätt på den unika-slumpmässiga hashen borde ju vara en chans på bara någon promille? |
Citat:
|
Om man sparar IP (de 16 eller 24 första bitarna) tillsammans med user agent, och tillåter flera auto-login-rader i DB per användare, kommer man dessutom förbi problemet med om användaren har olika webbläsare/OS hemma och på jobbet. Det kräver förstås att det är olika IP range hemma och på jobbet, men det lär det vara i de flesta fall.
|
Citat:
|
Citat:
|
Citat:
|
Citat:
Kanske så här någonting? (Föreslå gärna förbättringar.) auto-login-tabell: user-id (indexerad), ip (16 första bitarna), nyckel (>=128 bitar) (eventuellt även giltighetstid och user agent) Man sparar user-id och nyckel som cookies. När cookie-inloggningsförsök sker: Kod:
if(user-id och IP finns i auto-login-tabellen) Citat:
|
Citat:
|
Alla tider är GMT +2. Klockan är nu 07:08. |
Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson