MD5 over velden in tabel

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Frank

Frank

07/12/2007 15:01:00
Quote Anchor link
Hallo allemaal,

Ik wil het volgende doen: iemand een link sturen zodat hij/zij een pagina met een formulier kan openen om iemand anders een mailtje te sturen. De gegevens van de persoon waar het naar toe moet staan in een MySQL DB.:

voorbeeld usertabel:
ID naam pass email
1 frank test123 [email protected]
2 jan 123test [email protected]

Nu had ik bedacht om een link te sturen die als volgt is opgebouwd:

plak ID en naam ontvanger aan elkaar en haal er een MD5 encryptie overheen: $link=md5(1frank);

De totale link wordt dan: www.website.com?id=7t2gabvdyu327dehb...(de md5 code)

Nu wil ik bij het aanroepen van de link in de database gaan zoeken naar het e-mail adres wat hierbij hoort:

Dus ik wil kijken waar de MD5 van de aan elkaar geplakte velden id en naam hetzelfde is als $_GET['id'].

Ik heb van alles geprobeerd maar krijg het niet voor elkaar. kan het zijn dat dit helemaal niet mag?

Ik heb nu:
$query="SELECT * FROM users WHERE md5(users.ID + users.naam)=\"".$_GET['id']."\"";


Als ik zoiets doe zonder MD5 encryptie werkt het wel.

Iemand een idee?

Vast bedankt,
Frank
Gewijzigd op 01/01/1970 01:00:00 door Frank
 
PHP hulp

PHP hulp

22/12/2024 21:35:31
 
Jacco Engel

Jacco Engel

07/12/2007 15:03:00
Quote Anchor link
Ik weet nite hoe wel maar ik weet denk ik wel waarom niet.

Ik denk dat hij het + teken met encrypt.

Maar kan de plank ook helemaal mis slaan natuurlijk :P
 
Joren de Wit

Joren de Wit

07/12/2007 15:06:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT
    *
FROM
    users
WHERE
    MD5(CONCAT(users.ID, users.naam)) = $$

Waarbij je $$ vervangt door een variabele waarin de code staat.

Dan vraag ik me nog wel af wat er nu eigenlijk mis is met enkel het id van de gebruiker in de url te zetten. Waarom wil je daar speciaal een hele md5 hash in hebben? Je systeem wordt er in ieder geval niet sneller op...
 
Frank

Frank

07/12/2007 15:15:00
Quote Anchor link
WOW, wat een snelle reacties allemaal, en het CONCAT werkt inderdaad. Stom dat ik dat zelf niet heb gevonden maar ik ben maar een self-learned beginnend PHP programmeur!

Waarom ik ID en naam in de hash stop: Anders is het simpel om mensen via het form te spammen. Je MD5'ed gewoon een aantal nummers en je kan altijd wel iemand bereiken via het formulier. Wie is dan wel de vraag en wat je eraan hebt natuurlijk ook maar ik denk laat ik het zekere voor het onzekere nemen. Heb ook nog gedacht om bij het creeren van de gebruikers een extra hash-code in de tabel op te nemen zodat het zoeken sneller gaat maar gezien de grote van de database vond ik dat weer wat overdreven. Dus nu zo opgelost.

Nogmaals bedankt voor jullie reacties en zeker Blanche!

Frank
 
Frank -

Frank -

07/12/2007 15:24:00
Quote Anchor link
Offtopic: Zeg maar gerust 'helaas werkt CONCAT'. In SQL hoor je pipes || te gebruiken om 2 waardes aan elkaar te plakken, ook MySQL kent deze oplossing wel. MySQL heeft er alleen een handje van om alles wat simpel kan en wat standaard SQL is, moeilijk te maken met functies. DATE_ADD(), DATE_SUB(), CONCAT(), allemaal functies die volkomen zinloos en overbodig zijn. Met +, - en || heb je genoeg mogelijkheden in SQL om dezelfde resultaten te bereiken. En dat werkt dan ook in andere, echte, databases.

Voer de volgende queries maar eens in PhpMyAdmin (PMA) uit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
SET SESSION sql_mode = 'ANSI';
SELECT 'MySQL' || ' ' || 'zuigt';


tutorial
 
Kwastie

Kwastie

07/12/2007 16:25:00
Quote Anchor link
Dit kun je ook doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?  
$mail
= range("a", "z");     //De letters a-z in een array
shuffle($mail);     //met shuffle kun je een array mixen
$mail = implode($mail);    //array samenvoegen
$mail = md5($mail); //eventueel hashen zodat er een gelijk soort code uitkomt
[/code]
deze code in de database doen, en deze te controleren via mail. Zodat de gebruiker deze code niet na kan maken.
Gewijzigd op 01/01/1970 01:00:00 door Kwastie
 
Joren de Wit

Joren de Wit

07/12/2007 16:27:00
Quote Anchor link
Ja? En dan?

Dan heb je een md5 hash van een random string van 26 tekens. Hoe kun je hier later nu ooit weer een id, naam of email adres uit de database aan koppelen?

ps. Bovendien werkt het niet omdat implode() twee parameters nodig heeft...
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
 
Kwastie

Kwastie

07/12/2007 16:37:00
Quote Anchor link
Wel raar hij doet het gewoon :) je zou 'officeel' dit moeten doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$mail
= implode("", $mail);
?>


Het verschil is dat zijn script is dat hij geen veld heeft aangemaakt in de database, maar zijn code is nate maken, dus te faken
Gewijzigd op 01/01/1970 01:00:00 door Kwastie
 
Frank -

Frank -

07/12/2007 17:12:00
Quote Anchor link
Kwastie schreef op 07.12.2007 16:37:
maar zijn code is nate maken, dus te faken
En welke md5-hash is dan niet na te maken? Het bestaat uit 'slechts' 32 karakters die ieder maximaal 16 mogelijkheden hebben. De mogelijkheden zijn beperkt.

De kans dat iemand hier echter iets mee kan, is dermate klein dat het (op dit moment) een verwaarloosbaar klein risico is. Niet iets om je druk over te maken. En wanneer je stapje verder wilt gaan, neem je SHA1. Dat bestaat uit 40 karakters.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.