Du bist nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: DeveloperTalk. Falls dies dein erster Besuch auf dieser Seite ist, lies bitte die Hilfe durch. Dort wird dir die Bedienung dieser Seite näher erläutert. Darüber hinaus solltest du dich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutze das Registrierungsformular, um dich zu registrieren oder informiere dich ausführlich über den Registrierungsvorgang. Falls du dich bereits zu einem früheren Zeitpunkt registriert hast, kannst du dich hier anmelden.

xerox

Schüler

  • »xerox« ist der Autor dieses Themas

Beiträge: 61

Registrierungsdatum: 16.07.2011

Danksagungen: 4

  • Private Nachricht senden

1

16.07.2011, 22:39

Registrierungsscript

Ich habe mit hilfe ein Registrierungsscript geschreiben, mit viel hilfe :D

Jetz bruache ich noch eine Loginfunktion.
Man soll eine seite nur sehen wenn man eingelogt ist.

dazu bruach ich jetz hilfe

meine codes:

Registerieungscript:

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<HTML>
<Head>
<Title>Werde Mitglied</Title>
</Head>
<form action="regi-db.php" method="post">
<table>
<tr>
  <td>E-Mail:*</td>
  <td><input type='text' name='email' /></td>
 </tr>
<tr>
 <td>Passwort:*</td>
  <td><input type='password' name='password' /></td>
 </tr>
<tr>
  <td>Name:*</td>
  <td><input type='text' name='name' /></td>
 </tr>
<tr>
  <td>Vorname:*</td>
  <td><input type='text' name='vname' /></td>
 </tr>
<tr>
  <td>Straße:*</td>
  <td><input type='text' name='street' /></td>
 </tr>
<tr>
  <td>Stadt:*</td>
  <td><input type='text' name='city' /></td>
 </tr>
<tr>
 <td>Hausnummer:*</td>
  <td><input type='text' name='housenumber' /></td>
 </tr>
</table><br>
<input type='submit' value='Registrieren' />&nbsp&nbsp&nbsp&nbsp<input type="reset"/>
</form>
*Pflichtfelder<br>
<img src="http://bs-werke.co.de/images/regi.bmp"><br>
<u>INFO: Die E-Mail Adresse ist gleichzeitig der Benuzername zum Einlogen.</u><br>
<p><strong>WICHTIG:</strongEs müssen alle Felder ausgefüllt werden !</p>


regi-db.php:

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<?php
if (isset($_POST["email"]))
{
 mysql_connect("localhost""user""PW");
    mysql_select_db("db");
 $mail mysql_real_escape_string($_POST["email"]);
 $name mysql_real_escape_string($_POST["name"]);
 $vname mysql_real_escape_string($_POST["vname"]);
 $street mysql_real_escape_string($_POST["street"]);
 $city mysql_real_escape_string($_POST["city"]);
 $housenumber mysql_real_escape_string($_POST["housenumber"]);
 $password mysql_real_escape_string($_POST["password"]);
  if(empty($mail))
    {
    die("Bitte gib deine  Emailadresse  an");
    }
 if(empty($password))
    {
    die("Du hast vergessen ein Passwort einzugeben");
    }
 if(empty($name))
    {
    die("Bitte füllen sie das Feld Name aus");
    }
 if(empty($vname))
    {
    die("Bitte füllen sie das Feld Vorname aus");
    }
 if(empty($street))
    {
    die("Bitte die Strasse auch angeben");
    }
 if(empty($city))
    {
    die("Bitte füllen sie das Feld Stadt aus");
    }
 if(empty($housenumber))
    {
    die("Bitte füllen sie das Feld Hausnummer aus");
    }
 $sql "SELECT `email`
  FROM `users`
  WHERE `email` = '" $mail "'
  LIMIT 1;";
 $result mysql_query($sql);
 $emailexists false;
 if (mysql_num_rows($result) > 0)
 {
  $emailexists true;
  $accountcreated false;
 } else
 {
  mysql_query("INSERT INTO users (email,name,vname,street,city,housenumber,password) VALUES ('" $mail "','" $name "','" $vname "','" $street "','" $city "','" $housenumber "','" $password "')");
  $accountcreated true;
 }
}
?>
<HTML>
 <head>
  <title>Danke für die Registrierung</title>
 </head>
 <body onload="zu">
  <script LANGUAGE="JavaScript">
   var zu;
   setTimeout("location.href='http://bs-werke.co.de'", 10000);
  </script>
  <div align="center">
   <?php if ($accountcreated): ?>
    <h3>Vielen dank für die Registrierung</h3><br>
    <img src="http://bs-werke.co.de/images/Danke.jpg"><br>
    
   <?php endif; ?>
   <?php if ($emailexists): ?>
    <h2>Die Registrierung war nicht erfolgreich!</h2>
    <strong><p>Die von Ihnen eingegebene eMailadresse wird bereits genutzt!</p></strong><br>
    <img src="http://bs-werke.co.de/images/regi-fehler.png" width="180" height="180"><br><br>
   <?php endif; ?>
  Sie werden in 10 Sec. zur Startseite weitergeleitet<br>
  <a href="Startseitehttp://bs-werke.co.de">Startseite</a>
 </div>
</HTML>

Simon

Profi

Beiträge: 725

Registrierungsdatum: 14.06.2011

Danksagungen: 210

  • Private Nachricht senden

2

16.07.2011, 22:45

Hey, willkommen im DeveloperTalk.

Zu deinem Problem: Ich würde erstmal 2 Dateien erstellen. Erstere überprüft, ob der Benutzer eingeloggt ist.
Zweitere beinhaltete das Loginformular.
In die 1. Packt man dann eine Weiterleitung zum Loginformular, bzw. bindet dieses ein, wenn der Benutzer nicht eingeloggt ist.
Wenn der Benutzer eingeloggt ist, dann wird die original Datei ausgeführt.


Desweiteren empfehle ich dir, dass du die Passwörter hasht. Besser wäre es wenn du diese noch mit Salts modifizierst und mehrfach hasht.

xerox

Schüler

  • »xerox« ist der Autor dieses Themas

Beiträge: 61

Registrierungsdatum: 16.07.2011

Danksagungen: 4

  • Private Nachricht senden

3

16.07.2011, 22:50

Ähm oky,

Ich habe das bis jetz :D

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
<? 
session_start() 
mysql_connect("localhost""user""PW"); 
mysql_select_db("db"); 
SELECT FROM `usersWHERE `email` = '".$mail."' AND `password` = '".$password."' LIMIT 1?> 
<HTML> 
<HEAD> 
<title>Log in</title> 
</HEAD> 
</HTML>

psycho

Fortgeschrittener

Beiträge: 413

Registrierungsdatum: 26.06.2011

Danksagungen: 80

  • Private Nachricht senden

4

16.07.2011, 22:50

Erstmal herzlichen Willkommen im unseren Forum :)

Also, freut mich das du in PHP programmierst, ist glaube ich auch am besten wenn man Anfänger ist.

Nun zu deinem Script:
Ich würde, bei dem Eintrag der Daten noch ein paar mehrere Überprüfungen machen und statt empty "== ''' " verwenden, da man empty auch austricksen kann.
Des Weiteren würde ich alle Variablen mit isset überprüfen ob sie überhaupt gesetzt wurden.
Und du könntest weitere Überprüfungen benutzen, wie z.B Syntax der Mailadresse (sh. Reguläre Ausdrücke), die Länge des Passwortes etc.

Das wollte ich nur Anmerken im Bezug auf die Sicherheit, die ich gerade beim Überfliegen entdeckt habe.

Um jetzt zu kontrollieren ob man eingeloggt ist, erstellst du ein Formular (name / Passwort) und fragst diese mit der DB ab ob die Kombination (mit Hilfe von Where oder in_array) vorhanden ist. Wenn sie vorhanden ist, wird der benutzer auf eine Adminseite weitergeleitet, sonst wird eine Fehlermeldung ausgegeben.
Wenn du bei Loggings bist, kannst du dich auch gleich mit Sessions beschäftigen, um Daten von Usern über mehrere Seiten zu speichern, wie Rechte des Users, History, Warenkarb etc.

Ich hoffe ich konnte deine Frage beantworten, wenn du noch Fragen hast, stell sie :D
Computer sind dazu da, uns die Arbeit zu
erleichtern, die wir ohne sie gar nicht hätten.

Simon

Profi

Beiträge: 725

Registrierungsdatum: 14.06.2011

Danksagungen: 210

  • Private Nachricht senden

5

16.07.2011, 22:52

Was hat denn Empty für Nachteile?
Den Vorteil, denn Empty gegenüber == "" hat, ist das keine Notice geworfen wird, wenn sie nicht gesetzt ist.
Deswegen spart man sich durch empty den isset

psycho

Fortgeschrittener

Beiträge: 413

Registrierungsdatum: 26.06.2011

Danksagungen: 80

  • Private Nachricht senden

6

16.07.2011, 22:52

Mist zu langsam^^

Na das ist doch schon gut.
Du musst jetzt eigentlich noch überrprüfen ob ein Ergebnis gefunden wurde, dann ist er eingeloggt, und wenn nicht, dann sind die Anmelde Daten falsch.
Du hast eigentlich schon alles gehabt :)
Computer sind dazu da, uns die Arbeit zu
erleichtern, die wir ohne sie gar nicht hätten.

psycho

Fortgeschrittener

Beiträge: 413

Registrierungsdatum: 26.06.2011

Danksagungen: 80

  • Private Nachricht senden

7

16.07.2011, 22:53

Was hat denn Empty für Nachteile?
Den Vorteil, denn Empty gegenüber == "" hat, ist das keine Notice geworfen wird, wenn sie nicht gesetzt ist.
Deswegen spart man sich durch empty den isset
Irwo mal gelesen, wo ich angefangen hab, aber es war irwas anderes noch...^^

Ich glaube das war im Bezug auf Hexacodes oder ähnliches. Vielleicht fällts mir ein.
Computer sind dazu da, uns die Arbeit zu
erleichtern, die wir ohne sie gar nicht hätten.

xerox

Schüler

  • »xerox« ist der Autor dieses Themas

Beiträge: 61

Registrierungsdatum: 16.07.2011

Danksagungen: 4

  • Private Nachricht senden

8

16.07.2011, 23:01

Erstmal danke für die vilen antworten, mit der Sicherheit hab ihr recht, und ich danke euch auch, aber ich würder ganz gern erst mal alles funktionffähig machen , und das "fein tuning" erst am ende, da sich eh noch niemand auf der seite registreiren kann. und sie zu 96% unbekannt ist,

Mein Problem ist nur das ich von HTML & Javascript komme,

Mit PHP Hab ich also fast 0 erfahrung, deswegen brauche ich keine selbsthilfe sondern hilfe mit Codeschnipsel. :D
Wie ich immer sage: wenn ich selbsthilfe wills schau in ein Tutorial, wenn ich hilfe will stell ich fragen ! :D

Es geht jetz erstmal nur um die Log infunktion, und die geshcützte seite, Mit der Sicherheit habt ihr aber Recht.

psycho

Fortgeschrittener

Beiträge: 413

Registrierungsdatum: 26.06.2011

Danksagungen: 80

  • Private Nachricht senden

9

16.07.2011, 23:07

Du hast ja geschrieben zu 96% unbekannt... Was meinst du damit?
Das die Seite bereits online ist?

Wenn ja, würde ich sie aus Gründen der Sicherheit wieder weg nehmen, da dein Script doch relativ fehleranfällig ist und evtl Schaden angerichtet werden kann.

Und das mit der Sicherheit...: Machs lieber gleich, später macht man es ja doch nicht mehr, gilt ebenso für Kommentare :D
Computer sind dazu da, uns die Arbeit zu
erleichtern, die wir ohne sie gar nicht hätten.

Simon

Profi

Beiträge: 725

Registrierungsdatum: 14.06.2011

Danksagungen: 210

  • Private Nachricht senden

10

16.07.2011, 23:08

Das Thema hatte ich vorhin mit Christian auch vorhin :D

(@Alex gelöschten Beitrag :( )

Ich habe die Meinung vertreten, dass sich auch mit MD5 etwas sicheres machen lässt.
Folgendes hatte ich errechnet :D

Zitat von »"Simon @ Skype"«

[18:29:09] Simon Roesler: nehmen wir mal ein beispiel:
Ich habe einen hash und den würde man mit irgendeinem superpc in 30Minuten knacken können
[18:29:59] Simon Roesler: durch 50.000 runden brauch ich unmerkbar länger, aber der hacker bräuchte anstatt 30minuten 1042 Tage

xerox

Schüler

  • »xerox« ist der Autor dieses Themas

Beiträge: 61

Registrierungsdatum: 16.07.2011

Danksagungen: 4

  • Private Nachricht senden

11

16.07.2011, 23:09

Die mainseite ist zu 96% unbekannt.
Das Registerierungscript ist zu 100% Unbekannt :D

Kann mir jemand bei den Sicherheitslücken helfen ? (da ich kaum PHP kann :D )

Alex

Fortgeschrittener

Beiträge: 372

Registrierungsdatum: 23.06.2011

Wohnort: /home/alex

Danksagungen: 117

  • Private Nachricht senden

12

16.07.2011, 23:10

@Simon: War das jetzt ne Antwort auf meins? Das hab ich gelöscht weil das irwie nur redundant war xDD

@TS: Herzlich willkommen!

Ich würde auch erstmal das Script zu ende schreiben, und dann die ganzen Sicherheitslücken entfernen :)
alexthinking.com - yet another computer weblog

Zitat

Chuck Norris knows the state of schroedinger's cat.

Simon

Profi

Beiträge: 725

Registrierungsdatum: 14.06.2011

Danksagungen: 210

  • Private Nachricht senden

13

16.07.2011, 23:12

Jop, war es. Denn eigentlich definiert sich eine sichere Hashfunktion dadurch, dass sie einen langsamen Algo hat.
Durch 50.000 Runden würde dieser zwangsweise langsam werden :D

xerox

Schüler

  • »xerox« ist der Autor dieses Themas

Beiträge: 61

Registrierungsdatum: 16.07.2011

Danksagungen: 4

  • Private Nachricht senden

14

16.07.2011, 23:13

Danke Alex, ich weiss net warum, aber irgend etwas treibt mich dazu erst das script fertig zu machen, so viel ist das ja nicht mehr :)

Aber ich brauche trotzdem hilfe weill ich kaum PHP erfahrung habe. :D

psycho

Fortgeschrittener

Beiträge: 413

Registrierungsdatum: 26.06.2011

Danksagungen: 80

  • Private Nachricht senden

15

16.07.2011, 23:14

und sie zu 96% unbekannt ist
Es ist vollkommen egal, ob die Seite unbekannt ist, die Seite wird trotzdem gefunden, für die Leute, die Schaden anrichten.
Ich glaube Patrick kann davon sehr viel sagen. Er hat auch nur eine kleine Seite und hatte Anfangs beim seinem Gästebuch kein captcha, nach einer Woche hatte er 10 Seiten Spam.

MMh, ich würde ja lieber Sha256 nehmen :D

Aber wir sollten ihn vlt noch darauf hinweisen, das sowas md5(sha256) Schwachsinn ist :D
Man sollte nur den selben Hash nehmen^^

Ich frag mich, ob das bei Rainbowtables trotzdem klappt.
Aber es ist trotzdem blödsinn das password 10mal oder mehr zu hashen^^
Wenn der User ein einigermaßen sicherers Passwort wählt, dann reicht auch einmal ;)
Computer sind dazu da, uns die Arbeit zu
erleichtern, die wir ohne sie gar nicht hätten.

Erik

Profi

Beiträge: 1 274

Registrierungsdatum: 22.06.2011

Wohnort: Deutschland ;)

Danksagungen: 307

  • Private Nachricht senden

16

16.07.2011, 23:15

Zitat

SELECT * FROM `users` WHERE `email` = '".$mail."' AND `password` = '".$password."' LIMIT 1;


also, erstens brauchst du nicht alle spalten, also SELECT * hat zuviel overhead. Zweitens ist die mail addresse unique, deswegen brauch man auch kein limit, du kannst nur 0 oder 1 ergebnis haben.
Nehen wir mal an, du hast die eingaben validiert, escaped, die mail gelowercased und das passwort verschlüsselt, dann bist du fast fertig...

PHP-Quelltext

1
2
3
4
5
6
7
8
$result mysql_fetch_array(mysql_query("SELECT COUNT(*) from `users` WHERE `email = '" $mail "'` AND `password` = '" $password "'"));
if($result[0] == 1) {
     // TODO: Session variable setzen
     header("location: geschuetzte_seite.php");
     exit();
} else {
     //TODO: Formular nochmal ausgeben, fehlermeldung
}


so könnte es gehen...

PS: da war wieder einer schneller :D
Beste Webite im Internet ( ͡° ͜ʖ ͡°)
xinra.de

psycho

Fortgeschrittener

Beiträge: 413

Registrierungsdatum: 26.06.2011

Danksagungen: 80

  • Private Nachricht senden

17

16.07.2011, 23:16

Durch 50.000 Runden würde dieser zwangsweise langsam werden
Aber das ist denn auch irwo irsinnig?^^
Was bringt die höchste Sicherheit, wenn ich ein Jahr brauche um in mein Haus reinzukommen?^^
Computer sind dazu da, uns die Arbeit zu
erleichtern, die wir ohne sie gar nicht hätten.

psycho

Fortgeschrittener

Beiträge: 413

Registrierungsdatum: 26.06.2011

Danksagungen: 80

  • Private Nachricht senden

18

16.07.2011, 23:18

Wie schnell hier alle schreiben^^
Als wenn alle nur darauf warten, das einer Antwortet :D

Dieser scheiß Reload ist immer zu langsam, jedes mal, wenn ich was zitieren will, ist immernoch der alte Text drin! :(
Computer sind dazu da, uns die Arbeit zu
erleichtern, die wir ohne sie gar nicht hätten.

Simon

Profi

Beiträge: 725

Registrierungsdatum: 14.06.2011

Danksagungen: 210

  • Private Nachricht senden

19

16.07.2011, 23:18

Das würde ich nicht schreiben.
Meine ziemlich simple Grafikkarte kann schon 450 - 500 Millionen MD5 / Sekunde generieren.
Dazu kommt meine einfache Dualcore mit 150 MD5 / Sekunde dazu.


Wenn man jetzt nen guten PC hat. (Oder Botnet oder auch Amazon Cloud :D) könnte man rellativ schnell md5's mit einer Runde knacken.
Nimmt man aber nun das ganze mit 50.000x, dann sieht es schon ganz anders aus.
SHA256 hätte den Vorteil, dass es mehr Zeichen hat und es dadurch weniger Kollisionen gibt :D

Erik

Profi

Beiträge: 1 274

Registrierungsdatum: 22.06.2011

Wohnort: Deutschland ;)

Danksagungen: 307

  • Private Nachricht senden

20

16.07.2011, 23:20

Geht ab wa :D

Aber bruteforce bringts eig auch nciht so richtig oder? Ich meine wenn denn wird man doch gegen häufig verwendete Passwörter testen, und da wäre ein Salt schon recht sicher...
Beste Webite im Internet ( ͡° ͜ʖ ͡°)
xinra.de