Kom ihåg mig?
Home Menu

Menu


PHP->Sessions->Object->Säkerhet?

 
Ämnesverktyg Visningsalternativ
Oläst 2006-03-28, 12:04 #1
FredrikMHs avatar
FredrikMH FredrikMH är inte uppkopplad
Supermoderator
 
Reg.datum: Apr 2004
Inlägg: 1 501
FredrikMH FredrikMH är inte uppkopplad
Supermoderator
FredrikMHs avatar
 
Reg.datum: Apr 2004
Inlägg: 1 501
Jag funderar lite över säkerheten i mitt system (som ännu ej är i bruk).

Det är så att jag använder session_register() på ett objekt av klassen User. Där användarnamn, lösenord osv finns lagrat. Detta för att jag vill på ett enktelt sätt komma åt all användarinformation på alla kommande sidor. Nu undrar jag om jag behöver kolla Objektet som kommer tillbaka så det inte har ändrats av användaren. Exemeplvis innuti objektet finns information lagrad om användaren är en vanlig användare, moderator eller en administratör.

Finns det möjlighet för användaren att modifiera detta och på så sätt skapa säkerhetshål i mitt script? I så fall behöver jag kontrollera all kritisk data överst i varje fil.
FredrikMH är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-03-28, 12:26 #2
DeSotos avatar
DeSoto DeSoto är inte uppkopplad
Flitig postare
 
Reg.datum: Oct 2005
Inlägg: 323
DeSoto DeSoto är inte uppkopplad
Flitig postare
DeSotos avatar
 
Reg.datum: Oct 2005
Inlägg: 323
Det är generellt sett inte bra att lagra objekt i sessionsvariabler, eftersom objektet först serialiseras (heter det så?) och sparas i en fil på servern, och sen avserialiseras (unserialize) nästa gång användaren skickar en request till servern. Detta tar onödigt lång tid. Det är bättre att lagra värdena i din databas, och skapa ett nytt objekt för varje request. Du ska försöka lagra så lite som möjligt i sessionsvariabler.

Eftersom sessionsvariabel-filen lagras på servern finns det inget sätt för en användare att ändra på den (såvida han inte har tillgång till servern). Risken som finns är dock att en användare får reda på ett sessions-id från en administratör, och lurar servern med det sessions-id:et att han är administratören.
DeSoto är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-03-28, 13:00 #3
kullervos avatar
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Dec 2003
Inlägg: 1 519
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
kullervos avatar
 
Reg.datum: Dec 2003
Inlägg: 1 519
Citat:
Originally posted by DeSoto@Mar 28 2006, 11:26
Det är bättre att lagra värdena i din databas, och skapa ett nytt objekt för varje request.
Du tycker alltså att det är skillnad på att lagra hela objektet i sessionen och att plocka ut datat och lagra det separat i sessionen? Samma sak i min mening. Jag föreslår att lagra hela objektet eftersom det är det resultatet han vill åt. Om det nu är långsammare att lagra hela sessionen så kan det inte vara många microsekunder.

Använder folk PHP's inbyggda session-hanterare till seriösa sajter? Det var länge sen jag ens tänkte på att det faktiskt finns en inbyggd i PHP. Den var kass för 4 år sedan (då jag senast hade med den att göra). Koda en egen istället. Det blir enklare i längden, ger mycket bättre prestanda, är mycket säkrare (om man har koll på bitarna) och är inte skadlig för hårddiskarna.
kullervo är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-03-28, 14:00 #4
zorans avatar
zoran zoran är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2004
Inlägg: 598
zoran zoran är inte uppkopplad
Mycket flitig postare
zorans avatar
 
Reg.datum: Jun 2004
Inlägg: 598
Citat:
Originally posted by DeSoto@Mar 28 2006, 12:26
Det är generellt sett inte bra att lagra objekt i sessionsvariabler, eftersom objektet först serialiseras (heter det så?) och sparas i en fil på servern, och sen avserialiseras (unserialize) nästa gång användaren skickar en request till servern. Detta tar onödigt lång tid. Det är bättre att lagra värdena i din databas, och skapa ett nytt objekt för varje request. Du ska försöka lagra så lite som möjligt i sessionsvariabler.

Eftersom sessionsvariabel-filen lagras på servern finns det inget sätt för en användare att ändra på den (såvida han inte har tillgång till servern). Risken som finns är dock att en användare får reda på ett sessions-id från en administratör, och lurar servern med det sessions-id:et att han är administratören.
Och du har mätt prestandaskillnaden på serialisering->avserialisering av ett objekt kontra mysql-query och retur av data och kan presentera det för oss?
zoran är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-03-28, 14:06 #5
zorans avatar
zoran zoran är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2004
Inlägg: 598
zoran zoran är inte uppkopplad
Mycket flitig postare
zorans avatar
 
Reg.datum: Jun 2004
Inlägg: 598
Citat:
Originally posted by FredrikMH@Mar 28 2006, 12:04
Jag funderar lite över säkerheten i mitt system (som ännu ej är i bruk).

Det är så att jag använder session_register() på ett objekt av klassen User. Där användarnamn, lösenord osv finns lagrat. Detta för att jag vill på ett enktelt sätt komma åt all användarinformation på alla kommande sidor. Nu undrar jag om jag behöver kolla Objektet som kommer tillbaka så det inte har ändrats av användaren. Exemeplvis innuti objektet finns information lagrad om användaren är en vanlig användare, moderator eller en administratör.

Finns det möjlighet för användaren att modifiera detta och på så sätt skapa säkerhetshål i mitt script? I så fall behöver jag kontrollera all kritisk data överst i varje fil.
Du bör, som i alla andra fall, aldrig lagra ett lösenord i klartext. Ifall du har ett krypterat lösenord så tappar det sitt säkerhetsvärde. Med andra ord, spelar ingen roll om någon "får tag i det".

Du kan fortfarande autenticera mot det.

Jag brukar göra så här i en funktion för autenticering:

Ta användarnamnet som användaren skickar in,
Skapa en factory med användarobjekt (jag har få användare),
Hämta objektet med användarnamnet användaren skickade in,
Kryptera lösenordet användaren skickade in med lösenordet i användarobjektet jag fick som salt,
Om resultaten är samma som lösenordet i användarobjektet returnera objektet, annars null.

Sen i applikationen, om sessionen har ett userobjekt som inte är null, är användaren inloggad, annars inte.
zoran är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-03-28, 14:12 #6
FredrikMHs avatar
FredrikMH FredrikMH är inte uppkopplad
Supermoderator
 
Reg.datum: Apr 2004
Inlägg: 1 501
FredrikMH FredrikMH är inte uppkopplad
Supermoderator
FredrikMHs avatar
 
Reg.datum: Apr 2004
Inlägg: 1 501
Lösenord lagrar jag inte i klartext utan med md5().
FredrikMH är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-03-29, 02:43 #7
zorans avatar
zoran zoran är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2004
Inlägg: 598
zoran zoran är inte uppkopplad
Mycket flitig postare
zorans avatar
 
Reg.datum: Jun 2004
Inlägg: 598
Citat:
Originally posted by FredrikMH@Mar 28 2006, 14:12
Lösenord lagrar jag inte i klartext utan med md5().
Dåså, vad har du att riskera ifall någon stjäl det?
zoran är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-03-29, 08:42 #8
Per Per är inte uppkopplad
Supermoderator
 
Reg.datum: Apr 2003
Inlägg: 719
Per Per är inte uppkopplad
Supermoderator
 
Reg.datum: Apr 2003
Inlägg: 719
md5:ar man utan salt krävs det endast att hitta en dublett för att logga in (jmf att använda salt då exakt lösenord måste hittas). Se vad zoran skrev, även om det kanske är smart att använda något mer än bara användarnamn som salt. För övrigt föredrar jag nog sha1.
__________________
www.ip2nation.com (ip till land)
Per är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-03-29, 08:59 #9
zorans avatar
zoran zoran är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2004
Inlägg: 598
zoran zoran är inte uppkopplad
Mycket flitig postare
zorans avatar
 
Reg.datum: Jun 2004
Inlägg: 598
Citat:
Originally posted by Per@Mar 29 2006, 08:42
md5:ar man utan salt krävs det endast att hitta en dublett för att logga in (jmf att använda salt då exakt lösenord måste hittas). Se vad zoran skrev, även om det kanske är smart att använda något mer än bara användarnamn som salt. För övrigt föredrar jag nog sha1.
Nja, du missupfattade nog mig lite. Jag använder inte användarnamn som salt. När lösenordet skapas, (eller lagras första gången), används 2 random-bokstäver som salt. Däremot när jag ska verifiera lösenordet, måste jag kryptera det lösenordet som jag ska verifiera. För att krypteringen ska ge samma resultat, måste jag använda det krypterade lösenordet som salt (eller rättare sagt de två första bokstäverna).
zoran är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-03-30, 15:52 #10
freakaliss avatar
freakalis freakalis är inte uppkopplad
Medlem
 
Reg.datum: Oct 2004
Inlägg: 224
freakalis freakalis är inte uppkopplad
Medlem
freakaliss avatar
 
Reg.datum: Oct 2004
Inlägg: 224
Citat:
Originally posted by kullervo@Mar 28 2006, 13:00

Använder folk PHP's inbyggda session-hanterare till seriösa sajter? Det var länge sen jag ens tänkte på att det faktiskt finns en inbyggd i PHP. Den var kass för 4 år sedan (då jag senast hade med den att göra). Koda en egen istället. Det blir enklare i längden, ger mycket bättre prestanda, är mycket säkrare (om man har koll på bitarna) och är inte skadlig för hårddiskarna.
Jag är lite nyfiken hur skriver man sin egna sessionshanterare?
freakalis ä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 07:21.

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