Avatar billede Slettet bruger
15. marts 2006 - 10:14 Der er 18 kommentarer og
1 løsning

parameteroverfør uden at bruger kan ændre via querystring

jeg har en variabel

id = request.querystring("id")

som senere bliver brugt til at holde styr på et id ved indsættelse i database. Hvordan kan jeg sikre mig, at variablen (som jo er initieret ved selvsamme querystring) ikke kan ændres til noget vilkårligt men faktisk altid ER det, den burde være - nemlig det, den oprindelig var, hvis man havde klikket på linket..?
Avatar billede fennec Nybegynder
15. marts 2006 - 10:22 #1
Det kan du ikke...
Men du kan lave lidt sikkerhed, ved at sende en eller anden hash kode af værdien med også, også tjekke om ID'et passer sammen med hash koden. Så skal brugeren gætte hash koden også.
Avatar billede dj_uncas Nybegynder
15. marts 2006 - 10:24 #2
Du kan bruge POST, f.eks. ved at have et hidden input felt på den foregående side med værdien i, eller du kan bruge sessions.

Sessions er nok lidt meget i denne situation, men hvis du vælger det alligevel skal du huske at lukke den session der holdt værdien så hurtigt som muligt.
Avatar billede Slettet bruger
15. marts 2006 - 10:37 #3
det var smart fennec - det prøver jeg :)
Avatar billede fennec Nybegynder
15. marts 2006 - 10:44 #4
Her vil du nok med fordel kunne kikke på md5 og sha1, som er metoder til at kryptere/hashe med.
Avatar billede Slettet bruger
15. marts 2006 - 10:48 #5
Jeg havde engang en md5 til asp men kan ikke huske hvor.. Der er, så vidt jeg ved, ingen indbygget.

En anden ting, prøv lige at uddyb hvad du mener - jeg tror jeg troede at jeg forstod lidt for hurtigt :)
Avatar billede fennec Nybegynder
15. marts 2006 - 10:57 #6
Det jeg ville gøre når jeg opbygger linket er dette:
link = "tilDenneSide.asp?id="& ID &"&hash="& server.URLEncode(md5(ID))

Det skulle gerne give et link ala:
tilDenneSide.asp?id=123&hash=DG344DFG453VBFGB23543VD332

på den side laver du så et tjek mod ID og hash:
if md5(ID) = request.querystring("hash") then
  'OK
else
  'ID'et er rettet.
end if

Som ekstra sikkerhed ville jeg evt smide et par bogstaver med når jeg hasher ID'et, da de gode godt kan gætte det er en md5 hash, også selv skabe den ud fra ID'et, men de bogstaver jeg vælger at smide med, kender de ikke:

link = "tilDenneSide.asp?id="& ID &"&hash="& server.URLEncode(md5("Fennec"& ID &"sikkerhed"))

if md5("Fennec"& request.querystring("id") &"sikkerhed") = request.querystring("hash") then
Avatar billede fennec Nybegynder
15. marts 2006 - 10:58 #7
Manglede lige en querystring kode i første IF-sætning :o)

if md5(request.querystring("ID")) = request.querystring("hash") then
  'OK
else
  'ID'et er rettet.
end if
Avatar billede erikjacobsen Ekspert
15. marts 2006 - 11:03 #8
det vil være meget nemt at gætte at den md5 er lavet sådan her
link = "tilDenneSide.asp?id="& ID &"&hash="& server.URLEncode(md5(ID))
og så giver det ingen overfor hackere, men kun overfor tilfældige ændringer. Man skal i stedet for "opfinde" en lang, og hemmelig streng, man konkatenerer med værdien, som hackere og slutbrugere ikke kender. Sådan ca.

link = "tilDenneSide.asp?id="& ID &"&hash="& server.URLEncode(md5("Eksperten er bare den bedste" & ID))

eller bare en helt tilfældig og lang tekststreng. Og så skal den også med når man checker igen.
Avatar billede erikjacobsen Ekspert
15. marts 2006 - 11:04 #9
"og så giver det ingen overfor hackere" -> "og så giver det ingen sikkerhed overfor hackere"
Avatar billede fennec Nybegynder
15. marts 2006 - 11:09 #10
erikjacobsen >>
Havde det skam også med i sidste del af min post :o)
Avatar billede dj_uncas Nybegynder
15. marts 2006 - 11:11 #11
er det nemmeste ikke bare at hashe selve id'et?

link = "tilDenneSide.asp?id=" & md5( ID )

og så afkode den på modtager siden. Så kan du tjekke ved indsæt i database om den afkodede værdi giver mening for databasen, og du undgår helt at skulle vise dit ID.
Avatar billede erikjacobsen Ekspert
15. marts 2006 - 11:15 #12
Så langt læste jeg ikke, fennec ;)  Men hellere 2 gange end slet ikke.

Man kan ikke afkode en md5-værdi, dj_uncas.
Avatar billede eagleeye Praktikant
15. marts 2006 - 11:18 #13
Skal man gøre lidt mere kunne det laves i en Querystring variable så man ikke reklamere med ID og hash, selvom det måske er let at se der er ngoel værdier som er faste hvis der er mange link under hinanden :)

"...aps?" & ID & "ABT" & server.URLEncode(md5(ID & "noget hemmeligt tekst" & ID))

Så når du modtager kan du søge efter "ABT" i Request.Querystring og dele strengen og dermed har du id og hash koden.
Avatar billede fennec Nybegynder
15. marts 2006 - 11:29 #14
erikjacobsen >>
Nemlig. Sikkerhed kan ikke gentages for få gange...

eagleeye (og erik) >>
Er der ikke noget med at en md5 hash altid er 32 (eller 64) tegn, for så behøver man jo ikke engang "ABT" koden. Man smider bare ID'et efter hash koden også klipper man alle tegn ud efter hashen:

"...aps?kode=" & server.URLEncode(md5(ID & "noget hemmeligt tekst" & ID)) & ID
Avatar billede eagleeye Praktikant
15. marts 2006 - 11:47 #15
Jo 32 karakter, og man kan splitte den op i to og "gemme" ID'et efter eks 10 karakter, der er mange muligheder for at besværliggøre folk piller i querystringen:

hashcode = server.URLEncode(md5("noget hemmeligt tekst" & ID))
"..link.asp?" & left(hashcode, 10) & id & mid(hashcode,11)
Avatar billede fennec Nybegynder
15. marts 2006 - 12:14 #16
Nu er det ved at ligne noget...

Skal vi lige samle op på det.

Linket bliver opbygget på denne måde:
hashcode = server.URLEncode(md5("noget hemmeligt tekst" & ID))
link = "tilDenneSide.asp?& left(hashcode, 10) & id & mid(hashcode,11)

Og tjekket er så:
dim kode, hash
kode = Request.querystring()
if len(kode) <= 32 then
  ' Forkert længde hash kode
else
  Hash = left(kode,10) & mid(kode,11+len(kode)-32)
  id = mid(kode,11, len(kode)-32)
  if md5("noget hemmeligt tekst"& ID) = Hash then
    'OK
  else
    'ID'et stemmer ikke overens med hashkoden.
  end if
end if
Avatar billede Slettet bruger
15. marts 2006 - 14:12 #17
hold da op - flot arbejde! Jeg siger tak, men md5() er vel stadig ikke en del af ASP?
Avatar billede fennec Nybegynder
15. marts 2006 - 14:27 #18
Nej, men den kan findes på nettet. F.eks her:
http://www.frez.co.uk/freecode.htm#md5
http://www.freevbcode.com/code/md5_asp.zip

Jeg har dog ikke selv set koden heri...
Avatar billede fennec Nybegynder
15. marts 2006 - 14:29 #19
Fandt lige et dansk eks:
http://www.asp-faq.dk/article/?id=52
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester