MD5 voor URL-balk
Dag mensen,
Ik had een vraag omtrend MD5 en je URLbalk. Ik heb bepaalde links gestript met .htaccess zodat ik ipv de variabelen in de URL nu een mappen structuur zie staan zoals:
www.websitenaam.nl/bestandnaam/24
oid.
Dat is al in de richting van wat ik wil, maar kan ik nu een link ipv 24 de hash van de MD5 versie van 24 meegeven? En deze daarna weer uitlezen als 24? Dat je zeg maar zoiets krijgt:
www.websitenaam.nl/bestandnaam/al8ds230sdk23s45ds
Kortom een beetje net als je bijvoorbeeld bij Hotmail endergelijke hebt. Dat je niet ziet wat er staat en dat je het ook niet kan veranderen.
De variabele moet dus op de pagina erna wel weer gebruikt kunnen worden....
Ik had een vraag omtrend MD5 en je URLbalk. Ik heb bepaalde links gestript met .htaccess zodat ik ipv de variabelen in de URL nu een mappen structuur zie staan zoals:
www.websitenaam.nl/bestandnaam/24
oid.
Dat is al in de richting van wat ik wil, maar kan ik nu een link ipv 24 de hash van de MD5 versie van 24 meegeven? En deze daarna weer uitlezen als 24? Dat je zeg maar zoiets krijgt:
www.websitenaam.nl/bestandnaam/al8ds230sdk23s45ds
Kortom een beetje net als je bijvoorbeeld bij Hotmail endergelijke hebt. Dat je niet ziet wat er staat en dat je het ook niet kan veranderen.
De variabele moet dus op de pagina erna wel weer gebruikt kunnen worden....
Gewijzigd op 01/01/1970 01:00:00 door Bram
Even voor de opheldering voor het gestript was zag het er dus bijvoorbeeld zo uit:
www.websitenaam.nl/bestandnaam.php?id=24
www.websitenaam.nl/bestandnaam.php?id=24
MD5 is nooit om te rekenen.
Als je iets in MD5 omzet weet je niet meer wat er stond.
Gebruik BASE64
Als je iets in MD5 omzet weet je niet meer wat er stond.
Gebruik BASE64
Webmakerij:
MD5 is nooit om te rekenen.
Als je iets in MD5 omzet weet je niet meer wat er stond.
Gebruik BASE64
Als je iets in MD5 omzet weet je niet meer wat er stond.
Gebruik BASE64
Dat is niet helemaal waar, als je even de tijd hebt is het te kraken, maar vanaf 8 caracters schijnt het onmogelijk te worden...
Edit:
Gewijzigd op 01/01/1970 01:00:00 door niek s
Hmm, dat BASE64 is wel handig maar omdat ik maar lage cijfers heb krijg je ook maar korte codes. bij MD5 is dit altijd even lang. Maar is het trouwens ook geen probleem dat MD5 eigenlijk gelijk is aan verschillende uitkomsten? Waardoor het systeem eigenlijk niks kan met MD5.
Ik check namelijk die variabel en gebruik deze weer op de volgende pagina voor mijn query.
Ik check namelijk die variabel en gebruik deze weer op de volgende pagina voor mijn query.
misschien een idee om alle pagina's die je hebt in een array ofzo te zetten, bv zo:
En dan laat je een For of while loopje kijken of de md5 code die in de url balk staat, misschien overeen komt met een array waarde?!
(ik zal nu even iets in elkaar flansen, zet het zo wel online)
Code (php)
En dan laat je een For of while loopje kijken of de md5 code die in de url balk staat, misschien overeen komt met een array waarde?!
(ik zal nu even iets in elkaar flansen, zet het zo wel online)
Gewijzigd op 01/01/1970 01:00:00 door niek s
Ok,
Maar is dit trouwens wel gebruikelijk wat ik wil. Want ik zie zoiets soortgelijks op veel sites (zoals hotmail dus) maar ik weet niet wat voor een techniek ze daar toepassen?
Maar is dit trouwens wel gebruikelijk wat ik wil. Want ik zie zoiets soortgelijks op veel sites (zoals hotmail dus) maar ik weet niet wat voor een techniek ze daar toepassen?
@niek
Dat is dan altijd nog bruteforce, en aangezien er meerdere combinaties de zelfde md5 hash als resultaat hebben, weet je dus nog steeds niet zeker het ook resultaat het zelfde is wat er ingestopt is.
Ontoppic:
Ik weet niet wat de bedoeling is?
Maar je kan zoals gezegd base64 encoding gebruiken, het nadeel is dat idereen dit kan decoderen.
Wil je dus iets voor de gebruiker verbergen, dan kan je beter eens naar sessions kijken.
Edit
@ bram
Waarschijnlijk is dat een soort unieke code om jou te identificeren, net zoals het session_id
niek:
Dat is niet helemaal waar, als je even de tijd hebt is het te kraken, maar vanaf 8 caracters schijnt het onmogelijk te worden...
Dat is dan altijd nog bruteforce, en aangezien er meerdere combinaties de zelfde md5 hash als resultaat hebben, weet je dus nog steeds niet zeker het ook resultaat het zelfde is wat er ingestopt is.
Ontoppic:
Ik weet niet wat de bedoeling is?
Maar je kan zoals gezegd base64 encoding gebruiken, het nadeel is dat idereen dit kan decoderen.
Wil je dus iets voor de gebruiker verbergen, dan kan je beter eens naar sessions kijken.
Edit
@ bram
Waarschijnlijk is dat een soort unieke code om jou te identificeren, net zoals het session_id
Gewijzigd op 01/01/1970 01:00:00 door Bo az
Het probleem met sessions is dat ik een aantal variabelen heb in mijn URL welke constant veranderen. Ik klik bijvoorbeeld op pietje en ik krijg dmv het id van pietje zijn gegevens te zien op een andere pagina.
Maar als ik dit soort dingen in een session zou schrijven dan moet ik dat als ik bijvoorbeeld op henk klik overschrijven. En nog belangrijker de session sluiten bij het verlaten van de site.
En als dit wel mogelijk is met sessions, hoe moet ik dit dan verwerken met bijvoorbeeld dit voorbeeld wat ik heb gegeven? Ik kan namelijk alleen dingen vinden met sessions wat over inloggen en dergelijke gaat.
Maar als ik dit soort dingen in een session zou schrijven dan moet ik dat als ik bijvoorbeeld op henk klik overschrijven. En nog belangrijker de session sluiten bij het verlaten van de site.
En als dit wel mogelijk is met sessions, hoe moet ik dit dan verwerken met bijvoorbeeld dit voorbeeld wat ik heb gegeven? Ik kan namelijk alleen dingen vinden met sessions wat over inloggen en dergelijke gaat.
niet iedereen kan het coderen, ik denk dat meer de bedoeling is dat het niet leesbaar is voor de mens, maar als je er klein beetje moeite voor doet dat het dan meteen te zien is? (zoals een BASE64 codering) en anders schrijf je zelf een codering! (wel leuk project opzich, ga ik misschien wel iets mee doen)
Je kan session variabelen zonder problemen overschrijven, ook hoeft de session niet gesloten te zijn bij het verlaten van de site, want deze verdwijt vanzelf (na enige tijd).
Maar, dan ga ik mij toch afvragen waarom het id van pietje verborgen moet brijven?
Maar, dan ga ik mij toch afvragen waarom het id van pietje verborgen moet brijven?
Nou dat is niet noodzakelijk dat dat id verborgen moet zijn, maar een persoon mag bijvoorbeeld niet een twee drie het profiel (met behaalde resultaten) van pietje kunnen bekijken. Voornamelijk alleen pietje zelf. En als pietje iets wil veranderen in de URL dan moet het niet overduidelijk zijn. En moet er FOEI geroepen worden als hij niet op zijn eigen ID met bijbehorende fucnties zit.
offtopic:
Met md5() en sha1() kun je uitstekend vergelijkingen maken. En wanneer je er voor zorgt dat je een salt gebruikt, is het vrijwel onmogelijk te kraken. Voorbeeldje waarbij het id als een md5-string uit de url wordt gehaald. De originele waarde is '1':
Dit mag je zelf gaan versleutelen tot een bruikbaar script.
Quote:
Dat moet je dus juist niet doen. Een algemene foutmelding als 'Er is een fout opgetreden' is vele malen beter. Het zegt de gebruiker namelijk helemaal niets. En dat is precies wat jij een hacker wilt vertellen: Helemaal niets.En moet er FOEI geroepen worden als hij niet op zijn eigen ID met bijbehorende fucnties zit.
Met md5() en sha1() kun je uitstekend vergelijkingen maken. En wanneer je er voor zorgt dat je een salt gebruikt, is het vrijwel onmogelijk te kraken. Voorbeeldje waarbij het id als een md5-string uit de url wordt gehaald. De originele waarde is '1':
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
error_reporting(E_ALL);
// Zet dit in een include die je buiten de webroot houdt:
$salt = 'bedenk maar een Geheime code met !@#$%^&';
// code om de url te maken, staat normaal dus in een ander script
$code = md5($salt.'1');
echo $code.PHP_EOL; // voorbeeldje
// code waar het hier om draait. $salt komt uit de include, de waarde 1 uit bv. een database
if (isset($code) && $code == md5($salt.'1')) {
echo 'waarde is gelijk';
}
else {
echo 'Er is een fout opgetreden'; // heb je echt wat aan...
}
?>
error_reporting(E_ALL);
// Zet dit in een include die je buiten de webroot houdt:
$salt = 'bedenk maar een Geheime code met !@#$%^&';
// code om de url te maken, staat normaal dus in een ander script
$code = md5($salt.'1');
echo $code.PHP_EOL; // voorbeeldje
// code waar het hier om draait. $salt komt uit de include, de waarde 1 uit bv. een database
if (isset($code) && $code == md5($salt.'1')) {
echo 'waarde is gelijk';
}
else {
echo 'Er is een fout opgetreden'; // heb je echt wat aan...
}
?>
Dit mag je zelf gaan versleutelen tot een bruikbaar script.
Ah zo,
Dat van die FOEI was uiteraard een voorbeeld, maar dat snap je zelf denk ik ook wel :P
Verder moet ik daar toch indd goed naar kijken. Maar het is dus voor elkaar te krijgen om via een session alleen de ingelogde gebruiker zijn eigen id pagina te laten zien? En zodra hij het id zou veranderen (in de URL) krijgt hij een foutmelding omdat dit niks met zijn eigen id te maken heeft (ook al zou het ingevulde wel bestaan)?
Dat kan? of niet?
Dat van die FOEI was uiteraard een voorbeeld, maar dat snap je zelf denk ik ook wel :P
Verder moet ik daar toch indd goed naar kijken. Maar het is dus voor elkaar te krijgen om via een session alleen de ingelogde gebruiker zijn eigen id pagina te laten zien? En zodra hij het id zou veranderen (in de URL) krijgt hij een foutmelding omdat dit niks met zijn eigen id te maken heeft (ook al zou het ingevulde wel bestaan)?
Dat kan? of niet?
Wanneer je sessies gebruikt voor het opslaan van het id, dan hoef je dus geen GET (gegevens uit de url) te gebruiken voor het opslaan van het id. Maak een keuze.




