15. marts 2006 - 10:14Der 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..?
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å.
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.
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
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.
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.
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 :)
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:
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:
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
Synes godt om
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?
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.