Kommt vor. Wenn man zulange an einem Problem sitzt entwickelt man oft eine Scheuklappensicht.
Beiträge von SinnlosS
-
-
Um genau zu sein verschlüsselt md5() nicht. md5() ist ein Hashverfahren, und die sind nicht rückrechenbar.
D.h. ein String ergibt wenn er mit md5() gehasht wird immer den gleichen 32-Zeichen-String (Hash) der nicht zurückgerechnet werden kann. Da aber eben immer der gleiche Hash generiert wird können die Passwörter aber trotzdem abgeglichen werden. Beim Login hasht man einfach das vom User eingegebene Passwort und vergleicht diesen Hash-Wert dann mit dem der in der Datenbank hinterlegt ist.
Das erste md5() bei der Generierung des Passwortes $pass in deinem Script hat aber noch nichts mit der Form zu tun, in der es dann in der Datenbank abgelegt wird (ob jetzt gehasht oder verschlüsselt). Es geht ja da erstmal um das Passwort im Klartext, md5() ist an der Stelle nur ein Hilfsmittel zur Erstellung eines zufälligen Passwortes.
microtime() gibt den aktuellen Unix-Timestamp mit Mikrosekunden zurück. Dieser Timestamp wird dann mittels md5() gehasht um einen 32-Zeichen-String aus Zahlen und Buchstaben zu erhalten. Da 32 willkürliche Zeichen aber arg lang sind für ein Klartextpasswort wird dieser String noch mittels substr() auf 8 Zeichen gekürzt.
Was dann in $pass gespeichert wird ist also ein 8-Zeichen-String aus Zahlen und Buchstaben. Das ist das neue Passwort des Users im Klartext, wie es auch an ihn verschickt wird.Wie dieses Passwort dann für die Datenbank verschlüsselt oder gehasht wird braucht nur bei der Übergabe des Passworts an die Datenbank festgelegt werden.
Wenn du deine Passwörter verschlüsseln willst (um die Möglichkeit zum entschlüsseln zu haben) solltest du dir mal AES oder RSA anschauen. Dann brauchst du allerdings auch keine Funktion die dir ein neues Passwort generiert, weil du dann ja die Möglichkeit hast den Usern in der "Passwort vergessen"-Funktion ihr aktuelles Passwort entschlüsselt mitzuteilen.Wenn du die Passwörter hashen möchtest kannst du dir sha1 oder md5 anschauen. Da solltest du allerdings zusätzlich einen Salt verwenden (ein String der vor dem hashen an die Passwörter gehängt wird), da es besonders für md5 mittlerweile sehr umfangreiche Rainbow-Tables gibt (Tabellen die Strings und ihre zugehörigen md5-Hashs abbilden).
-
-
Peinlich, aber mir ist erst jetzt aufgefallen, dass ich es viel zu oft per Hand mach:
Doppelpunkte schützen vor MißverständnissenWozu genau ist denn der Code gut?
Die hier verwende ich häufiger Mal:
PHP
Alles anzeigenfunction getDayDiff($date1,$date2=null,$format="Y-m-d") { $date2 = $date2!==null ? $date2 : date("Y-m-d"); switch($format) { case "Y-m-d H:i:s": $date1 = array_shift(explode(" ",$date1)); $date2 = array_shift(explode(" ",$date2)); $format = "Y-m-d"; case "Y-m-d": list($year1,$month1,$day1) = explode("-",$date1); list($year2,$month2,$day2) = explode("-",$date2); break; case "d.m.Y H:i:s": $date1 = array_shift(explode(" ",$date1)); $date2 = array_shift(explode(" ",$date2)); $format = "d.m.Y"; case "d.m.Y": list($day1,$month1,$year1) = explode(".",$date1); list($day2,$month2,$year2) = explode(".",$date2); break; case "Ymd": case "YmdHis": $year1 = substr($date1,0,4); $month1 = substr($date1,4,2); $day1 = substr($date1,6,2); $year2 = substr($date2,0,4); $month2 = substr($date2,4,2); $day2 = substr($date2,6,2); break; } $dayDiff = gregoriantojd($month1,$day1,$year1)-gregoriantojd($month2,$day2,$year2); return $dayDiff>0 ? $dayDiff : $dayDiff*(-1); }
-
Wenn du das Passwort nur für die Datenbank anders verschlüsseln möchtest brauchst du das auch nur im Datenbank-Query ändern. Die Passwort-Generierung lässt du wie sie ist. Bist du sicher, dass chr() die richtige Funktion für dich ist?
http://php.net/manual/de/function.chr.php
chr
(PHP 4, PHP 5)
chr — Gibt ein einzelnes Zeichen zurückAlso das lässt du so wie es ist:
-
An der Stelle wo du das Passwort updaten möchtest schreibst du
PHP$sql = "UPDATE ft_user SET pass = '".chr(trim($pass))."' WHERE email = '".mysql_real_escape_string(trim($_POST['email']))."' ";
Da sollst du einfach mal ein
hintersetzen. Dann kannst du sehen wie der Query aussieht und was für die Variablen eingesetzt wird. Ich möchte wetten, dass in dem Query dann steht "... SET pass='' WHERE ..."
Wo hast du denn eigentlich die Passwortgenerierung her? chr() sagte mir jetzt spontan nichts, noch nie verwendet, aber ich vermute mal, dass das Problem damit zusammenhängt. Ansonsten sieht das nämlich alles soweit erstmal richtig aus. -
Wird wohl daran liegen, dass chr(trim($pass)) in deinem UPDATE-Befehl einen leeren String zurückgibt. Andernfalls würde das Passwort ja nicht "gelöscht" werden. (gelöscht wird es ja nicht, sondern auf einen leeren Wert gesetzt)
Gib dir mal beim UPDATE dein $sql aus. -
Guck dir mal die Funktion NewWindow an.
Da wird in die Variable settings ein String geschrieben. U.a. sind da die beiden Angaben "width" und "height" drin. Habe ich auf width=450,height=300 gesetzt. Kannst du dir aber nach Belieben anpassen und größer machen. -
Einzige Alternative die ich wüßte wäre eben ein mehrdimensionales Array. Das wäre garantiert auch die sauberste Lösung.
Selbst wenn es bei JavaScript noch andere Möglichkeiten neben eval() zur Handhabung variabler Variablen gibt, wird das dadurch trotzdem nicht schöner.
Ich würde da lieber das Script umschreiben. Soviel Arbeit sollte das mit Strg+F vermutlich nicht sein. -
-
Nur ein Hinweis: Eval ist evil.
Das muss reichen, konkreter lässt mein Gewissen es nicht zu.
-
Ok, grade nochmal getestet.
Bei meinem ersten Test hatte ich das onclick-Event beim submit-Button noch drin. Aus irgendeinem Grund scheint die Funktion Login() nicht aus dem onsubmit-Event ausgelöst zu werden.Ändere im form-tag mal das onsubmit-Event nur auf "return false;" und setze beim Submit-Button das onclick-Event "Login(this.form);"
Dann klappt es.
-
Habe es im Chrome und im Firefox getestet. Komme problemlos mit meinen Zugangsdaten auf meinen Strato-Webspace in einem Popup. Hast du Javascript im Firefox deaktiviert?
-
HTML
Alles anzeigen<html> <head> <script type="text/javascript"> var win=null; function Login(form) { var username = form.username.value; var password = form.password.value; var server = form.server.value; if (username && password && server) { var ftpsite = "ftp://" + username + ":" + password + "@" + server; NewWindow(ftpsite,"FTP-Zugriff"); } else { alert("Bitte Daten eingeben."); } } function NewWindow(mypage,myname){ settings="width=450,height=300,top=50,left=50,scrollbars=no,location=no,directories=no,status=no,menubar=no,toolbar=no,resizable=no"; win=window.open(mypage,myname,settings); win.focus(); } </script> </head> <body> <body> <center> <form method="post" action="" name="login" onsubmit="Login(this);return false;"> <table width="250" border="1" cellpadding="3"> <tr> <td colspan="2" align="center"> <b><h2>Login FTP Server!</h2></b> </td> </tr> <tr> <td>Username:</td> <td><input type="text" name="username" size="20"></td> </tr> <tr> <td>Password:</td> <td><input type="password"name="password" size="20"></td> </tr> <tr> <td>Server:</td> <td><tt>ftp://</tt><input type="text" name="server" value="" size="14"></td> </tr> <tr> <td colspan=2 align=center> <input type=button value="Login!"> </td> </tr> </table> </form> </center> </body> </html>
So macht es genau was du möchtest.
-
Poste doch mal den Code mit dem du es nach Berücksichtigung meines letzten Beitrags probiert hast, dann schau ich mal ob ich einen Fehler finde. Das ganze sollte eigentlich kein Problem sein.
-
onsubmit="return false;" <-- Damit hinderst du den Browser nur daran, das Formular abzuschicken (sofern Javascript aktiviert ist).
Ich bin kein JavaScript-Experte und mit Wordpress habe ich mich auch noch nie beschäftigt, keine Ahnung ob da irgendwo automatisch window.open blockiert wird, kann ich mir aber eigentlich nicht vorstellen.
window.open ist auf jedenfall erstmal richtig.Setze dein form-tag mal folgendermaßen:
Das onclick-Event beim submit-Button kannst du dann entfernen. Hat den Vorteil, dass die Funktion auch beim drücken von <Enter> in einem Eingabefeld ausgelöst wird.
Wenn das nicht funktioniert schau mal was die Fehlerkonsole ausspuckt (Google Chrome hat zum Beispiel hervorragende Debug-Infos die über Strg+Shift+J anzeigbar sind).Hier auch mal ein Popup-Generator, der Javascript-Code sollte auf jedenfall funktionieren, wenn nicht seitens Wordpress da irgendwas geblockt wird:
http://www.javatop.de/scripte2/popupgenerator.htmEdit: In deinem Beispielcode aus dem Eröffnungspost setzt du übrigens window.location, und das bezieht sich auf das aktuelle Fenster. Das dir der Code kein Popup öffnet ist klar.
-
Lass dir mal in der Funktion mail_it am Beginn $email ausgeben. Ist vermutlich leer, d.h. die email wird nicht korrekt an die Funktion übergeben.
-
Indem du nicht mit dynamischen Variablennamen sonder mit einem mehrdimensionalen Array arbeitest.
-
Erstmal: Java und JavaScript sind zwei völlig verschiedene Sprachen und haben außer einem ähnlichen Namen nichts miteinander am Hut.
http://www.google.de/#hl=de&xhr=t&q…824fd8fc8d3bdb3
Deinem Formular gibst du dann noch das attribut: onsubmit="return false;"
Außerdem sollte zum einen das form-tag geschlossen werden. Zum Anderen gehören Werte für Attribute von HTML-Tags in Hochkommata.
Z.B. -
Na, wenigstens einer der eine klare Meinung geben kann.
Im Endeffekt bleib ich dabei, dass das php informationstechnisch ins Mittelalter gehören sollte.
Bei den paar Milliarden die einige Unternehmen verdienen, könnten die ruhig eine dynamische, benutzerfreundliche und vielleicht eine auf die menschliche Sprache angepasste Software entwickeln. Dann würden wir uns mal auch so langsam aus dem informationstechnischen Mittelalter weiterentwickeln.. kann ja echt nicht sein, dass man mal an einem String oder Kommata oder so einem Mist, Stunden verbringt....
Kein Wunder warum vieles einfach nur hackbar ist...
Du kannst doch nur ein Troll sein. So dumm/lernresistent kann niemand sein.
Also wenn du einfach nur über PHP abkotzen willst, und überhaupt kein Interesse daran hast dein Problem zu lösen, dann machst du das prima. In diesem Forum bist du dann allerdings falsch.