MD5
De link ziet er zo uit: http://www.test.nl/overzicht.php?offerte_id=7748
Ik wil graag het offertenummer coderen, omdat via de URL balk alle offertes bekeken kunnen worden. Ik heb geprobeerd dit op te lossen met md5
Code (php)
Het probleem is dat de gegevens ook weer gedecodeerd moeten worden (voor een detailpagina), wat volgens diverse fora (bijna) niet mogelijk is. Het gebruiken van een POST lijkt mij niet handig(?)
Heeft iemand een idee hoe ik dit (op een andere manier) kan oplossen?!
Gewijzigd op 01/01/1970 01:00:00 door Marco
base64_encode() en base64_decode()
Blanche: Bedankt voor je zeer snelle reactie. Het is geregeld.
Blanche schreef op 11.06.2007 16:11:
base64_encode() en base64_decode()
Errrrrg onveilig... =/
Of je maakt dat je moet inloggen voor offertes (lijkt mij niet een handige oplossing), of je maakt bij al je offertes nog een extra entry in de tabel met een hash van time() of uniqid(). Middels die kan je de offerte dan opvragen. Zo'n hash is vrij lang, en zo goed als onmogelijk te raden voor mensen. Dat moet puur op de gok.
wat is er mis met post, of wat vindt jij er omhandig aan..
Dat je geen gewone links naar kan maken.
Een hash methode heeft als doel voor een willekeurige input een unieke hash aan te maken ZONDER dat van deze hash de originele input kan afgeleid worden.
Een hash kan dus per definitie niet un-hashed worden.
De functie md5 zou hetzelfde resultaat moeten leveren in zowel PHP als MySQL.
Voor alle zekerheid gebruik ik de md5 methode in MySQL voor zowel het genereren van de link als het ophalen van de informatie op de detailpagina
Omdat MD5 onbetrouwbaar is bij kleine inputs (in lengte dan) gebruik je best wat 'zout' (salt). Ipv gewoon het offertenummer te hashen doe je het met het nummer + extra informatie. In dit geval gebruik ik een nummer als salt omdat dit makkelijker te verwerken is in de SQL-statements.
*Opm*
Het zout moet gelijk blijven op beide pagina's (aanmakende en verwerkende)!
Zout aanmaken (gelijk in beide scripts!)
Data ophalen om de links aan te maken:
Code (php)
1
2
3
4
2
3
4
<?
$query = "SELECT md5(id * $hash_salt), ander_veld FROM offertes;
-- $result->['id'] bevat de hash";
?>
$query = "SELECT md5(id * $hash_salt), ander_veld FROM offertes;
-- $result->['id'] bevat de hash";
?>
Data ophalen in de detailpagina:
Code (php)
1
2
3
2
3
<?
$query = "SELECT * FROM offertes WHERE md5(id * $hash_salt)='{$_REQUEST['offerte_id']}';";
?>
$query = "SELECT * FROM offertes WHERE md5(id * $hash_salt)='{$_REQUEST['offerte_id']}';";
?>
Voila, tenzij ik typo's heb gemaakt moet dit relatief waterdicht zijn.
Bovendien kan je $hash_salt afhankelijk maken van de sessie.
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?
session_start();
if (!isset($_SESSION['hash_salt']) || (isset($_SESSION['hash_salt']) && !is_numeric($_SESSION['hash_salt']))) {
// genereer random number, ik doe maar wat...
$_SESSION['hash_salt'] = rand(250, MAX_RAND) * rand(500, MAX_RAND);
}
$hash_salt = $_SESSION['hash_salt'];
?>
session_start();
if (!isset($_SESSION['hash_salt']) || (isset($_SESSION['hash_salt']) && !is_numeric($_SESSION['hash_salt']))) {
// genereer random number, ik doe maar wat...
$_SESSION['hash_salt'] = rand(250, MAX_RAND) * rand(500, MAX_RAND);
}
$hash_salt = $_SESSION['hash_salt'];
?>
Op deze manier zullen de links bij elk bezoek anders zijn en blijft het 'zout' gewoon beschikbaar voor al je scripts.
/EDIT & PS: Ik heb dit ff uit de 'losse' pols geschreven dus beware of typo's!! :D
Gewijzigd op 01/01/1970 01:00:00 door bluecherry
Iedereen bedankt! @bluecherry: bedankt voor je script, ik ga er mee aan de slag!