login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Wachtwoord vergeten script

Offline ViXP51 - 29/12/2013 19:32 (laatste wijziging 29/12/2013 19:32)
Avatar van ViXP51Nieuw lid Hallo,

Ik wil voor mijn website graag een script die een mail stuurt naar de gebruiker met een nieuw gegenereerd wachtwoord. De wachtwoorden van mijn site staan opgeslagen met md5. Alleen ik snap helemaal niks ervan hoe je zo'n systeem moet maken. Kan iemand helpen?

10 antwoorden

Gesponsorde links
Offline Thomas - 29/12/2013 20:17
Avatar van Thomas Moderator Kan mij niet voorstellen dat er niets tussen de scripts staan, heb je in de categorie beveiliging of ledensystemen gekeken?
Offline ViXP51 - 29/12/2013 21:02 (laatste wijziging 29/12/2013 21:41)
Avatar van ViXP51 Nieuw lid Ik heb deze gevonden: http://www.site...densysteem

Het script werkt, maar ik krijg een foutmelding terwijl ik wel gewoon mijn wachtwoord kan veranderen.

Undefined index: methode in /home/.../wachtwoord.php on line 24.

Dit is de pagina waar het om gaat:

  1. <?php
  2. include('config.php');
  3. ?>
  4. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  5. "http://www.w3.org/TR/html4/loose.dtd">
  6. <html>
  7. <head>
  8. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  9. <title>Wachtwoord ophalen</title>
  10. </head>
  11.  
  12. <body>
  13. <h1>Wachtwoord vergeten? Contacteer uw leverancier.</h1>
  14. <form name="gebruikersnaam" method="post" action="">
  15. <p>Vraag een nieuw wachtwoord aan door hier uw gebruikersnaam in te vullen:</p>
  16. <p>
  17. <input name="gebruikersnaam" type="text" id="gebruikersnaam" size="35">
  18.  
  19. <input name="methode" type="hidden" id="methode" value="gebruikersnaam">
  20. <input type="submit" name="Submit" value="Aanvragen">
  21. </p>
  22. </form>
  23. <?php
  24. if($_POST['methode'] == "gebruikersnaam") {
  25. $g_check = mysql_result(mysql_query("SELECT COUNT(id) FROM leden WHERE gebruikersnaam='".$_POST['gebruikersnaam']."'"),0);
  26. $temp_g_check = mysql_result(mysql_query("SELECT COUNT(*) FROM leden_temp WHERE gebruikersnaam='".$_POST['gebruikersnaam']."'"),0);
  27. if($g_check == 0) {
  28. echo 'Er is geen overeenkomende account voor deze gebruikersnaam in de database.';
  29. $error = 1;
  30. }
  31. if($temp_g_check != 0) {
  32. echo '<br />De account bevindt zich nog in de activatiestatus. Hebt u geen activatie-mail ontvangen? Klik <a href="mail_opnieuw.php">hier</a>';
  33. $error = 1;
  34. }
  35.  
  36. if($error != 1) {
  37. $pass = activatiecode(10);
  38. $pass_db = md5($pass);
  39. $geg = mysql_fetch_assoc(mysql_query("SELECT * FROM leden WHERE gebruikersnaam='".$_POST['gebruikersnaam']."'"));
  40. $tpl = new TemplatePower('wachtwoord_1.tpl');
  41. $tpl->prepare();
  42. $tpl->assign(array(
  43. "site" => $cfg['site'],
  44. "url" => $cfg['url'],
  45. "gebruikersnaam" => $_POST['gebruikersnaam'],
  46. "wachtwoord" => $pass,
  47. "wachtwoord_nieuw" => $pass_db,
  48. ));
  49. $template = $tpl->getOutputContent();
  50.  
  51. $headers = "MIME-Version: 1.0\n";
  52. $headers .= "Content-type: text/html; charset=iso-8859-1\n";
  53. $headers .= "From: ".$cfg['site']." <".$cfg['email'].">\n";
  54. mail($geg['email'],"Wachtwoord op ".$cfg['site']." veranderen",$template,$headers);
  55. mysql_query("INSERT INTO leden_wacht (id,wachtwoord,datum) VALUES ('".$geg['id']."','".$pass_db."','".time()."')");
  56. echo 'Er is een e-mail verzonden naar '.$_POST['gebruikersnaam'].'.';
  57. }
  58. } ?>
  59. <hr noshade>
  60. <form name="email" method="post" action="">
  61. <p>Vraag een nieuw wachtwoord aan door hier uw e-mailadres in te vullen:</p>
  62. <p>
  63. <input name="email" type="text" id="email" size="35">
  64. <input name="methode" type="hidden" id="methode" value="email">
  65. <input type="submit" name="Submit" value="Aanvragen">
  66. </p>
  67. </form>
  68. <?php
  69. if($_POST['methode'] == "email") {
  70. $g_check = mysql_result(mysql_query("SELECT COUNT(id) FROM leden WHERE email='".$_POST['email']."'"),0);
  71. $temp_g_check = mysql_result(mysql_query("SELECT COUNT(*) FROM leden_temp WHERE email='".$_POST['email']."'"),0);
  72. if($g_check == 0) {
  73. echo 'Er is geen overeenkomende account voor dit e-mailadres in de database.';
  74. $error = 1;
  75. }
  76. if($temp_g_check != 0) {
  77. echo '<br />De account bevindt zich nog in de activatiestatus. Hebt u geen activatie-mail ontvangen? Klik <a href="mail_opnieuw.php">hier</a>';
  78. $error = 1;
  79. }
  80.  
  81. if($error != 1) {
  82. $pass = activatiecode(10);
  83. $pass_db = md5($pass);
  84. $geg = mysql_fetch_assoc(mysql_query("SELECT * FROM leden WHERE email='".$_POST['email']."'"));
  85. $tpl = new TemplatePower('wachtwoord_1.tpl');
  86. $tpl->prepare();
  87. $tpl->assign(array(
  88. "site" => $cfg['site'],
  89. "url" => $cfg['url'],
  90. "gebruikersnaam" => $geg['gebruikersnaam'],
  91. "wachtwoord" => $pass,
  92. "wachtwoord_nieuw" => $pass_db,
  93. ));
  94. $template = $tpl->getOutputContent();
  95.  
  96. $headers = "MIME-Version: 1.0\n";
  97. $headers .= "Content-type: text/html; charset=iso-8859-1\n";
  98. $headers .= "From: ".$cfg['site']." <".$cfg['email'].">\n";
  99. mail($geg['email'],"Wachtwoord op ".$cfg['site']." veranderen",$template,$headers);
  100. mysql_query("INSERT INTO leden_wachT (id,wachtwoord,datum) VALUES ('".$geg['id']."','".$pass_db."','".time()."')");
  101. echo 'Er is een e-mail verzonden naar '.$_POST['email'].'.';
  102. }
  103. }
  104.  
  105. /*
  106. Hieronder volgt het stukje voor zij die op de url in de email klikken.
  107. */
  108. if(isset($_GET['gebruiker']) && isset($_GET['wachtwoord'])) {
  109. echo '<hr noshade>';
  110. echo '<strong>Activatie via email:</strong><br />';
  111. $lid_id = mysql_query("SELECT id FROM leden WHERE gebruikersnaam='".$_GET['gebruiker']."'");
  112. if(mysql_num_rows($lid_id) != 0) {
  113. $lid = mysql_result($lid_id,0);
  114. $res = mysql_result(mysql_query("SELECT COUNT(*) FROM leden_wacht WHERE wachtwoord='".$_GET['wachtwoord']."' AND id='".$lid."'"),0);
  115. if($res == 0) {
  116. echo '<font color="#FF0000">Het wachtwoord komt niet overeen met de gebruiker.</font>';
  117. } else {
  118. mysql_query("UPDATE leden SET wachtwoord='".$_GET['wachtwoord']."' WHERE id='".$lid."'");
  119. echo 'Je wachtwoord is gewijzigd! Klik <a href="login.php">hier</a> om in te loggen.';
  120. }
  121. } else {
  122. echo '<font color="#FF0000">Deze gebruiker heeft geen nieuw wachtwoord aangevraagd.</font>';
  123. }
  124. }
  125.  
  126. ?>
  127. </body>
  128. </html>
Offline Thomas - 29/12/2013 21:52
Avatar van Thomas Moderator Bouw een extra controle in of er uberhaupt een formulier gepost wordt:
  1. if ($_SERVER['REQUEST_METHOD'] == 'POST') { // <-- de extra controle
  2. if($_POST['methode'] == "email") {
  3. ...
  4. }
  5. } // <-- en niet vergeten af te sluiten natuurlijk
  6. ?>


Daarna kun je er wat meer van uitgaan dat (de juiste) POST variabelen bestaan.

Dit neemt niet weg dat je je invoer moet controleren, dus dit is zeker geen wondermiddel.

Daarnaast lijkt het mij voor jezelf handig dat je begrijpt wat er allemaal gebeurt in dit script/deze scripts, hier kunnen nog best bugs/security issues in zitten... Dit script is immers al 9 jaar oud...

Ook loont het de moeite de reacties op dit script te lezen, mogelijk zijn daar je vragen al beantwoord.
Offline ViXP51 - 29/12/2013 23:17
Avatar van ViXP51 Nieuw lid @FangorN: Bedankt voor je reactie. Waar moet ik die code dan precies inbouwen? Ben namelijk redelijk nieuw met PHP en zie dat niet direct.
Offline finduilas - 30/12/2013 09:59
Avatar van finduilas PHP gevorderde Kijk eens rond lijn 68-69.. Daar herken je het gedeelte $_POST['methode'] die FangorN aanhaalde.. Daarrond moet je het bouwen.
Offline ViXP51 - 30/12/2013 12:30
Avatar van ViXP51 Nieuw lid Ik heb het ingebouwd bij lijn 68-69 en bij lijn 24 waar dezelfde error was. Nu heb ik dit:
Maar de error blijft staan bij lijn 24. Over lijn 68-69 wordt niks gezegd.

  1. <?php
  2. include('config.php');
  3. ?>
  4. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  5. "http://www.w3.org/TR/html4/loose.dtd">
  6. <html>
  7. <head>
  8. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  9. <title>Wachtwoord ophalen</title>
  10. </head>
  11.  
  12. <body>
  13. <h1>Wachtwoord vergeten? Contacteer uw leverancier.</h1>
  14. <form name="gebruikersnaam" method="post" action="">
  15. <p>Vraag een nieuw wachtwoord aan door hier uw gebruikersnaam in te vullen:</p>
  16. <p>
  17. <input name="gebruikersnaam" type="text" id="gebruikersnaam" size="35">
  18.  
  19. <input name="methode" type="hidden" id="methode" value="gebruikersnaam">
  20. <input type="submit" name="Submit" value="Aanvragen">
  21. </p>
  22. </form>
  23. <?php
  24. if($_POST['methode'] == "gebruikersnaam") {
  25. if ($_SERVER['REQUEST_METHOD'] == 'POST') { // <-- de extra controle
  26. if($_POST['methode'] == "gebruikersnaam") {
  27.  
  28. }
  29. }
  30. $g_check = mysql_result(mysql_query("SELECT COUNT(id) FROM leden WHERE gebruikersnaam='".$_POST['gebruikersnaam']."'"),0);
  31. $temp_g_check = mysql_result(mysql_query("SELECT COUNT(*) FROM leden_temp WHERE gebruikersnaam='".$_POST['gebruikersnaam']."'"),0);
  32. if($g_check == 0) {
  33. echo 'Er is geen overeenkomende account voor deze gebruikersnaam in de database.';
  34. $error = 1;
  35. }
  36. if($temp_g_check != 0) {
  37. echo '<br />De account bevindt zich nog in de activatiestatus. Hebt u geen activatie-mail ontvangen? Klik <a href="mail_opnieuw.php">hier</a>';
  38. $error = 1;
  39. }
  40.  
  41. if($error != 1) {
  42. $pass = activatiecode(10);
  43. $pass_db = md5($pass);
  44. $geg = mysql_fetch_assoc(mysql_query("SELECT * FROM leden WHERE gebruikersnaam='".$_POST['gebruikersnaam']."'"));
  45. $tpl = new TemplatePower('wachtwoord_1.tpl');
  46. $tpl->prepare();
  47. $tpl->assign(array(
  48. "site" => $cfg['site'],
  49. "url" => $cfg['url'],
  50. "gebruikersnaam" => $_POST['gebruikersnaam'],
  51. "wachtwoord" => $pass,
  52. "wachtwoord_nieuw" => $pass_db,
  53. ));
  54. $template = $tpl->getOutputContent();
  55.  
  56. $headers = "MIME-Version: 1.0\n";
  57. $headers .= "Content-type: text/html; charset=iso-8859-1\n";
  58. $headers .= "From: ".$cfg['site']." <".$cfg['email'].">\n";
  59. mail($geg['email'],"Wachtwoord op ".$cfg['site']." veranderen",$template,$headers);
  60. mysql_query("INSERT INTO leden_wacht (id,wachtwoord,datum) VALUES ('".$geg['id']."','".$pass_db."','".time()."')");
  61. echo 'Er is een e-mail verzonden naar '.$_POST['gebruikersnaam'].'.';
  62. }
  63. } ?>
  64. <hr noshade>
  65. <form name="email" method="post" action="">
  66. <p>Vraag een nieuw wachtwoord aan door hier uw e-mailadres in te vullen:</p>
  67. <p>
  68. <input name="email" type="text" id="email" size="35">
  69. <input name="methode" type="hidden" id="methode" value="email">
  70. <input type="submit" name="Submit" value="Aanvragen">
  71. </p>
  72. </form>
  73. <?php
  74. if($_POST['methode'] == "email") {
  75. if ($_SERVER['REQUEST_METHOD'] == 'POST') { // <-- de extra controle
  76. if($_POST['methode'] == "email") {
  77.  
  78. }
  79. }
  80. $g_check = mysql_result(mysql_query("SELECT COUNT(id) FROM leden WHERE email='".$_POST['email']."'"),0);
  81. $temp_g_check = mysql_result(mysql_query("SELECT COUNT(*) FROM leden_temp WHERE email='".$_POST['email']."'"),0);
  82. if($g_check == 0) {
  83. echo 'Er is geen overeenkomende account voor dit e-mailadres in de database.';
  84. $error = 1;
  85. }
  86. if($temp_g_check != 0) {
  87. echo '<br />De account bevindt zich nog in de activatiestatus. Hebt u geen activatie-mail ontvangen? Klik <a href="mail_opnieuw.php">hier</a>';
  88. $error = 1;
  89. }
  90.  
  91. if($error != 1) {
  92. $pass = activatiecode(10);
  93. $pass_db = md5($pass);
  94. $geg = mysql_fetch_assoc(mysql_query("SELECT * FROM leden WHERE email='".$_POST['email']."'"));
  95. $tpl = new TemplatePower('wachtwoord_1.tpl');
  96. $tpl->prepare();
  97. $tpl->assign(array(
  98. "site" => $cfg['site'],
  99. "url" => $cfg['url'],
  100. "gebruikersnaam" => $geg['gebruikersnaam'],
  101. "wachtwoord" => $pass,
  102. "wachtwoord_nieuw" => $pass_db,
  103. ));
  104. $template = $tpl->getOutputContent();
  105.  
  106. $headers = "MIME-Version: 1.0\n";
  107. $headers .= "Content-type: text/html; charset=iso-8859-1\n";
  108. $headers .= "From: ".$cfg['site']." <".$cfg['email'].">\n";
  109. mail($geg['email'],"Wachtwoord op ".$cfg['site']." veranderen",$template,$headers);
  110. mysql_query("INSERT INTO leden_wachT (id,wachtwoord,datum) VALUES ('".$geg['id']."','".$pass_db."','".time()."')");
  111. echo 'Er is een e-mail verzonden naar '.$_POST['email'].'.';
  112. }
  113. }
  114.  
  115. /*
  116. Hieronder volgt het stukje voor zij die op de url in de email klikken.
  117. */
  118. if(isset($_GET['gebruiker']) && isset($_GET['wachtwoord'])) {
  119. echo '<hr noshade>';
  120. echo '<strong>Activatie via email:</strong><br />';
  121. $lid_id = mysql_query("SELECT id FROM leden WHERE gebruikersnaam='".$_GET['gebruiker']."'");
  122. if(mysql_num_rows($lid_id) != 0) {
  123. $lid = mysql_result($lid_id,0);
  124. $res = mysql_result(mysql_query("SELECT COUNT(*) FROM leden_wacht WHERE wachtwoord='".$_GET['wachtwoord']."' AND id='".$lid."'"),0);
  125. if($res == 0) {
  126. echo '<font color="#FF0000">Het wachtwoord komt niet overeen met de gebruiker.</font>';
  127. } else {
  128. mysql_query("UPDATE leden SET wachtwoord='".$_GET['wachtwoord']."' WHERE id='".$lid."'");
  129. echo 'Je wachtwoord is gewijzigd! Klik <a href="login.php">hier</a> om in te loggen.';
  130. }
  131. } else {
  132. echo '<font color="#FF0000">Deze gebruiker heeft geen nieuw wachtwoord aangevraagd.</font>';
  133. }
  134. }
  135.  
  136. ?>
  137. </body>
  138. </html>
Offline JoDe - 30/12/2013 12:49 (laatste wijziging 30/12/2013 12:51)
Avatar van JoDe Lid Hoi ViXP51,

Welke versie van PHP gebruik jij en welke versie gebruikt je server?
Dit is namelijk heel belangrijk!

Wat Fangorn zegt klopt, maar stel: jij schrijft in PHP5.5 (weet ik echt niet hoor) en de server werkt op PHP3.2 (weet ik ook niet) dan werkt het gewoon niet!

Snap je wat ik bedoel?

Als ik dit weet kan ik verder voor je!
Ik help je graag, maar soms is er gewoon geen oplossing snel te geven, dan zien we wel verder.

Groetjes, JoDe
Offline ViXP51 - 30/12/2013 13:22
Avatar van ViXP51 Nieuw lid De webhost is 000Webhost. En bij de Members Area staat: PHP version: 5.2.* MySQL ver. 5.1
Offline finduilas - 30/12/2013 14:24 (laatste wijziging 30/12/2013 14:32)
Avatar van finduilas PHP gevorderde Je bouwt de code niet correct op.
Dit is wat jij hebt:
  1. if($_POST['methode'] == "gebruikersnaam") {
  2. if ($_SERVER['REQUEST_METHOD'] == 'POST') { // <-- de extra controle
  3. if($_POST['methode'] == "gebruikersnaam") {
  4.  
  5. }
  6. }
  7.  
  8. // dan jou code


Je werkt al met dingen die niet bestaan omdat je je if-structuur niet goed opbouwt.. Lees zeker eens http://www.tutorialspoint.com/php/php_get_post.htm En begin eventueel eerst met een eenvoudig formulier. Naar mijn idee heb je nog niet meteen de basis door, waardoor je door het bos de bomen niet meer ziet.

  1. if ($_SERVER['REQUEST_METHOD'] == 'POST') { // <-- de extra controle
  2. if($_POST['methode'] == "gebruikersnaam")) {
  3. // hier je code waar je die gebruikersnaam verwerkt..
  4. }
  5. }


EDIT:

if (isset($_POST['gebruikersnaam'])) zou ik eerder gebruiken i.p.v. $_POST['methode']. Ik heb mijn twijfels of dit wel kan? En niet method moet zijn.. Don't shoot me if i'm wrong. Lang geleden ;)
Bedankt door: Thomas
Offline Thomas - 30/12/2013 14:30
Avatar van Thomas Moderator De extra controle moet om de hele formulierverwerking staan.

De manier waarop je de controle hebt toegevoegd vertelt mij dat je nog niet zoveel kaas gegeten hebt van PHP.

Wellicht loont het de moeite om je wat meer te verdiepen in PHP, dan begrijp je beter wat er gebeurt. Dit lijkt mij voor je eigen gemoedsrust ook een goede zaak; enige voorzichtigheid is altijd geboden als je een script van een ander (maar ook van jezelf!) inzet, vooral als je met persoonlijke gegevens gaat werken. Het zou zeer onfortuinlijk zijn als deze gegevens toegankelijk zouden zijn voor onbevoegden door een veiligheidslek in het / een van de scripts.

Ik zou daarom (persoonlijk) nooit een script op mijn website inzetten zonder dat ik een beetje gevoel heb voor wat er allemaal gebeurt...
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.256s