webForumDet fria alternativet

Ändra data från post, hur skydda sig?

ASPur ASP

9 svar · 475 visningar · startad av ConnyFox

Medlem sedan aug. 20011 087 inlägg
Frågan#1

har hört att man kan ändra information som skickas med post.
Hur går detta till och hur skyddar man sig?

har inget problem med detta själv utan är mest nyfiken.
Get går ju enkelt att ändra men post visste jag faktiskt inte.

Sen undrar jag om det går att ändra infot i sessions med eller om det e helt säkert.

Medlem sedan juni 20034 013 inlägg
#2

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.

Du kan läsa mer om det här:
http://www.tydal.nu/article/95

Medlem sedan jan. 2003438 inlägg
#3

Jag passar på att halka in på ett bananskal :)

Har suttit med inloggning ikväll och sökt bland trådar å läst massa olika saker, kom fram till följande:

<!--#include file="md5.asp"-->
<%
'sUsername = Trim(Request("Username"))
'sPassword = Trim(Request("Password"))
systemsalt= "Dgv8l0LCTm7mIJhRClE9zZFqMCXsr0B8QqjSdLVgXAEyc5fr4"
sPassword = "123"
sID = "1"

sMD5Password = MD5(systemsalt & sPassword & sID)

Response.Write sMD5Password
%>

Men vad jag då blir lite fundersam över är ett inlägg från Erik Juhlin

http://www.webforum.nu/showthread.php?s=&postid=756623#post756623

Där han på slutet säger:
SSL är viktigt vid inloggningsformulär.

Varför undrar jag då, det måste ju bero på POST och att du skickar informationen "osäkert". Eller?

Skrik gärna till om jag är helt ute och reser......

Medlem sedan juni 20008 205 inlägg
#4

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.

Medlem sedan jan. 2003438 inlägg
#5

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.

Något annat?

Medlem sedan jan. 2003438 inlägg
#6

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
%>
Medlem sedan jan. 2003438 inlägg
#7

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:

http://www.supporterklubben.se/admin/login.asp

Anv/lösen: admin

Medlem sedan juni 20034 013 inlägg
#8

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.

Medlem sedan jan. 2003438 inlägg
#9

Tack för ditt svar.

Ok. Men om man kan få tag i sessions id, kan två användare vara inne samtidigt med samma id?

Annars räcker det väl att köra typ en kontroll av sessionsvariablerna då, typ:

If not Session("Auth") = "Y" Then : Response.redirect "login.asp" : End if

För endast den som har gjort login rätt har en sessionsvariabel skapad, eller fel?

Ytterst tacksam för tålamod och svar uppskattas, har något svårt att få ihop "hjärnverksamheten".....

Någon som ser direkta fel eller problem för övrigt?

Medlem sedan jan. 2003438 inlägg
#10

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
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)