sql >> Databasteknik >  >> RDS >> Mysql

Vad är det korrekta och säkra/säkra sättet att hålla en användare inloggad? småkakor? session? PHP &&MYSQL

Låt mig först berätta detta. Ingenting är 100% säkert. Ingenting är lufttätt och ingenting är heligt. Om du är tillräckligt motiverad kommer en angripare att bryta alla försvar på serversidan du kan använda (såvida du inte använder HTTPS, vilket är en annan historia).

Du kan använda cookies, men cookies är mycket exponerade och lätta att ändra. Lagra aldrig privata data eller åtkomstnivåer i en cookie. Eftersom den lätt stjäls/ändras av en angripare.

Sessioner är inte heller 100% säkra. Sessions-ID:t, som servern använder för att identifiera klienten, skickas på ett av två sätt. en $_GET-variabel (dålig), eller en cookie (bättre, men fortfarande ganska dålig). Det betyder att om du är inloggad som administratör, över ett osäkrat WiFi, kan en skicklig angripare (och med skicklig menar jag en pr0 haxx0r som laddade ner en enkel HTTP-sniffer) enkelt stjäla ditt SESSION ID. Och även om du inte får ditt lösenord, kommer servern felaktigt att identifiera angriparen som dig och ge honom all åtkomst du kan ha/hade.

Så vad ska man göra? Sessioner är i de flesta fall säkra. Rekommendera dina användare att inte logga in under ett osäkrat nätverk (bussar, internetkaféer etc.). Om du vill tillåta din användarbehörighet att bestå över tid krävs en cookie. Jag använder vanligtvis ett system med 2 kakor om jag behöver det:

userid=12345
hash=password_hash($userid . $hashed_password, PASSWORD_DEFAULT)

Då har jag något att matcha mot, och användarens detaljer avslöjades inte.

Men som jag sa, i slutändan, om du verkligen vill säkra dina användare, skaffa dig HTTPS ovanför allt annat som står i det här svaret.



  1. Facebook Registration Connect

  2. Fråga som använder group_concat returnerar endast en rad

  3. Disaster Recovery för Galera Cluster utplacerad till ett hybridmoln

  4. SQL INSERT INTO-sats