Variabelen in de url Hashen oid
Ik stuur bijvoorbeeld een variabele $HOOFDSTUK mee in de url. Deze is bijvoorbeeld 1. Kortom je zit in hoofdstuk 1 en aan de hand van die variabele haald het systeem informatie uit de database.
Maar wanneer ik in de URL de 1 verander in de 5 spring ik zo naar hoofdstuk 5. En dat moet niet de bedoeling zijn. Kan ik dit afschermen? Met bijvoorbeeld een MD5 Hash, of een script wat controleerd of je het hoofdstuk afgerond hebt of niet... ?
Niet mee sturen in de url, gebruik een sessie of POST. En geen GET.
Waarom neem je geen base64_decode() en base64_encode() ? Niet superveilig, maar een gewone gebruiker zal niet weten wat het betekend. Eventjes terugzetten bij het laden van het script, is_numeric() checken ofzoiets en dan uit DB halen :) .
Ik heb overigens na een halve dag zoeken wel een mooi artikel gevonden over dit onderwerp:
http://www.zend.com/zend/spotlight/securevariablepart1.php
http://www.zend.com/zend/spotlight/securevariablepart2.php
http://www.zend.com/zend/spotlight/securevariablepart3.php
Deze komt eigenlijk overeen met mijn vraag ook, kortom een goede link op toekomstige vragen van dit soort.
$HOOFDSTUK = md5($HOOFDSTUK);
Wanneer ik nu $HOOFDSTUK=1 invul in de url dan werkt de pagina niet meer (dat is dus goed). Maar als ik nu $HOOFDSTUK=c4ca4238a0b923820dcc509a6f75849b invul (wat gelijk staat aan de hash van 1) dan werkt de pagina wel maar laat hij hoofdstuk 1 niet zien.
Ik heb ergens ooit gelezen dat een MD5 hash niet persee een unieke waarde is kortom dat 1 en dezelfde hash meerdere dingen kan betekenen. Dat is dus ook misschien de reden van fout. Weet iemand hoe ik het zo kan maken dat de Hash wel uniek is en dus alleen maar "1" zou kunnen betekenen.
Bram:
Want variabele als ww en login schrijf ik weg in een sessie.
Off-topic: Een wachtwoord moet je niet wegschrijven in een sessie! Wachtwoorden zijn bedoeld om een eenmalige check uit te voeren en daarna gebruik je die informatie niet meer...
Maak dan liever een sessie aan als $_SESSION['ingelogd'] == 'true' en een sessie met de user bijvoorbeeld...
on-topic: Met md5 gaat je dat niet lukken. Als je je hoofdstuknummers toch in een gecodeerde vorm in de url wilt hebben kun je beter de al eerder voorgestelde base64 codering gebruiken. Deze is namelijk ook weer te decoderen binnen je script, iets dat md5 niet is.
Kortom, met md5 zul je dus altijd moeten gaan checken of de hash in je url gelijk is aan de hash van een bepaald hoofdstuknummer...
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
De kans dat een MD5-hash niet uniek is was 3,.... ^38 ofzoiets: onbestaande dus eigenlijk ;) !
Oftopic :Wat betreft die inlog sessie. Ik schrijf het ook zo weg met ingelogd == true. Ik formuleerde het alleen verkeerd. Wat ik dus bedoelde is dat ik het inlog systeem wel met een session heb.
De check zoals deze in elke header staat bevat ook een check van je userid (uit de db) als men bijvoorbeeld in de URL dan $USER veranderd, dan krijgt met ook een bericht dat deze persoon niet gemachtigd is om deze pagina te bekijken. Maar dat oftpic dus.
$HOOFDSTUK=1 -> JEhPT0ZEU1RVSz0y
$HOOFDSTUK=2 -> JEhPT0ZEU1RVSz0x
Of is er manier om dit anders te doen? Want op deze manier zie je nog steeds een duidelijk ssyteem. Want ik gok zelf dat $HOOFDSTUK=0 gelijk zal staan aan JEhPT0ZEU1RVSz0w.
Gewijzigd op 01/01/1970 01:00:00 door Bram
Volgens mij niet hoor, maar de gemiddelde gebruiker zal er toch nooit iets van snappen / het kunnen aanpassen. Anders moet je het via een sessie doen ;) !
je hash zegt dat je zeurt :)
Ik vind dat met die sessies knap lastig, ik ben blij dat mijn login systeem eindelijk staat (en werkt naar behoren, kortom supersysteem dat wel). Maar dat is het (object?) wegschrijven van een sessie eenmalig. Is het makkelijk te doen om datzelfde object steeds aan te passen? Zegmaar iedere keer als je tussen paginas schakeld?
wes:
JEhPT0ZEU1RVSz0x
je hash zegt dat je zeurt :)
je hash zegt dat je zeurt :)
Haha :) lekker dan! :P
Moet je dat met session_register doen oid? en dan je class met variabelen registreren in je object naam ofzo?
Je variabele blijft dan behouden tot het einde van de sessie ;) .