Jag har en applikation med en inloggningsfunktion, där anv.namn och lösen anges i två inputfält och sedan skickas vidare till en servlet (för att kontrollera om användaren är behörig). Är användaren behörig skickas han/hon vidare till en annan sida. En sessionsvariabel sätts också, för att hålla reda på användaren.
När användaren sedan loggar ut, tas sessionsvariabeln bort och användaren skickas till startsidan igen.
Nu till mitt problem: Använder man "Bakåt-knappen" kan man gå bakåt till sidan som besökaren först kommer till, efter inloggning. Då dyker följande text upp:
Varning! Sidan gäller inte längre. Sidan som du begärde skapades med hjälp av informationen i ett formulär som du skickade. Den här sidan finns inte längre tillgänglig. Som en säkerhetsåtgärd kommer informationen inte automatiskt att skickas igen.
Om du vill skicka informationen igen och visa den här webbsidan klickar du på knappen Uppdatera.
Klickar man på uppdatera, så verkar anv.namn och lösen skickas till servleten igen och användaren loggas in! Inte speciellt säkert m.a.o. :(
Finns det något sätt att undvika detta? Jag vill ju inte att man skall kunna logga in igen, bara genom att använda bakåtknappen!
Tacksam för all hjälp!
JaarMedlem sedan juli 2001434 inlägg Eftersom det du gör när du går "bakåt" i din webläsare är att ställa exakt samma request en gång till (med parametrar och allt) så är det lite lurigt.
Det du kan göra för att säkra upp lite är följande:
På sidan där man skriver lösenordet. Sätt en sessionsvariabel (mayLogin) till true. Kolla sedan om denna är satt i servleten. Är den inte det, skicka användaren tillbaka (då denna inte kom från den sidan). Logga sedan in användaren och sätt mayLogin variabeln till false
Eftersom sessionen INTE skickas med så kommer nu back inte att fungera för att logga in. Dock kan man ju läsa av innehållet i requesten lokalt, ta ut lösenordet och på så vis logga in igen, men då har du helt plötsligt lite mer avancerade användare.
För "säkerheten" ovan MÅSTE man dock logga in via ditt formulär, eller en sida på servern som sätter sessionsvariabeln till true innan man loggar in.
Hmmm... Det där lät ju faktiskt som en bra idé! Tror att jag skall bygga vidare på det... :)
Näää.... det funkar ju inte!
Grejen är ju den att användaren hamnar på sidan för inloggning (d.v.s. startsidan), när han/hon blir utloggad.
Det som då händer är att sessionsvariabeln (mayLogin) sätts till true. När användaren sedan trycker på Tillbaka-knappen och kommer till det ställe där han/hon uppmanas att uppdatera sidan, så är ju variabeln redan satt till true och inloggningen kan ske ändå.
Skit också!!! :)
Finns det inte någon som har löst detta på något bra sätt??
HJÄÄÄÄLP!!
JaarMedlem sedan juli 2001434 inlägg Hmm, det har du rätt i... :)
Du kan ju göra på ett annat sätt också...
Lägg till ett "hidden" field på inloggningen med ett datum/tid fält. Om X antal sekunder förflutit så får man inte logga in.
Ok, det är ju faktiskt en möjlighet!
Jag hade en annan tanke också. Går det inte helt enkelt att få bort förekomsten av "Uppdatera"-sidan?
Det skulle vara den snyggaste lösningen, men det kanske inte ens är möjligt?
Åhhhh... vad jag hatar att köra fast på en sådan här skitgrej!! :)
JaarMedlem sedan juli 2001434 inlägg det ända sättet att få bort uppdatera sidan är att ha kontroller... går inte att inaktivera det hos klienten... eftersom det är klientprogramvaran som skickar en http request, kan du som server aldrig bestämma vem eller vad som skickar vad.. man kan ju skicka det från telnet t.ex.
En reload skulle då betyda att du skickade samma sak 2 ggr.
Ok!
Jag får klura lite på detta! Tack förhjälpen iallafall! :)
LimeMedlem sedan sep. 2001961 inlägg Om det handlar om JSP, vilket jag hoppas det gör, så kan du ta en titt på Realms i TomCat och Apache...
/Lime
Jag byggde vidare på Jaar´s förslag och löste problemet!!
På inloggningssidan skickade jag med användarens sessionsid tillsammmans med login och lösen.
När användaren sedan loggade ut, förstörde jag sessionen. På så sätt får användaren automatiskt ett nytt sessionsid. I själva inloggningsfunktionen (som tar emot sessionsid, login och lösen)jämförde jag det sessionsid som skickats med loginformuläret med användarens aktuella sessionsid. Om det inte överensstämmde så skickade jag användaren till en error-sida istället.
På så sätt kan man inte använda bakåtknappen och använda data i ett gammalt request (eftersom sessionsid:t inte längre överensstämmer med det nya)
Hahaha.... Där fick jag allt till det!! :)