Wenn ich's richtig verstanden habe, wird hierbei das Passwort und ein weiterer Text o.ä. zusammen verschlüsselt, oder? Beispiel: <?php $password = $_POST['pass']; $algo = "DMansplace";
password_hash($password, $algo); ?>
Wie kann ich das dann abfragen? <?php if($_POST['pass'].$algo == «Wert aus DB») { […] } ?>
Edit: Hab mich ein wenig von einer Seite verwirren lassen. (Zeile 6 & 9, hab $pepper als nächsten Wert im Syntax gesehen.)
>Das ist kaum schwerer zu verwenden
*anzweifel*
Was ist der grobe Unterschied zwischen PASSWORD_DEFAULT und PASSWORD_BCRYPT und was hat es mit diesem Salz (Salt) auf sich?
>Was ist der grobe Unterschied zwischen PASSWORD_DEFAULT und PASSWORD_BCRYPT
Aktuell gibt es da nicht wirklich einen Unterschied: PASSWORD_DEFAULT verwendet immer den in der aktuellen PHP-Version besten verfügbaren Algorithmus. Da aktuell aber nur BCRYPT für password_hash verfügbar ist, wird auch BCRYPT benutzt. PASSWORD_DEFAULT ist eben zukunftssicherer.
>und was hat es mit diesem Salz (Salt) auf sich?
Salts sind zufällig generierte Zeichenketten, die den Passwörtern hinzugefügt werden, bevor sie verschlüsselt werden. Dies hilft gegen die Verwendung von Rainbow Tables, welche ja schon vorberechnete Passwort-Hashes zu vielen Zeichenfolgen enthält. Wenn die Passwörter gesaltet sind, verfällt dieser Schritt (da Rainbow Tables mit gesalteten Passwörter zu groß wären und es zu lange dauern würde diese zu generieren - insgesamt wärs also relativ unsinnig) und man müsste das Passwort über andere Methoden neu berechnen, was entsprechend deutlich mehr Zeit kostet.
Danke für die ausführliche Info. Kann man dann auch sagen, dass mein $algo so ein Salt ist? Weil ohne Auskunft darüber, dass es noch einen dazugenommenen Wert (≙ $algo) gibt, wird doch beim Verifizieren dann nicht nur das Passwort ausgegeben, oder?
Falls man es nicht versteht: 111.222 -> password_hash -> 121212 -> password_verify -> 111222 -> "Passwort = 111222"
Der Punkt davon ist, dass du dir über den zugrundeliegenden Algorithmus wie bcrypt oder md5 keine Gedanken machen musst. Wenn du PASSWORD_DEFAULT als Algorithmus verwendet, bekommst du sogar ohne Änderungen an deinem Code mit der Aktualisierung deines PHP-Interpreters aktuellere Algorithmen.
Die Verwendung sieht so aus: Du brauchst eine passende Datenbankspalte (laut Dokumentation sollte sie mindestens 255 Zeichen fassen für zukünftige Algorithmen), in der du dann das Resultat von password_hash($pw, PASSWORD_DEFAULT) speicherst. Zum überprüfen verwendest du dann password_verify($pw, $hash), das alles automatisch macht.
>anzweifel >Was ist der grobe Unterschied zwischen PASSWORD_DEFAULT und PASSWORD_BCRYPT und was hat es mit diesem Salz (Salt) auf sich?
Es ist deshalb wesentlich einfacher, weil du eben darum dir überhaupt keine Gedanken machen musst. Die Verwendung von md5 und dann auch noch ohne Salz ist kryptographisch absolut katastrophal. Hier verwendest du einfach nur die Standardwerte (eben PASSWORD_DEFAULT) und alles ist einfach so ok.
Hint: <noscript> ist dein Freund. Wobei das natürlich nur funktioniert, wenn alles blockiert ist und das von den Plugin vernünftig gehandhabt wird.
password_verify entschlüsselt das Passwort nicht. Das ist eine wesentliche Eigenschaft dieser Hashfunktionen: es ist sehr schwer, den ursprünglichen Wert wieder zu berechnen ("Einwegefunktion"). Deshalb führt password_verify dieselben Schritte wieder durch, die password_hash gemacht hat und vergleicht das Resultat mit dem gegebenen Hash.
Beim Salz ist es wichtig, dass jedes Passwort ein anderes zufälliges Salz bekommt. Ein einzelner Wert für alle Passwörter würde keinen Vorteil bringen.
Hint: NoScript ist nicht mein Freund, es ist Dreck. Einfach aber Dreck. - Es wird sofort dargestellt, wenn JavaScript vom deaktivieren Modus aktiviert wird und kann das Style ruinieren. Außerdem werden die Umlaute falsch dargestellt, selbst wenn UTF-8 verwendet wird. - NoScript zeigt zwar den Text nicht an, aber der Platz wird trotzdem gebraucht.
So ist das zumindest bei mir, daher leg ich nichts auf NoScript.
Vllt. gibt's ja ein paar Idden für mich, wie ich das mit den Buttons lösen kann. Sollte so wie hier funktionieren, ich find nur leider nichts was funktioniert.
Habe bisher schon das benutzt: <script type="text/javascript"> function fillin_hl() { document.form_input.message.value="[hl][/hl]"; }
Ich hab mir den Code schon einmal aus dem Quellcode geholt und versucht, den benötigten Kram dafür zu extrahieren. Aber es ist eben schief gegangen.
Edit: Hab noch die Zeile mit dem Autocomplete hinzugefügt, geht aber immer noch nicht. Werde gleich die Codezeilen von oben updaten, das Neue ist kursiv.
Edit2: Selbst mit dem vollen Script geht’s nicht. Denke also, dass der Script erst garnicht reagiert, weil z.B. eine Vorgabe nicht erfüllt ist (z.B. <body> muss die class “mwForum” haben / alles muss in einem <fieldset> sein) oder das er das Textfeld nicht betreten kann, weil dieses einen anderen Tag und anderen Namen hat (hier ‘textarea class=“tgi” name=“body”’, bei mir ‘input class=“tgi” name=“message” id=“message”’).
insertTags bekommt als Parameter einen öffnenden und einen schließenden Tag. Der einzige Unterschied beim URL-Tag ist ja, dass der öffnende Tag ein = am Ende stehen hat. Das bekommst du z.B. so.
Ich wollte jetzt einen 3. Typ von Button einrichten. In HTML gibt's es ja auch nicht nur <tag></tag> und <tag data="X"></tag> sondern auch <tag /> wie z.B. bei br und img. Hab versucht, den Code unten zu ändern, jedoch merk ich keinen Unterschied.
Hier der Auszug: […] after = el.value.substring(end, el.textLength); if ($(this).hasClass("aln")) el.value = tag2 ? before + "[" + tag2 + " /]" + sel + after : before + ":" + tag1 + ":" + after; else el.value = tag2 ? before + "[" + tag1 + "]" + sel + "[/" + tag2 + "]" + after : before + ":" + tag1 + ":" + after; caret = sel.length === 0 ? start + tag1.length + 2 : start + tag1.length + 2 + sel.length + tag2.length + 3; […]
Meine Texteingabe ist ein Input und wird daher mit Enter abgeschickt (ist so gewolt), aber manchmal hätte man doch gerne einen Break zwischendurch. ^^
So, wollte nur mal sagen, dass eine neue Version des Chats verfügbar ist.
- Habe nun die Sicherheitsvorkehrungen etwas erhöht, man kann nicht mehr das Namensfeld sichtbar machen (an der Stelle Grüße an ‘NotGast’) und auch keine HTML-Codes in den Chat posten, den einzigen Weg zur Textformatierung bieten die BB-Codes. - Ein Zeilenumbruch ist mit “[br /]” möglich, hab den Button aber noch nicht eingebaut, da ich es nicht hinkriege. *hust* - Links sollten automatisch erkannt und anklickbar sein, fehlerfrei funktioniert er aber (noch) nicht. - Das CSS wurde etwas verbessert (Danke an Gecko!) und wird auch noch weiter angepasst. - img und imgext dienen zum direkten Posten von Bildern, bei img muss nur der Dateiname, unter der eine Datei auf meinen Server hochgeladen wurde, eingegeben werden (Bsp: ), imgext funktioniert mit Links (Bsp: [imgext]http://nsa.gov/ips_over_the_last_decade.png[/imgext]). - Beim c-Tag kann man die Schriftfarbe ändern (Bsp: [c=00ff00]gallerie). - Es werden nur die neusten 100 Nachrichten angezeigt (neu?), evtl. bau ich noch ne Oberfläche für’s Archiv.
LogIn wie immer über die Benutzerdaten oder als Gast, alte Infos hier.
Gruß, Daniel
Hinweis: Neuregistration funktioniert momentan nicht, da PHP::mail() keine Mails verschickt, konfiguriere das aber bald. Edit: Evtl. werd ich das noch ändern, da es wohl so aussieht, als wenn ich das nicht so schnell auf die Reihe bekommen würde.
Edit: Mails werden verschickt, dauert aber einige Zeit. Bitte unbedingt den Spam-Ordner checken, vielen Dank!