Sichere Registrierung - Hallo?

PHP - alles Rund um die Programmierung von PHP und MySQL

Ist die geniale Programmiersprache, da sowohl für Einsteiger geeignet wie auch für Profis.

Moderator: lauras

Beiträge bitte im neuen Forum

Sichere Registrierung - Hallo?

Beitragvon Yamram » Dienstag 17. Januar 2012, 18:29

Hey Leute,
als Fortsetzung auf den Thread "Sicherer Login" folgt jetzt natürlich "Sichere Registrierung ;) Erstmal möchte ich ganz ohne Code wissen, was ihr denkt, was man beachten sollte? Das können zum

Beispiel Angaben zum Passwort sein oder so was...

Der Code ist natürlich auch wichtig. Falls es jemanden interessiert: Für diesen Code habe ich 15 Minuten gebraucht.

Code: Alles auswählen

<?php
    include
("oben.php");
    $string = "";
    if(isset($_SESSION["c1l2o3u4d-userid"])) {
        header("Location:index.php");
    }
    elseif(isset($_POST["submit-register"])) {
        if($_POST["nickname"] !== "" AND $_POST["password"] !== "" AND $_POST["password2"] !== "" AND $_POST["firstname"] !== "" AND $_POST["surname"] !== 

"" AND $_POST["purpose"] !== "") {
            $connection = mysql_connect("localhost", "yamram-dev", "********");
            if (!mysql_select_db ("yamram-dev", $connection)) {  
                $string 
=  $string."<p class='error'>Ein Datenbankfehler ist aufgetreten. Wir werden uns schnellstmöglichst darum kümmern.<span class='result'>Bitte 

haben Sie Verständnis.</span></p>"
;
            }
            $nickname = mysql_real_escape_string($_POST["nickname"]);
            $password = mysql_real_escape_string($_POST["password"]);
            $password2 = mysql_real_escape_string($_POST["password2"]);
            $firstname = mysql_real_escape_string($_POST["firstname"]);
            $surname = mysql_real_escape_string($_POST["surname"]);
            $purpose = mysql_real_escape_string($_POST["purpose"]);
            $sql = "SELECT * FROM `user` WHERE `nickname` = '".$nickname."';";
            $result = mysql_query($sql);
            if(mysql_fetch_assoc($result)) {
                $string = $string."<p class='error'>Der Username ist schon vorhanden.<span class='result'>Bitte wählen Sie einen anderen 

Usernamen.</span></p>"
;
            }
            elseif($password == $password2) {
                $sql = "INSERT INTO `user` (`nickname`, `password`, `regdate`, `surname`, `firstname`) VALUES ('".$nickname."',  '".md5($password)."', 

CURRENT_TIMESTAMP ,  '"
.$firstname."',  '".$surname."');";
                if(mysql_query($sql)) {
                    $string = $string."<p class='error'>Ein Problem mit der Datenbank ist aufgetreten.<span class='result'>Bitte haben Sie 

Verständnis.</span></p>"
;
                }
                else {
                    $sql = "SELECT * FROM `user` WHERE `nickname` = '".$nickname."';";
                    $result = mysql_query($sql);
                    $sql = "INSERT INTO  `logs` (`nickname`, `class`, `logdate`, `ip`) VALUES ('".$nickname."', 'register', CURRENT_TIMESTAMP, '".

$_SERVER["REMOTE_ADDR"]."')";
                }
                header("Location:index.php?error=7");
            }
            else {
                $string = $string."<p class='error'>Die Passwortbestätigung entspricht nicht dem Passwort.<span class='result'>Bitte versuchen Sie es noch 

einmal.</span>"
;
            }
        }
        else {
            $string = $string."<p class='error'>Sie konnten nicht registriert werden, weil Sie nicht alle Daten eingegeben haben.<span class='result'>Bitte versuchen Sie es 

noch einmal.</span></p>"
;
        }
    }
?>
<h2>Registrieren</h2>
<?php echo $string; ?>
<p>Hier können Sich registrieren. Dafür müssen Sie einfach alle Felder ausfüllen:</p>
<form method="post" action="">
    <label for="nickname">Username</label> <input type="text" name="nickname" value="<?php echo @$_POST["nickname"]; ?>" />
    <label for="password">Passwort</label> <input type="password" name="password" value="" />
    <label for="password2">Password bestätigen</label> <input type="password" name="password2" value="" />
    <label for="firstname">Vorname</label> <input type="text" name="firstname" value="<?php echo @$_POST["firstname"]; ?>" />
    <label for="surname">Nachname</label> <input type="text" name="surname" value="<?php echo @$_POST["surname"]; ?>" />
    <label for="purpose">Zweck</label>
        <select name="purpose">
            <option value="business">geschäftlich</option>
            <option value="private">privat</option>
        </select>
    <input type="submit" value="registrieren" name="submit-register" />
</form>
<?php include("unten.php"); ?>


So, was kann ich an diesem Code besser machen? Auf Empfehlung von drPHIP132 habe ich jetzt direkt mysql_real_escape_string() eingebaut. Das schützt vor SQL Injection habe ich erfahren. Wie

ihr vielleicht schon gesehen habt, braucht der User nicht mal eine eMail Adresse angeben. Wer sagt, dass das eine doofe bzw. schlechte Idee ist, der soll direkt Bescheid sagen und natürlich auch

warum.

Mit freundlichen Grüßen,
Philipp E.

PS: Das Projekt macht echt Fortschritte. Bald habe ich das komplette Usersystem fertig und fange mit dem Uploadsystem an O.o
Zuletzt geändert von Yamram am Donnerstag 19. Januar 2012, 18:21, insgesamt 2-mal geändert.
Benutzeravatar
Yamram
HTML-Sonderfall
 
Beiträge: 616
Registriert: Samstag 5. Februar 2011, 20:05
Wohnort: C:\Users\Yamram\Desktop\Papierkorb.ink

Re: Sichere Registrierung - Hallo?????

Beitragvon webmaster3000 » Mittwoch 18. Januar 2012, 17:37

Yamram hat geschrieben:Wie ihr vielleicht schon gesehen habt, braucht der User nicht mal eine eMail Adresse angeben. Wer sagt, dass das eine doofe bzw. schlechte Idee ist, der soll direkt Bescheid sagen und natürlich auch warum.

*meld* Die E-Mail-Adresse muss abgefragt werden, damit man dem User im Notfall ein neues Passwort zugeschickt werden kann, außerdem würde man andernfalls Spammern leichtes Spiel machen. Die E-Mail-Adresse muss natürlich auch per double-opt-in bestätigt werden.

Außerdem ist das Passwort nicht verschlüsselt. Im Idealfall geschieht das schon auf dem Client oder es wird verschlüsselt (z. B. HTTPS) zum Server übertragen, damit man es nicht durch "abhören" der Verbindung erfährt.

Hoffe, ich konnte helfen,
webmaster3000
webmaster3000
HTML-Doctor
 
Beiträge: 257
Registriert: Donnerstag 29. September 2011, 16:32
Wohnort: Irgendwo in Thüringen

Re: Sichere Registrierung - Hallo?????

Beitragvon Yamram » Mittwoch 18. Januar 2012, 18:33

@webmaster3000:
Endlich mal jemand, der konstruktiv antwortet ;)
Okay, dann muss ich wohl doch die eMail Adresse abfragen ;) Meinst du, es wäre dann sinnvoll, dass ich das Passwort einfach generieren lasse und dann in die eMail packe??
Benutzeravatar
Yamram
HTML-Sonderfall
 
Beiträge: 616
Registriert: Samstag 5. Februar 2011, 20:05
Wohnort: C:\Users\Yamram\Desktop\Papierkorb.ink

Re: Sichere Registrierung - Hallo?????

Beitragvon Sören » Mittwoch 18. Januar 2012, 19:31

Wenn du das Passwort in die E-Mail packst, verlange aber von dem Benutzer, dass er, sobald er auf die E-Mail klickt und sich eingeloggt hat, sein Passwort ändert, damit eventuelle Mitleser der E-Mail keinen Zugriff mehr haben.

PS: Vielleicht bekommst du mehr Antworten, wenn du dich an Reglen wie diese hier hältst:
Regeln hat geschrieben:Bitte stelle nicht jede kleinste Website vor, die du machst. Stelle besser etwas fertig und präsentiere uns dann etwas ausgefeiltes, das man auch wirklich bewerten kann.

Ich antworte dir jetzt auch nur, weil du eine konkrete Frage gestellt hab. Ich hab auch keine Lust mir jeden kleinsten Code anzuschauen und außerdem sind Satzzeichen immer noch keine Herdentiere :wink:

@webmaster:
Auf dem Client verschlüsseln?

Dann kann doch jemand, der z.B. durch Datenbank-Hacken, an verschlüsselte Passwörter gekommen ist, diese einfach per JavaScript an den Server schicken und ist angemeldet, oder versteh ich da jetzt was falsch?
Das würde dann das Verschlüsseln unnötig machen.
Benutzeravatar
Sören
HTML-Acrobat
 
Beiträge: 851
Registriert: Samstag 5. Juni 2010, 16:00

Re: Sichere Registrierung - Hallo?????

Beitragvon Yamram » Mittwoch 18. Januar 2012, 19:50

@Sören:
Alles klar, das ist ja leicht zu realisieren :)

Ja, aber, wenn das Usersystem nicht sicher ist, dann ist ja eigentlich alles doof, weil die Basis ja durch das Loginsystem gebildet wird ;)

Ja, werde es ändern, wenn du drauf bestehst :)
Benutzeravatar
Yamram
HTML-Sonderfall
 
Beiträge: 616
Registriert: Samstag 5. Februar 2011, 20:05
Wohnort: C:\Users\Yamram\Desktop\Papierkorb.ink

Re: Sichere Registrierung - Hallo?

Beitragvon Sören » Donnerstag 19. Januar 2012, 14:09

Nur weil es für dein Projekt wichtig ist, ist es aber trotzdem nichts Fertiges / nicht das ganze Projekt.
Benutzeravatar
Sören
HTML-Acrobat
 
Beiträge: 851
Registriert: Samstag 5. Juni 2010, 16:00

Re: Sichere Registrierung - Hallo?

Beitragvon drPHIP132 » Donnerstag 19. Januar 2012, 14:15

bitte Form Action= leeren
Benutzeravatar
drPHIP132
HTML-Acrobat
 
Beiträge: 744
Registriert: Samstag 15. Januar 2011, 19:10
Wohnort: Sachsen, Erzgebirge

Re: Sichere Registrierung - Hallo?????

Beitragvon webmaster3000 » Donnerstag 19. Januar 2012, 15:28

Yamram hat geschrieben:Meinst du, es wäre dann sinnvoll, dass ich das Passwort einfach generieren lasse und dann in die eMail packe?

Ja, so meinte ich es, aber als "Passwort vergessen"-Funktion.

Sören hat geschrieben:Dann kann doch jemand, der z.B. durch Datenbank-Hacken, an verschlüsselte Passwörter gekommen ist, diese einfach per JavaScript an den Server schicken und ist angemeldet, oder versteh ich da jetzt was falsch?

Ich meinte nicht direkt verschlüsseln, sondern eher hashen, z. B. mit md5. Es ging ja such nur darum, dass keine unverschlüsselten Passwörter übertragen werden, falls jemand die Verbindung belauscht. Wenn das nicht geht, wäre das auch nicht schlimm, viele Logins sind unverschlüsselt.
webmaster3000
HTML-Doctor
 
Beiträge: 257
Registriert: Donnerstag 29. September 2011, 16:32
Wohnort: Irgendwo in Thüringen

Re: Sichere Registrierung - Hallo?

Beitragvon Yamram » Donnerstag 19. Januar 2012, 18:23

@Sören: Ja, keine Angst. Ich werde schon nicht jeden Part meines Projekt einzeln checken lassen. Aber ich finde halt einfach, dass der Punkt Usersystem ein sehr wichtiger ist, weil es, wie gesagt, die Basis bildet.

@drPHIP132: Das habe ich wohl wegen dem ganzen Stress verkackt. Danke :)

@webmaster3000: Achso, also darf der User sich das Passwort doch aussuchen und sein Account wird dann erst durch einen Link, der in der eMail steht, aktiviert. Dann werde ich das mal so machen ;)

EDIT - 19.01.2012 - 19:00 Uhr
Ich habe mir gedacht, dass ich ja einfach einen Code machen kann. Dieser könnte zum Beispiel das md5 verschlüsselte aktuelle Datum mit Uhrzeit sein. Was sagt ihr dazu?!

EDIT - 19.01.2012 - 19:53 Uhr
Das mit dem Bestätigen des Accounts habe ich jetzt mal nach meiner Idee umgesetzt. Warum ich es nicht so mache, wie beim PHP Kurs? Weil ich MEINE Ideen benutzen will :) Der Registrierungscode ist nun ziemlich schwer zu knacken ;)

Und noch mal alles zusammen:
Also, der Besucher gibt die Daten ein und die werden wie oben entsprechend überprüft. Wenn alles in Ordnung ist, wird versucht eine Email an die Adresse zu senden. Diese Email sieht in etwa so aus:
Code: Alles auswählen
Sehr geehrter Herr Mustermann,
Sie haben sich für die Anwendung Cloud registriert. Um Ihre Registrierung abzuschließen, bestätigen Sie Ihre Registrierung mit folgendem Code:

********************************

oder rufen Sie folgenden Link auf:

http://localhost/cloud/confirm.php?code=**********************************

Hoffentlich funktioniert alles gut :)

Mit freundlichen Grüßen,
Ihr Cloud Service


So, was kann ich jetzt noch verbessern? Ist das jetzt sicher genug?
Benutzeravatar
Yamram
HTML-Sonderfall
 
Beiträge: 616
Registriert: Samstag 5. Februar 2011, 20:05
Wohnort: C:\Users\Yamram\Desktop\Papierkorb.ink

Re: Sichere Registrierung - Hallo?

Beitragvon Basiii » Donnerstag 19. Januar 2012, 20:22

Eure Überwachungstheorien finde ich irgendwie mehr als nur lächerlich..

Eine Verbindung abhören, da gehört mehr zu als zu wissen was eine IP ist!

Leute die das Wissen haben so etwas zu bewerkstelligen sind absolut nicht daran interessiert irgendwelchen unkommerziellen Projekten zu schaden.

Das selbe gilt für das Abfangen von E-Mails, das macht man nicht mit einem kleinen Programm das man sich aus dem Internet runterlädt, da gehört mächtig viel Wissen dazu, also mal immer halblang.

Aber um mal einen Lösungsweg gegen Verschwörung, Abhörung und sonstigen Attacken im Internet:

Wer ein Passwort einfach durch die md5 Funktion jagt und es dann speichert ist doch selber Schuld an seiner mangelnden Sicherheit, es gibt so viele tolle Wege Dinge zu verändern so das selbst beim Entschlüsseln mit einer Regenbogentabelle nur Müll heraus kommt, ein Beispiel:

Wir bekommen aus dem Formular unter Anderem einen Benutzernamen und ein Passwort:

Code: Alles auswählen

<?php
  $benutzername 
= $_POST['benutzername']
  $passwort =     $_POST['passwort']
?>    


Wie würde man nun normal vorgehen? Richtig:

Code: Alles auswählen

<?php
  $passwort_verschluesselt 
= md5($passwort);
  # Eintragen in die Datenbank
?>


Hmm.. gut! Angenommen ich komme über einige Umwege an den Datenbankeintrag, nehmen wir an der Benutzer wählt als Passwort geheim, ich sehe den String: e8636ea013e682faf61f56ce1cb1ab5c
Meine Regenbogentabelle hat ungefähr 10 Minuten gesucht, und schon sehe ich: Das Passwort lautet geheim.. Aww.. schade aber auch was?

Warum sah die Verschlüsselung nicht so aus:

Code: Alles auswählen

<?php
  $erkennungsmerkmal 
= "IcH 4 biN EiNe z3ich3nk3TTe, weLchE 7 keInEn SinN erGibT... toTe kazze!";
  $passwort_verschluesselt = sha1(strrev(md5($benutzername) . md5($erkennungsmerkmal) . md5($passwort))); 
?>
  


Als Ergebnis erhalten wir: d11b24028c2b3dfcc21bfcf3df4655a7ef09c4a2 Hier fehlt mir die passende Tabelle, aber ich bezweifel stark das dieser String überhaupt eingetragen wäre, schließlich wurde folgendes gehasht:

Code: Alles auswählen
c5ba1bc1ec65f16faf286e310ae6368e49b7a31e11c23edfad6d791c05f05dc4f283358bc9ea967d3b77fa7241b59af6


Beim besten Willen, das steht in keiner Regenbogentabelle! Und selbst wenn, wie entschlüssel ich das jetzt? Woher soll ich jetzt wissen das das 3 md5 Hashwerte am Stück sind, aber auch noch umgekehrt? Also lasse ich es gut sein..

Dadurch das wir $erkennungsmerkmal in unserer Datei haben, können wir den Login genau so auswerten.

Der Erklärbär hat geschrieben:
Die Regenbogentabelle

Eine Regenbogentabelle ist eine riesige Tabelle, in der entschlüsselte Strings eingetragen sind, das sieht in etwa so aus:

Code: Alles auswählen
0fb08c59ce072579332e2a7e2f7fb1d4 | Apfel
5a24367823a598bedc8f2c9af2a0e014 | Birne

So lassen sich eigentlich nicht entschlüsselbare Strings doch entschlüsseln.

Eine verwertbare Regenbogentabelle ist ungefähr 2 Terrabyte (2000 Gigabyte, was ca. 2.000.000.000.000 Zeichen sind) groß.
Benutzeravatar
Basiii
HTML-Acrobat
 
Beiträge: 1139
Registriert: Dienstag 12. Januar 2010, 13:57

Re: Sichere Registrierung - Hallo?

Beitragvon Yamram » Freitag 20. Januar 2012, 20:44

Ah interessant. Regenbogentabellen habe ich noch nie gehört ;) Also ich halte fest, ich muss das Passwort anstatt nur md5 noch mit anderen Sachen kombiniert verschlüsseln? :wink:
Benutzeravatar
Yamram
HTML-Sonderfall
 
Beiträge: 616
Registriert: Samstag 5. Februar 2011, 20:05
Wohnort: C:\Users\Yamram\Desktop\Papierkorb.ink

Re: Sichere Registrierung - Hallo?

Beitragvon Basiii » Freitag 20. Januar 2012, 21:09

md5 ist gut, aber eben nicht einfach nur md5 aufs Passwort und fertig, sondern wie in meinem Beispiel 8)
Benutzeravatar
Basiii
HTML-Acrobat
 
Beiträge: 1139
Registriert: Dienstag 12. Januar 2010, 13:57

Re: Sichere Registrierung - Hallo?

Beitragvon Yamram » Freitag 20. Januar 2012, 21:11

Gut dann habe ich das jetzt verstanden. Aber wieso kann man md5 nicht einfach entschlüsseln?
Benutzeravatar
Yamram
HTML-Sonderfall
 
Beiträge: 616
Registriert: Samstag 5. Februar 2011, 20:05
Wohnort: C:\Users\Yamram\Desktop\Papierkorb.ink

Re: Sichere Registrierung - Hallo?

Beitragvon drPHIP132 » Freitag 20. Januar 2012, 21:12

Es ist eine einweg funktion. aber glaube mir ich verstehe es auch nicht.
Es muss einfach gehen. formel umstellen vom algorythmus irgendwie..
Benutzeravatar
drPHIP132
HTML-Acrobat
 
Beiträge: 744
Registriert: Samstag 15. Januar 2011, 19:10
Wohnort: Sachsen, Erzgebirge

Re: Sichere Registrierung - Hallo?

Beitragvon Yamram » Freitag 20. Januar 2012, 21:14

Ja, das dachte ich mir auch. Ich habe sogar ein bisschen rumprobiert und dann kam mir der Gedanke, dass ICH das bestimmt nicht knacke ;)
Benutzeravatar
Yamram
HTML-Sonderfall
 
Beiträge: 616
Registriert: Samstag 5. Februar 2011, 20:05
Wohnort: C:\Users\Yamram\Desktop\Papierkorb.ink

Nächste

Beiträge bitte im neuen Forum

Zurück zu PHP

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron