WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   "Kom ihåg mig" - säkraste sättet (https://www.wn.se/forum/showthread.php?t=38651)

BjörnJ 2009-08-22 16:50

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.

SimonP 2009-08-22 16:54

Citat:

Originally posted by tartareandesire@Aug 22 2009, 15:46
Nja, det varierar en hel del. Det blir inte så lyckat att utgå från sig själv och sedan tro att den statistiken gäller =) På en plats man kan ha tre olika IP-nummer på en dag medan man på nästa ställe sitter med ett och samma i flera månader trots att man har dynamiskt IP.
Nja, jag utgår inte bara från mig själv, utan mer generellt, har tillgång till olika 5 olika ISP:er och det är sällan dom byter.

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.

tartareandesire 2009-08-22 16:58

Citat:

Ursprungligen postat av SimonP
Citat:

Ursprungligen postat av tartareandesire
Nja, det varierar en hel del. Det blir inte så lyckat att utgå från sig själv och sedan tro att den statistiken gäller =) På en plats man kan ha tre olika IP-nummer på en dag medan man på nästa ställe sitter med ett och samma i flera månader trots att man har dynamiskt IP.

Nja, jag utgår inte bara från mig själv, utan mer generellt, har tillgång till olika 5 olika ISP:er och det är sällan dom byter.
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.

Jo, men vad jag försökte få fram var att det finns en hel del som har ett nytt IP-nummer i princip varje dag (inte samma som föregående dag alltså).

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.

BjörnJ 2009-08-22 16:58

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.

SimonP 2009-08-22 17:00

Citat:

Originally posted by _Michael_@Aug 22 2009, 15:49
Och det säkraste sättet är dessvärre inte speciellt säkert.

IP är säkrare men fungerar inte för alla.

Så värst mycket mer går inte att göra...

Jo, det är faktiskt mkt säkrare, dom flesta cookie-stealing attackerna skulle förhindras. Det går ej att fejka IP-nr om man ska kunna ha tvåvägs-kommunikation, medans vilken 15-åring som helskt kan fejka en User agent. Men som sagt, det bästa är att undvika "serverside-kom-ihåg-funktioner".

Draqir 2009-08-22 17:02

Citat:

Ursprungligen postat av BjörnJ
Citat:

Ursprungligen postat av Draqir
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.

Hm? En ISP ändrar väl aldrig user agent i HTTP requests som går genom deras nät? Eller? (Om man inte kör via proxy förstås.)

Många ISP proxy clusters orsakar olika User agents strings, eftersom de aggressivt försöker minimera antalet HTTP requests (ganska självklart egentligen). Ett exempel;

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.

BoXon 2009-08-22 17:06

Citat:

Originally posted by BjörnJ@Aug 22 2009, 16:58
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.
Du slog huvudet på spiken! :huh:

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.

_Michael_ 2009-08-22 17:12

Citat:

Originally posted by SimonP@Aug 22 2009, 17:00
Jo, det är faktiskt mkt säkrare, dom flesta cookie-stealing attackerna skulle förhindras. Det går ej att fejka IP-nr om man ska kunna ha tvåvägs-kommunikation, medans vilken 15-åring som helskt kan fejka en User agent. Men som sagt, det bästa är att undvika "serverside-kom-ihåg-funktioner".
Frågan är inte om det är/hur mycket säkrare att matcha mot IP. Det är givetvis enormt mycket säkrare men vad hjälper det om det inte fungerar över huvutaget vissa?

Clarence 2009-08-22 17:13

Citat:

Originally posted by BoXon@Aug 22 2009, 16:06
Ang. detta med dynamisk IP så får jag en ny IP ungefär varje gång som jag startar om datorn.
Fast förmodligen har du samma C- eller iallafall B-klass fortfarande. Därav kan man komma jämföra mot t ex 192.168.xxx.xxx istället för 192.168.0.1 för att få en mer lagom kombination av säkerhet och användarbarhet i det som tidigare diskuterades. Denna funktion finns bland annat i Vbulletin av färdiga programvaror om jag inte minns fel. Speciellt 3g-uppkopplingar ger i min erfarenhet väldigt ofta nya IP-adresser som ligger lite längre ifrån varandra.

Draqir 2009-08-22 17:18

"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 {
  private $created;
  private $userid;
  private $version;
  private $td;
  private $cookie;

  private $cypher  = 'blowfish';
  private $mode    = 'cfb';
  private $key = 'choose a better key';

  private $cookiename = 'USERAUTH';
  private $myversion = '1';
  private $expiration = '600';
  private $warning  = '300';
  private $glue = '|';

 
  public function __construct($userid = false) {
  $this->td = mcrypt_module_open ($this->cypher, '', $this->mode, '');
  if($userid) {
    $this->userid = $userid;
    return;
  }
  else {
    if(array_key_exists($this->cookiename, $_COOKIE)) {
    $buffer = $this->_unpackage($_COOKIE[$this->cookiename]);
    }
    else {
    throw new AuthException("No Cookie");
    }
  }
  }
  public function set() {
  $cookie = $this->_package();
  set_cookie($this->cookiename, $cookie, 0);
  }
  public function logout() {
  set_cookie($this->cookiename);
  }
  public function validate() {
  if(!$this->version || !$this->created || !$this->userid) {
    throw new AuthException("Malformed cookie");
  }
  if ($this->version != $this->myversion) {
    throw new AuthException("Version mismatch");
  }
  if (time() - $this->created > $this->expiration) {
    throw new AuthException("Cookie expired");
  } else if ( time() - $this->created > $this->resettime) {
    $this->set();
  }
  }

  private function _package() {
  $parts = array($this->myversion, time(), $this->userid);
  $cookie = implode($glue, $parts);
  return $this->_encrypt($cookie);
  }
  private function _unpackage($cookie) {
  $buffer = $this->_decrypt($cookie);
  list($this->version, $this->created, $this->userid) = explode($glue, $buffer);
  if($this->version != $this->myversion ||
    !$this->created ||
    !$this->userid)
  {
    throw new AuthException();
  }
  }
  private function _encrypt($plaintext) {
  $iv = mcrypt_create_iv (mcrypt_enc_get_iv_size ($td), MCRYPT_RAND);
  mcrypt_generic_init ($this->td, $this->key, $iv);
  $crypttext = mcrypt_generic ($this->td, $plaintext);
  mcrypt_generic_deinit ($this->td);
  return $iv.$crypttext;
  }
  private function _decrypt($crypttext) {
  $ivsize = mcrypt_get_iv_size($this->td);
  $iv = substr($crypttext, 0, $ivsize);
  $crypttext = substr($crypttext, $ivsize);
  mcrypt_generic_init ($this->td, $this->key, $iv);
  $plaintext = mdecrypt_generic ($this->td, $crypttext);
  mcrypt_generic_deinit ($this->td);
  return $plaintext;
  }
  private function _reissue() {
  $this->created = time();
  }
 }



Alla tider är GMT +2. Klockan är nu 17:39.

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