Sessions går inte att ändra enkelt eftersom det ligger på servern.
Get, post och cookies ligger på klienten, så det går per definition att ändra av användaren. Det är konstruerat så.
Att göra så att informationen inte går att ändra går inte. Däremot kan man göra så att man upptäcker om informationen har ändrats, och därmed kan skicka tillbaka besökaren.
Då använder man envägskryptering. Envägskryptering är när det är omöjligt att få fram vad som krypterades. Det är mycket användbart i det här fallet och man gör så här:
Du tar all information, lägger till ett lösenord som finns på servern och så krypterar du resultatet och skickar den krypterade strängen tillsammans med informationen.
När informationen kommer tillbaka tar du den, lägger till ditt lösenord du har på servern, krypterar och jämför med den krypterade strängen. Är det samma så vet du att informationen inte har ändrats.
För besökaren kan ju inte skapa en ny krypterad sträng eftersom han/hon inte har lösenordet som finns på din server. Så ändrar han/hon någon information kommer det ju inte att bli samma resultat när du lägger till lösenordet och krypterar.
Utan SSL skickas informationen i klartext, vilket innebär att vem som helst som lägger fingrarna på informationen som skickas kan läsa vad som skickats.
Så man kan kort säga att man alltid skall använda SSL vid inloggning. För om jag förstått det rätt så kan "säkerhetshålet" finnas hos klienten, som då råkar ut för sniffning i nätverket (internetleverantören).
Men jag ställer mig trots allt frågan hur stort problem detta egentligen är, sedan är kanske frågan vad som är viktig information?
Jag som trodde det skulle räcka med lite systemsalt, lösen och id..........
Läste även detta på swesecure.com: kommer tiden alltid ikapp eftersom ett hashvärde alltid går att generera, det är bara en fråga om tid.
Usch, alla dessa hååål!!!
Sammanfattnings fråga,
- Man skall kontrollera det som matas in och ta bort EJ välkomna tecken.
- Man hachar lösenordet, med lite system å salt
- Skickar informationen med SSL
- Man kontrollerar antal inloggningsförsök under en viss tidsperiod och om t ex fler än 5 så IP-block.
Har suttit och försökt får rätt på lite inloggning:
Någon som har några synpunkter eller har lust att komma med lite ideér?
Just nu hämtas användaren från databasen och kontrolleras mot lösenord. Skall även lägga till loggning av felaktiga försök och blocka dem. Men finns det någon ide att skicka en cookie till klienten? Eller skall man bara lägga in informationen i databas?
<%
'Lägga till Pattern så att man kan kontrollera att username och password ej innehåller ogiltliga tecken.
Function CheckAdmin(byVal str)
set objRegExp = new regexp
objRegExp.ignorecase = true
objRegExp.pattern = "[^a-z0-9åäöÅÄÖ\?\=\#\$\!\@\.\, ]"
if objRegExp.test(str) then
'str innehåller otillåtna tecken
'stop, registrera och lägg till cookie med felaktigt försök.
CheckAdmin = "error"
' Skapar cookie samt registrerar händelsen.
Call ErrorBadInput
else
CheckAdmin = str
end if
End function
Sub Checklogin
if Request.Form("username") = "" OR Request.Form("password") = "" then : Response.Redirect "login.asp" : End if
sUsername = CheckAdmin(Trim(Request("username")))
sPassword = CheckAdmin(Trim(Request("password")))
If NOT sPassword = "error" AND NOT sUsername = "error" THEN
If sUsername <> "" OR sPassword <> "" then
Dim cmd
Set cmd = server.createobject("adodb.command")
cmd.activeConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("../../#site_ibc.mdb")&";"
Dim SQL
SQL = "SELECT ID, anv, pass, r_prop FROM tbl_users WHERE (anv=?)"
cmd.CommandText = SQL
Dim rs
Dim lngID
Dim strState
SET rs = cmd.Execute (, array(sUsername))
If Not rs.EOF Then
sID = rs("id")
sPassDb = rs("pass")
sPropDb = rs("r_prop")
end if
systemsalt= "Dgv8l0LCTm7mIJhRClE9zZFqMCXsr0B8QqjSdLVgXAEyc5fr4"
sMD5Password = MD5(systemsalt & sPassword & sID)
sUserSuppliedPassw = sPassword 'användarens inmatade lösenord
sHashedPasswFromDb = sPassDb 'det hashade lösenordet från databasen
sUserHashedSuppliedPassw = MD5(systemsalt & sUserSuppliedPassw & sID) 'hasha lösenordet
If sHashedPasswFromDb = sUserHashedSuppliedPassw Then
' Lösenordet är rätt, åtgärd för det.
Session("anv")=rs("anv")
Session("connected")=1
Session("lvl")=1
Session("id")=rs("id")
datum = now
strProp = rs("r_prop")
action = "<b>" & Session("anv") & " (" & strProp & ")</b> loggade in"
ip = Request.ServerVariables("REMOTE_ADDR")
Response.redirect "main.asp"
Else
' Lösenordet är fel, åtgärd för det.
datum = now
ip = Request.ServerVariables("REMOTE_ADDR")
Session("fel")="Tyvärr var användarnamnet eller lösenordet felaktigt, vargod försök igen."
Session("error") = Session("error")+1
Response.redirect "login.asp"
End if
End if
End if
End Sub
Sub ErrorBadInput
Session("fel")="Ni har matat in otillåtna tecken, händelsen rapporteras och upprepningar leder till avstängning. "
Session("error") = Session("error")+1
Response.redirect "login.asp"
End Sub
call Checklogin
%>
Kom på en liten fråga till, om man kan kapa en session. Måste man inte då alltid öppna en databas i början av varje sidan som man skall besöka?
Har läst och försökt få en tråd i detta, men kommer lite kort.
[behörighet] [hemligt tal/salt] [id] som jag sedan hashar, lägger det hashade resultatet i en session som skickas vidare till "nästa sida".
Där öppnas databasen mot anv och lösen, kontrollerar sedan behörigheten och hämtar hemligt tal samt id för att hasha för kontroll av värde från föregående sida.
Tänkte först att det skulle räcka med att skicka [id] som session, men då kan man väl snappa upp det och använda det?
Antar att det enkla svaret är SSL, men då måste man väl köra det på samtliga inloggningssidor, alltså i på samtliga admin sidor och inte bara då man skickar formulär?
Lägger till en länk så det går att testa också, hur det ser ut hittills:
Sessionsvariabler skickas aldrig någonstans, så de kan inte snappas upp. Det enda som skickas är sessions-ID:t och det som menas med att kapa en session är att man får tag i det id:t.
Jaha, jag övergår till att se det som tyst acceptans och summerar följande:
Koden i början av tråden är med hjälp av SSL troligen så säker som den kan bli, enda tydliga problemet är att just cookies som kan vara avstängda i webbläsaren och besökaren då inte kan logga in. Alternativet för att lösa detta är att skicka "hidden" som då hämtar ut önskad information från databas eller kanske även array. För att sedan kontrolleras om ny databas öppning eller mot sparad array på varje adminsida.
Vill tacka alla för svaren som jag fått i tråden, det har hjälpt mig att söka efter "rätt" information.
136 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe