Kom ihåg mig?
Home Menu

Menu


Bästa sätt att identifiera sig över ett HTTP GET anrop?

 
Ämnesverktyg Visningsalternativ
Oläst 2009-08-30, 17:39 #11
crazzys avatar
crazzy crazzy är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Aug 2007
Inlägg: 1 089
crazzy crazzy är inte uppkopplad
Har WN som tidsfördriv
crazzys avatar
 
Reg.datum: Aug 2007
Inlägg: 1 089
Citat:
Ursprungligen postat av RickardP Visa inlägg
Jo HTTPS fattade jag men det där med användarnamn och lösenord?
Det skickas som en helt vanlig http auth.
Här står det lite om auth: http://httpd.apache.org/docs/2.0/howto/htaccess.html

edit: Och här står lite om att använda php till authen: http://us3.php.net/manual/en/features.http-auth.php
crazzy är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-08-30, 20:00 #12
Onkelborg Onkelborg är inte uppkopplad
Flitig postare
 
Reg.datum: Feb 2007
Inlägg: 382
Onkelborg Onkelborg är inte uppkopplad
Flitig postare
 
Reg.datum: Feb 2007
Inlägg: 382
Om man sätter kravet GET så är det crazzy säger säkrast, eller i alla fall någonting som går i någon header, att sätta en cookie skulle säkert fungera lika bra det med. Det som är viktigt att tänka på är att allt som följer med i url:en kan loggas, t.ex. på webbservern, en proxy, någon mystisk brandvägg etc. Beroende på config med certifikat etc. så ger inte ssl något skydd mot sådan loggning. (POST klarar sig bättre där..)
Onkelborg är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-08-30, 20:18 #13
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
Det är bättre att använda engångsnycklar, ett exempel:
Klienten skickar UserID + hashsumman SHA1(hemlignyckel+salt) , servern läser UserID och verifierar sen hashsumman på samma sätt. Den hemliga nyckeln behöver då aldrig skickas över nätet. Saltet kan bestå av dagens datum. Om nån avlyssnar får dom bara en kod som fungerar en kort tid.
SimonP är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-08-31, 02:25 #14
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
Det som Jine skickade först är HTTP AUTH, och lägger sig under "$_SERVER" i PHP, tror det är HTTP_AUTH_USER & HTTP_AUTH_PASS. Men det skickas i klartext här med.

Det bästa är nog att skicka ut User, Pass + unikt SALT och kräva att det saltas med tex. datumet.

Tex. sha1(USERNAME + SALT + DATUM + PASS)

att blanda in HTTPS här är nog bara overkill.
Jonas är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-08-31, 02:50 #15
Jines avatar
Jine Jine är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Feb 2005
Inlägg: 1 032
Jine Jine är inte uppkopplad
Har WN som tidsfördriv
Jines avatar
 
Reg.datum: Feb 2005
Inlägg: 1 032
Nej, det skickas inte i klartext om HTTPS är inblandat?
Precis det som var poängen.
Jine är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-08-31, 12:31 #16
Onkelborg Onkelborg är inte uppkopplad
Flitig postare
 
Reg.datum: Feb 2007
Inlägg: 382
Onkelborg Onkelborg är inte uppkopplad
Flitig postare
 
Reg.datum: Feb 2007
Inlägg: 382
Säkrast för GET är:
* HTTPS
* HTTP Auth/Cookie/etc med någon "apinyckel" skiljd från inloggningsuppgifter (vid ev. intrång på klient-sidan så är det bara api:t man kommer åt, man kommer inte längre)
* Ingenting i URL:en eftersom att det troligtvis fastnar i någon rolig logg någonstans, vilket minskar säkerheten lite eftersom att nyckel/inloggningsuppgifter fastnar där "permanent". Förslagsvis är nyckeln hashad i databasen så ev. läsning i databasen ger ingen nyckel. Men om man även kan få tag på loggen så..
Onkelborg är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-08-31, 14:46 #17
BjörnJ BjörnJ är inte uppkopplad
Mycket flitig postare
 
Reg.datum: May 2009
Inlägg: 971
BjörnJ BjörnJ är inte uppkopplad
Mycket flitig postare
 
Reg.datum: May 2009
Inlägg: 971
Citat:
Ursprungligen postat av Onkelborg Visa inlägg
Förslagsvis är nyckeln hashad i databasen så ev. läsning i databasen ger ingen nyckel.
Om man vill skicka nyckeln hashad (t.ex. sha1(datum + nyckel)) måste man väl spara den i klartext på serversidan. Finns det några bra sätt att skydda nyckeln på serversidan? Det går ju att få lite extra skydd genom att spara den krypterad i databasen och ha en statisk nyckel i skriptet, men frågan är om det är värt besväret.

I det här fallet bör man nog skapa en nyckel automatiskt, och inte låta användaren ändra nyckel på annat sätt än att skapa en ny slumpmässig nyckel. Detta för att dels få en stark nyckel, och dels för att skydda användaren; det är inte möjligt att ange en nyckel (som sparas i klartext hos både klienten och servern) som användaren använder på något annat ställe. Denna nyckel används enbart för api. För vanlig inloggning används ett annat lösenord på vanligt sätt.

Om man använder datum som salt, tänk på att klienten och servern ska ange datumet enligt samma tidszon.

Vad sägs om en lösning i stil med följande?
$salt=round(timestamp/100);
User-id samt sha1($salt + nyckel) skickas som http auth.

Det kräver att klockorna på båda sidor går någorlunda rätt. För ökad säkerhet, dela med 10 istället om man är säker på att klockorna går nästan exakt rätt.

Servern kontrollerar:
$salt=round(timestamp/100);
if($http_pass==sha1($salt + nyckel) || $http_pass==sha1(($salt+1) + nyckel) || $http_pass==sha1(($salt-1) + nyckel))

Alternativ:
Använd hela timestamp som salt. Skicka med även salt i requesten (tillsammans med user-id och hash). Servern kontrollerar att salt inte skiljer sig för mycket från aktuell timestamp.
BjörnJ är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-08-31, 14:59 #18
iXam iXam är inte uppkopplad
Medlem
 
Reg.datum: Aug 2005
Inlägg: 219
iXam iXam är inte uppkopplad
Medlem
 
Reg.datum: Aug 2005
Inlägg: 219
Krypterad nyckel / hash som dels är baserad på användarens tillåtna IP/IP-range och lösen + salt.
Då kan nyckeln komma på vift utan att den kan användas. Sen kan man även langa in en datumrestricter så nyckeln enbart fungerar i X-antal dagar.
iXam är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-08-31, 16:14 #19
RickardPs avatar
RickardP RickardP är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2004
Inlägg: 515
RickardP RickardP är inte uppkopplad
Mycket flitig postare
RickardPs avatar
 
Reg.datum: Jun 2004
Inlägg: 515
Stort tack för alla förslag, fortsätt gärna, bra för andra också.

Jag ska fundera över vad som blir bäst för detta.
RickardP är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-08-31, 21:46 #20
Onkelborg Onkelborg är inte uppkopplad
Flitig postare
 
Reg.datum: Feb 2007
Inlägg: 382
Onkelborg Onkelborg är inte uppkopplad
Flitig postare
 
Reg.datum: Feb 2007
Inlägg: 382
Citat:
Ursprungligen postat av BjörnJ Visa inlägg
Om man vill skicka nyckeln hashad (t.ex. sha1(datum + nyckel)) måste man väl spara den i klartext på serversidan. Finns det några bra sätt att skydda nyckeln på serversidan? Det går ju att få lite extra skydd genom att spara den krypterad i databasen och ha en statisk nyckel i skriptet, men frågan är om det är värt besväret.

I det här fallet bör man nog skapa en nyckel automatiskt, och inte låta användaren ändra nyckel på annat sätt än att skapa en ny slumpmässig nyckel. Detta för att dels få en stark nyckel, och dels för att skydda användaren; det är inte möjligt att ange en nyckel (som sparas i klartext hos både klienten och servern) som användaren använder på något annat ställe. Denna nyckel används enbart för api. För vanlig inloggning används ett annat lösenord på vanligt sätt.

Om man använder datum som salt, tänk på att klienten och servern ska ange datumet enligt samma tidszon.

Vad sägs om en lösning i stil med följande?
$salt=round(timestamp/100);
User-id samt sha1($salt + nyckel) skickas som http auth.

Det kräver att klockorna på båda sidor går någorlunda rätt. För ökad säkerhet, dela med 10 istället om man är säker på att klockorna går nästan exakt rätt.

Servern kontrollerar:
$salt=round(timestamp/100);
if($http_pass==sha1($salt + nyckel) || $http_pass==sha1(($salt+1) + nyckel) || $http_pass==sha1(($salt-1) + nyckel))

Alternativ:
Använd hela timestamp som salt. Skicka med även salt i requesten (tillsammans med user-id och hash). Servern kontrollerar att salt inte skiljer sig för mycket från aktuell timestamp.
Mja, alltså, det är något sådant jag tänker. Nyckeln ska vara slumpmässig, skulle användaren tappa bort sin nyckel så genererar man bara en ny. Nyckeln bör vara sparad hashad på servern.

Att börja greja med datum och hasha en nyckel känns overkill, man kommer fortfarande inte ifrån problemet med att nyckeln finns fullt läsbar i klienten. Om man skyddar själva överföringen mellan klient och server med SSL så fyller ett sådant hash ingen funktion.

Däremot, om man inte nyttjar SSL så kan det finnas en poäng med hashad nyckel. Det skyddar dock bara mot framtida attacker, en attack som man-in-the-middle är dock fortfarande utsatt - bara att ändra innehållet on-the-fly. (Även om det går att skaffa sig skydd där också: signera all data som skickas över med nyckel + datum, kontrollera på servern..)

Personligen så tror jag dock att det inte är så realistiskt att man kan räkna med att klockorna går särskilt rätt i båda ändarna..

Kan man köra med SSL så fixar man många problem
Onkelborg ä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 03:58.

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