Video Tutorial - PHP Registrierung | Loginsystem


m0dpad

Erfahrenes Mitglied
Hallo Leute,

Habe in nächster Zeit relativ viel Freizeit und versuche diese möglichst sinnvoll zu füllen. Deshalb habe ich ein Video Tutorial gemacht, in dem ich vorführe, wie man eine relativ simple Benutzerregistrierung erstellt.

Dabei habe ich versucht so gut wie möglich zu erklären warum man was macht, da ich aber selber nicht einschätzen kann ob das gut oder schlecht erklärt ist, wäre es nett etwas Feedback zu bekommen.

Es besteht aus 6 Teilen, der erste Teil soll einen kleinen Überblick geben und ab dem 2ten geht es dann mit PHP los.

Part 1:
http://www.youtube.com/watch?v=XbYucisTDEI

Part 2:
http://www.youtube.com/watch?v=WG2QiGqyZFY

Part 3:
http://www.youtube.com/watch?v=LO1BX44--qA

Part 4:
http://www.youtube.com/watch?v=dC6YJiKFGxU

Part 5:
http://www.youtube.com/watch?v=xJzjAamQxlk

Part 6:
http://www.youtube.com/watch?v=5iSfgA5qkmY
 

m0dpad

Erfahrenes Mitglied
Würde es mir ja anschauen, aber außer Part 1 sind alle anderen Links ungültig.

Hey, hmm das ist äußerst seltsam, bei mir gehen alle Links - habe es auch mit mehreren Browsern versucht.

Ansonsten:
Am Ende der Videos wird immer ein Link zum nächsten Part eingeblendet, d.h einfach ganz an das Ende spulen.

Oder als 2. Möglichkeit, über dem Video zwischen dem Benutzernamen und Abonnieren Button ist ein weiterer Button (6 Videos), wenn man da drauf klickt bekommt man auch die 6 Parts angezeigt.
 

Flex

(aka Felix Jacobi)
Ich hatte die Links bereits korrigiert. ;)

Und danke für das Einstellen der Videos.
 

tombe

Erfahrenes Mitglied
Habe mit soeben die ersten 4 Videos angeschaut.

In Teil 3 schreibst du z.B.:

PHP:
$_POST['pass'] = hash('sha256', $_POST['pass'][0]);

pass ist ein Array und du übergibst das Ergebnis der hash-Funktion an eine "normale" Variable. Dein Array ist somit futsch.

PHP:
if (strlen($_POST['username']) {
  $error_msg = "Der Benutzername ist zu lang";
}

Die strlen-Funktion wird dir hier sicher einen Fehler ausgeben selbst wenn der Username nur ein Zeichen lang ist. Du prüfst die Länge nämlich gar nicht.

Ich finde es toll das du dir solche Mühe machst und diese Videos erstellst. Allerdings sollten sie dann auch möglichst ohne Fehler sein.

Vielleicht schaust du ja nochmal selber drauf und korregierst es dann.

Werde mir den Rest aber sicher trotzdem anschauen.

NACHTRAG: Hänge hier noch ein Bild dran wo auch noch was fehlt.
 

Anhänge

  • video2.jpg
    video2.jpg
    36,3 KB · Aufrufe: 135
Zuletzt bearbeitet:

m0dpad

Erfahrenes Mitglied
Habe mit soeben die ersten 4 Videos angeschaut.

In Teil 4 schreibst du z.B.:

PHP:
$_POST['pass'] = hash('sha256', $_POST['pass'][0]);

pass ist ein Array und du übergibst das Ergebnis der hash-Funktion an eine "normale" Variable. Dein Array ist somit futsch.

PHP:
if (strlen($_POST['username']) {
  $error_msg = "Der Benutzername ist zu lang";
}

Die strlen-Funktion wird dir hier sicher einen Fehler ausgeben selbst wenn der Username nur ein Zeichen lang ist. Du prüfst die Länge nämlich gar nicht.

Ich finde es toll das du dir solche Mühe machst und diese Videos erstellst. Allerdings sollten sie dann auch möglichst ohne Fehler sein.

Vielleicht schaust du ja nochmal selber drauf und korregierst es dann.

Werde mir den Rest aber sicher trotzdem anschauen.

Hallo, danke für das Feedback.

Zum 1.

$_POST['pass'] überschreibe ich absichtlich, dass sage ich auch im Video. Da dieser Array nicht mehr gebraucht wird und ich finde es wäre Speicherverschwendung, extra eine neue Variable anzulegen. Was aber natürlich gehen würde.


Zum 2.
Das mit dem strlen stimmt ganz klar, aber ich nehme direkt im darauf folgenden Video dazu Stellung und verbessere es.

Aber danke, wenn dir noch was auffällt kannst du dich gerne melden. Das Problem ist nachträgliches verbessern ist nicht ganz so einfach, im Prinzip müsste ich das Video nochmal aufnehmen dann, was ich auch schon bei ein paar teilen machen musst weil Camtasia abgeschmiert ist :D
 

tombe

Erfahrenes Mitglied
So nachdem ich oben gemeckert habe nun auch noch ein bisschen Lob.

Die Videos sind gut gemacht und es sind auch interessante Lösungswege die du verwendet hast.

Wenn es mal wieder was zu sehen gibt werde ich es mir bestimmt auch anschauen.

Gruß Thomas
 

Rasta

./root.sh
Also ich muss sagen sehr schön erklärt :)
und man kann es auch nachbauen schön simple THX dafür
 

Homwer

Mitglied
Hi,
vielen Dank für das Vid ist gut geworden, auch du manchmal etwas ausschweifst :D (stört mich nicht, macht es aber lang)
Kleine verbesserung

PHP:
if(isset($_POST['username'], $_POST['pw'][0], $_POST['mail'][0]))

so gehts auch. Also mit isset mehrere afragen
 

Tragg0r

Grünschnabel
Hi,

erstmal dickes Lob habe zwar erstmal nur kurz reingeschnuppert, aber scheint sehr umfangreich und auch für Anfänger (Mich) nachbaubar zu sein.

Meine Frage ist: Wie sieht das bei der Sicherheit aus bei dem Script? Bitte zerreißt mich nicht^^
 

m0dpad

Erfahrenes Mitglied
Hallo,

Das Script ist sicher im Bezug auf MySQL Injections, da Prepared Statements verwendet werden. D.h die Strings (Zeichketten) die aus Benutzereingaben stammen werden vom MySQL Treiber automatisch escaped.

Ebenfalls werden alle Benutzereingaben die wieder auf der Seite angezeigt werden durch die Funktion htmlspecialchars() in HTML Entitäten umgewandelt (nicht alle Zeichen, aber alle Sicherheitsrelevanten).
Dadurch wird eine XSS - Attacke verhindert.

Intern wird von dem Passwort nur der Hash (SHA256) mit Salt gespeichert, dadurch wird es erschwert bis nahezu unmöglich das Passwort wieder sichtbar zu machen, falls jemand die Datenbank (wie auch immer) klaut.

Das heißt, das Script beachtet alle Standardsicherheitsmaßnahmen.

Wogegen es nicht geschützt ist, ist Spam, d.h der Benutzer könnte beliebig viele Accounts in entsprechender Zeit durch einen Bot erstellen lassen.
 

Tragg0r

Grünschnabel
Hey Danke für deine schnelle Antwort. Die meisten hätten nur geschrieben ist sicher oder ist nicht sicher, super das du erklärst wodurch es sicher ist und was diese Dinge genau machen bzw. bringen.

Vor Bots sicher geht doch bestimmt über Captcha, kann man das nicht irgendwie simpel integrieren oder kennste dazu ein Tut?
 

m0dpad

Erfahrenes Mitglied
Hallo,
ja Captchas sind ein guter Ansatz und das ist eigentlich auch relativ simpel implementierbar. Die Grundidee ist ein Bild mit PHP zu generieren und den Code der auf dem Bild steht in einer Session zu speichern. Dann muss nur noch verglichen werden ob der Code im Formular der gleiche ist wie der aus der Session.

Eine weitere Möglichkeit, die man auch vornehmen sollte um sicher zu gehen, dass das Formular auch wirklich über die Website abgesendet wurde ist "tokens" zu verwenden. Das sind einfach nur Zeichenketten die im Formular per "hidden field" übergeben werden und ebenfalls in der Session gespeichert sind. Damit kann man dann auch wieder vergleichen ob die Daten übereinstimmen.
 

Tragg0r

Grünschnabel
Hast du ne Ahnung wo man sowas als Tut bekommt?

Oder mal ne dreiste Frage: Warum hast du diese Sachen bei dir nicht eingebaut, zu komplex, zu umfangreich? ;)
 

m0dpad

Erfahrenes Mitglied
Hallo,
in dem Video soll es darum gehen die Grundvorgänge einer Benutzerregistrierung zu zeigen.
Tokens und Captchas sind dazu da Spam abzuhalten, so gut es geht, diese Techniken sind zwar relativ simpel gehören aber im Formularverarbeitungsbereich schon eher in die Abteilung fortgeschritten.

Ein Tutorial kenne ich leider keines, vielleicht mache ich aber mal eins dazu.
 

czweifel

Mitglied
Intern wird von dem Passwort nur der Hash (SHA256) mit Salt gespeichert, dadurch wird es erschwert bis nahezu unmöglich das Passwort wieder sichtbar zu machen, falls jemand die Datenbank (wie auch immer) klaut.

könnte man anstelle eines Salts auch einfach die doppelte Eingabe nehmen oder die Eingabe rückwärts, denn wenn ein Hacker deine Seite hackt, sieht er doch auch meine Scripts und somit auch die Zeile $salt='ifzgweufgzwfuwq';

&noch eine Frage, ist md5($passwort); sicherer als SHA256?

Vielen Dank für das Video-Tutorial!
 

m0dpad

Erfahrenes Mitglied
könnte man anstelle eines Salts auch einfach die doppelte Eingabe nehmen oder die Eingabe rückwärts, denn wenn ein Hacker deine Seite hackt, sieht er doch auch meine Scripts und somit auch die Zeile $salt='ifzgweufgzwfuwq';

&noch eine Frage, ist md5($passwort); sicherer als SHA256?

Vielen Dank für das Video-Tutorial!

Könnte man theoretisch natürlich auch machen, bzw. zusätzlich dazu ergänzen. Man unterscheidet zwischen dynamischen und statischen Salts. Dein Vorschlag wäre ein dynamischer Salt, oft verwendet man aber dazu die UserID.

SHA256 ist sicherer als md5().

Wenn ein Hacker soweit in die Seite eindringt, dass er an deine PHP Files kommt, dann ist eh alles zu spät ;). Denn dann hast du eine massive Sicherheitslücke im Server selbst oder er ist irgendwie an dein FTP Passwort gekommen.
 

czweifel

Mitglied
Das heisst, all diese Sicherheitsabfragen machen wir hauptsächlich fürs MySQL? Wegen den Salt meinte ich jetzt fast das der Dynamische unsicherer ist, weil wenn ich jetzt als Salt die Adresse oder Username nehme kann der Hacker doch denn Salt vielleicht bestimmen wenn er selbst einen Account erstellt, jedoch wenn der Salt statisch im .php file ist, wäre das nicht besser?
 

m0dpad

Erfahrenes Mitglied
Oft macht man beides, dynamischer und statischer Salt, aber eigentlich ist ein statischer Salt schon auch alleine sicher, wenn man den SHA256 Algorithmus verwendet.

Und ja, diese Sicherheitsabfragen sind hauptsächlich für die Datenbank. Dort muss ausgeschlossen sein, dass ein User eigene Statements mit einbringen kann. Zusätzlich muss man dann aber natürlich noch bei der Ausgabe von Benutzerdaten wieder darauf achten, diese auch nicht ungefiltert auszugeben.

Der Grundsatz ist immer, Daten die von Benutzern stammen, filtern, validieren, escapen und dann erst entsprechend weiter verarbeiten.
 

Forum-Statistiken

Themen
272.355
Beiträge
1.558.613
Mitglieder
187.829
Neuestes Mitglied
AlDi31