Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
[PHP] Login mit PHP und MySQL
- Ersteller krizzelfix
- Erstellt am
- Registriert
- Sep. 2005
- Beiträge
- 2.626
k
thx für deine hilfe
thx für deine hilfe
mh1001
Lt. Commander
- Registriert
- Nov. 2003
- Beiträge
- 2.039
Guten Morgen,
ich hab mich nun etwas bezüglich des der unterschiedlichen Hash-Strings umgeschaut.
In deinem obigen String wird die Differenz durch das Paragrafenzeichen ausgelöst.
Ein "SELECT MD5( '§' )" bringt führt auf dem einem Server zu einer Ausgabe von "bd9a4c255deec8944d99e01a64c1e322" während selbige SELECT-Abfrage auf dem anderem Server "6b2b98fea11e51af3043b192f719bd69" liefert.
Auch der SHA-Hash unterscheidet sich dabei und ist auf dem einem Server "eb2cb244889599f736b6cdd633c5e324f521d1bb" während er auf dem anderem zu "cf5bf6c63ba8e32483f75660b3a6a0f5d764483" führt.
Eine SOUNDEX-Abfrage führt ebenfalls zu Differenzen.
Nun ein paar Versuchen auf anderen Servern bin ich dann darauf gekommen, dass dies mit der Zeichensatz-Kodierung, die der Server verwendet, zusammenhängen wird.
Dies scheint auch tatsächlich das Problem zu sein.
Somit ist es in der Tat wichtig, dass man, sofern es Differenzen in den verwendeten Zeichensätzen gibt, nur eine der beiden Varianten einszusetzen um so Probleme zu vermeiden.
Hierbei würde ich ebenfalls dann zur PHP-Funktion raten, da diese auch datenbankunabhängig eingesetzt werden kann.
MfG mh1001
ich hab mich nun etwas bezüglich des der unterschiedlichen Hash-Strings umgeschaut.
In deinem obigen String wird die Differenz durch das Paragrafenzeichen ausgelöst.
Ein "SELECT MD5( '§' )" bringt führt auf dem einem Server zu einer Ausgabe von "bd9a4c255deec8944d99e01a64c1e322" während selbige SELECT-Abfrage auf dem anderem Server "6b2b98fea11e51af3043b192f719bd69" liefert.
Auch der SHA-Hash unterscheidet sich dabei und ist auf dem einem Server "eb2cb244889599f736b6cdd633c5e324f521d1bb" während er auf dem anderem zu "cf5bf6c63ba8e32483f75660b3a6a0f5d764483" führt.
Eine SOUNDEX-Abfrage führt ebenfalls zu Differenzen.
Nun ein paar Versuchen auf anderen Servern bin ich dann darauf gekommen, dass dies mit der Zeichensatz-Kodierung, die der Server verwendet, zusammenhängen wird.
Dies scheint auch tatsächlich das Problem zu sein.
Somit ist es in der Tat wichtig, dass man, sofern es Differenzen in den verwendeten Zeichensätzen gibt, nur eine der beiden Varianten einszusetzen um so Probleme zu vermeiden.
Hierbei würde ich ebenfalls dann zur PHP-Funktion raten, da diese auch datenbankunabhängig eingesetzt werden kann.
MfG mh1001
- Registriert
- Sep. 2005
- Beiträge
- 2.626
Hab mir mal die beide tuts durchgelesen....hab soweit alles verstenaden nur wenn ich überprüfen will ob jmd eingeloggt ist oder nicht, muss ich da auch am anfang der page session_start() ausführen?
Wenn man das machen müsste fände ich das ziemlich unlogisch da ja bei session_start eine id zugewiesen wird, und wenn ich die id dann unten überprüfe wäre das ja absolut sinnlos.......
MFG
TeWeS
Wenn man das machen müsste fände ich das ziemlich unlogisch da ja bei session_start eine id zugewiesen wird, und wenn ich die id dann unten überprüfe wäre das ja absolut sinnlos.......
MFG
TeWeS
mh1001
Lt. Commander
- Registriert
- Nov. 2003
- Beiträge
- 2.039
Ja, genau so ist es aber. Immer wenn du mit Sessions arbeiten möchtest, musst du die Funktion session_start() aufrufen.
Diese Funktion erstellt eine neue Session oder nimmt eine bestehende wieder auf.
Ob ein Benutzer angemeldet ist oder nicht kannst du dann in der Session hinterlegen.
Auf die Sessions kannst du dann wie auf eine normales Array zugreifen.
So kannst du beim erfolgreichen Anmelden beispielsweise folgendes in das Session-Array schreiben:
Nun brauchst du lediglich immer überprüfen ob dieser Wert auf "1" gesetzt ist und kannst so den Login-Status überprüfen.
Also Beispielsweise so:
MfG mh1001
Diese Funktion erstellt eine neue Session oder nimmt eine bestehende wieder auf.
Ob ein Benutzer angemeldet ist oder nicht kannst du dann in der Session hinterlegen.
Auf die Sessions kannst du dann wie auf eine normales Array zugreifen.
So kannst du beim erfolgreichen Anmelden beispielsweise folgendes in das Session-Array schreiben:
PHP:
$_SESSION["login"] = 1;
Also Beispielsweise so:
PHP:
<?php
session_start();
if($_SESSION["login"] == 1)
{
// mache dies und das
}
?>
- Registriert
- Sep. 2005
- Beiträge
- 2.626
achso...jetzt hab ich es verstanden
thx
//edit:
Nochmal kurz eine Frage zu session....wenn ich jetzt einem user die session id = 1 zuweise und ein zweiter user kommt auf die seite, kann es dann nicht passieren das die user vertauscht werden da sie ja beide die id 1 haben.....
thx
//edit:
Nochmal kurz eine Frage zu session....wenn ich jetzt einem user die session id = 1 zuweise und ein zweiter user kommt auf die seite, kann es dann nicht passieren das die user vertauscht werden da sie ja beide die id 1 haben.....
Zuletzt bearbeitet:
mh1001
Lt. Commander
- Registriert
- Nov. 2003
- Beiträge
- 2.039
Wie meinst du das? Die Session-ID wird vom Server generiert, wobei du in der Regel nicht mit diesem Vorgang direkt in Verbindung kommst. 
Eine Anfälligkeit gegen Fehler ist sehr gering und nahezu auszuschließen.
Die Daten die du innerhalb einer Session speicherst sind dagegen vollkommen losgelöst davon und werden serverseitig verwaltet und den entsprechenden Session-IDs zugeordnet.
MfG mh1001
Eine Anfälligkeit gegen Fehler ist sehr gering und nahezu auszuschließen.
Die Daten die du innerhalb einer Session speicherst sind dagegen vollkommen losgelöst davon und werden serverseitig verwaltet und den entsprechenden Session-IDs zugeordnet.
MfG mh1001
- Registriert
- Sep. 2005
- Beiträge
- 2.626
So kannst du beim erfolgreichen Anmelden beispielsweise folgendes in das Session-Array schreiben:
Nun brauchst du lediglich immer überprüfen ob dieser Wert auf "1" gesetzt ist und kannst so den Login-Status überprüfen.PHP:$_SESSION["login"] = 1;
Also Beispielsweise so:
PHP:<?php session_start(); if($_SESSION["login"] == 1) { // mache dies und das } ?>
wenn ich das aber so mache....dann wird doch jeder user auf 1 gesetzt.
oder soll ich die id aus der SQL datenbank nehmen....weil die is ja eindeutig....
Kampfgnom
Lt. Commander
- Registriert
- Jan. 2005
- Beiträge
- 1.075
So war das wohl nicht gemeint.
Du generierst beim Login eine Sessioid, die ziemlich einzigartig für den einen User ist. Zum Beispiel aus dem Namen des Users, seinem Passwort und dem jetzigen Monat. So wäre zudem gewährleistet, dass diese SessionID zeitlich begrenzt ist.
Oder natürlich du speicherst für jeden User die ID direkt in der Datenbank. Das ginge wohl auch, ist aber nicht ganz SO sicher. Wobei das beim Hobbyprogrammieren wohl recht egal sein sollte.
mfg
Du generierst beim Login eine Sessioid, die ziemlich einzigartig für den einen User ist. Zum Beispiel aus dem Namen des Users, seinem Passwort und dem jetzigen Monat. So wäre zudem gewährleistet, dass diese SessionID zeitlich begrenzt ist.
PHP:
$_SESSION["login"] = md5($passwort.$name.$monat);
Oder natürlich du speicherst für jeden User die ID direkt in der Datenbank. Das ginge wohl auch, ist aber nicht ganz SO sicher. Wobei das beim Hobbyprogrammieren wohl recht egal sein sollte.
mfg
- Registriert
- Sep. 2005
- Beiträge
- 2.626
k wollt das jetzt über die db id machen....nur jetzt gibt er mir, wenn ich auf der login page bin aus das meine id 5 ist und wenn ich auf die nächste seite gehe, sagt er mir das meine id 4 ist, woran könnte das liegen??
Um die id rauszubekommen habe ich die zeile benutzt
MFG
//edit: es existiert nochnichmal ein user mit der id 4 || 5.
Es gitb nur 32, 6 und 3(auch in der reihenfolge
Um die id rauszubekommen habe ich die zeile benutzt
PHP:
$id = mysql_query("SELECT id FROM member WHERE nick='".maskieren($_POST['username'])."'");
//edit: es existiert nochnichmal ein user mit der id 4 || 5.
Es gitb nur 32, 6 und 3(auch in der reihenfolge
Zuletzt bearbeitet:
mh1001
Lt. Commander
- Registriert
- Nov. 2003
- Beiträge
- 2.039
Da ich gestern nicht mehr Zeit hatte, konnte ich das leider nur so kurz erklären. Hier nochmals etwas anders ausgedrückt:
Wenn zwischen dem Server und einem Clienten eine Verbindung aufgebaut wird und session_start() aufgerufen wird, so generiert der Server eine Session-ID. Diese ID ist unter normalen Umständen einzigartig.
Nun kannst du in das Session-Array ($_SESSION) Daten schreiben. Diese Session-Daten werden dann nicht für sämtliche Clienten übernommen, sondern werden mit der vom Server generierten Session-ID verknüpft. Diese Session-ID nutzt ebenfalls der Browser des Clienten zur Indentifikation am Server. Ein weiterer Client hat dagegen auch eine andere Session-ID, wobei auch seine Session-Daten völlig unabhängig von denen der anderen Benutzer verwaltet werden.
Wenn du jetzt in das Session-Array zum Beispiel folgendes schreibst "$_SESSION["login"] = 1;" dann ist dies nicht generell für jeden Benutzer gesetzt, sondern lediglich für den entsprechenden Benutzer hinterlegt (sprich es wird seiner Session zugeordnet).
Daneben haben PHP-Sessions standardmäßig eine Laufzeit von 2h. Wenn in dieser Zeit keine weiteren Transaktionen aufrtreten werden die Session-Daten auf dem Server gelöscht. Diese Verfallszeit kann aber in der PHP-Konfigurationsdatei geändert werden.
MfG mh1001
Wenn zwischen dem Server und einem Clienten eine Verbindung aufgebaut wird und session_start() aufgerufen wird, so generiert der Server eine Session-ID. Diese ID ist unter normalen Umständen einzigartig.
Nun kannst du in das Session-Array ($_SESSION) Daten schreiben. Diese Session-Daten werden dann nicht für sämtliche Clienten übernommen, sondern werden mit der vom Server generierten Session-ID verknüpft. Diese Session-ID nutzt ebenfalls der Browser des Clienten zur Indentifikation am Server. Ein weiterer Client hat dagegen auch eine andere Session-ID, wobei auch seine Session-Daten völlig unabhängig von denen der anderen Benutzer verwaltet werden.
Wenn du jetzt in das Session-Array zum Beispiel folgendes schreibst "$_SESSION["login"] = 1;" dann ist dies nicht generell für jeden Benutzer gesetzt, sondern lediglich für den entsprechenden Benutzer hinterlegt (sprich es wird seiner Session zugeordnet).
Daneben haben PHP-Sessions standardmäßig eine Laufzeit von 2h. Wenn in dieser Zeit keine weiteren Transaktionen aufrtreten werden die Session-Daten auf dem Server gelöscht. Diese Verfallszeit kann aber in der PHP-Konfigurationsdatei geändert werden.
MfG mh1001
Zuletzt bearbeitet:
Quidoff
Lieutenant
- Registriert
- Feb. 2005
- Beiträge
- 897
@md5-Problem:
Nachdem ich die neue XAMPP Version 1.5.1 (mit mySQL 5.0.18) gleich installiert habe und den Zeichensatz auf "latin7_bin" gestellt habe, bekomme ich für das Paragraphenzeichen den selben md5-Wert sowohl mit der PHP als auch mit der mySQL-Funktion.
Sowohl...
...als auch...
führen zum selben Ergebnis: 6b2b98fea11e51af3043b192f719bd69
Nachdem ich die neue XAMPP Version 1.5.1 (mit mySQL 5.0.18) gleich installiert habe und den Zeichensatz auf "latin7_bin" gestellt habe, bekomme ich für das Paragraphenzeichen den selben md5-Wert sowohl mit der PHP als auch mit der mySQL-Funktion.
Sowohl...
PHP:
<?php echo md5("§"); ?>
Code:
SELECT MD5('§')
AlbertLast
Lieutenant
- Registriert
- Juni 2002
- Beiträge
- 715
das ist kein problem das ist so richtig weil md5 einstandert ist sprich es muss immer das gleiche raus kommen ...
PHP:
function maskieren($string)
{
if(get_magic_quotes_gpc())
{
$format = $string;
}
else
{
$format = addslashes($string);
}
return $format;
}
function demaskieren($string)
{
if(get_magic_quotes_gpc())
{
$format = stripslashes($string);
}
else
{
$format = $string;
}
return $format;
}
Das könnte man auch etwas eindampfen zu
PHP:
function maskieren($string)
{
return (get_magic_quotes_gpc()) ? $string : addslashes($string);
}
function demaskieren($string)
{
return (get_magic_quotes_gpc()) ? stripslashes($string) : $string;
}
Die andere Methode empfiehlt sich aber eher, dann spart man sich z.B. das ständige manuelle "demaskieren".
PHP:
$SQL = "INSERT INTO member (nick, passwort, email, name, nachname, ort, anmeldung) VALUES ('".$_REQUEST['nick']."', '".md5($_REQUEST['passwort'])."', '".$_REQUEST['mail']."', '".$_REQUEST['name']."', '".$_REQUEST['nname']."', '".$_REQUEST['ort']."', NOW())";
Auch hier sollten alle REQUEST-Variablen unbedingt "maskiert" werden.
mh1001
Lt. Commander
- Registriert
- Nov. 2003
- Beiträge
- 2.039
@Floele
Da hast du natürlich Recht, so könnte man etwas Platz sparen. Nur mir persönlich gefällt diese Schreibweise nicht so sehr. Dies ist aber Ansichtssache - vom Resultat und performancemäßig kommt bei beidem das selbe heraus.
Das mit dem Request-Variablen verstehe ich aber nicht so ganz.
Worin liegt in deinem Beispiel der Vorteil im Gegensatz zu dem Zugriff auf das $_POST- oder $_GET-Array?
Entsprechend maskiert müssen diese ebefalls alle werden.
(Fast alle, das Passwort sollte nicht maskiert werden, da es sonst zu Verfäschungen der MD5-Prüfsumme kommen kann.
)
MfG mh1001
Da hast du natürlich Recht, so könnte man etwas Platz sparen. Nur mir persönlich gefällt diese Schreibweise nicht so sehr. Dies ist aber Ansichtssache - vom Resultat und performancemäßig kommt bei beidem das selbe heraus.
Das mit dem Request-Variablen verstehe ich aber nicht so ganz.
Worin liegt in deinem Beispiel der Vorteil im Gegensatz zu dem Zugriff auf das $_POST- oder $_GET-Array?
Entsprechend maskiert müssen diese ebefalls alle werden.
(Fast alle, das Passwort sollte nicht maskiert werden, da es sonst zu Verfäschungen der MD5-Prüfsumme kommen kann.
MfG mh1001
Zuletzt bearbeitet:
mh1001 schrieb:und performancemäßig kommt bei beidem das selbe heraus.![]()
Sicher, da tut sich nicht viel, aber in meiner Version wird jedenfalls keine unnötige Variable gebraucht.
Das mit dem Request-Variablen verstehe ich aber nicht so ganz.
Worin liegt in deinem Beispiel der Vorteil im Gegensatz zu dem Zugriff auf das $_POST- oder $_GET-Array?![]()
War doch nicht meine Idee. REQUEST ist stellvertretend für GET und POST, dh. bei Request spielt es keine Rolle ob man Daten per POST oder GET Methode überträgt.
(Fast alle, das Passwort sollte nicht maskiert werden, da es sonst zu Verfäschungen der MD5-Prüfsumme kommen kann.)
Kann es eigentlich nicht. Unter welchem Umständen sollte das deiner Meinung nach passieren?
- Registriert
- Sep. 2005
- Beiträge
- 2.626
Moin
weiss jetzt jmd woran das liegen könnte das ich unterschiedliche ids rausbekomme obwohl ich immer das gleiche verfahren anwende und nichtmal user mit der id 4 oder 5 in meiner Datenbank habe?
MFG
TeWeS
weiss jetzt jmd woran das liegen könnte das ich unterschiedliche ids rausbekomme obwohl ich immer das gleiche verfahren anwende und nichtmal user mit der id 4 oder 5 in meiner Datenbank habe?
MFG
TeWeS
mh1001
Lt. Commander
- Registriert
- Nov. 2003
- Beiträge
- 2.039
@tewes
Wie sieht denn nun dein Code aus? Eigentlich dürfte dies nicht sein.
@Floele


Wenn du allerdings erst die Prüfsumme maskierst ändert dies natürlich nichts.
In dem Fall ist dies aber dennoch überflüssig, da ein MD5-Hash keine entsprechenden Zeichen enthält.
MfG mh1001
Wie sieht denn nun dein Code aus? Eigentlich dürfte dies nicht sein.
@Floele
Da gebe ich dir natürlich Recht.Sicher, da tut sich nicht viel, aber in meiner Version wird jedenfalls keine unnötige Variable gebraucht.
Sorry, hatte gedacht, dass der Code von dir kommt und schon vergeblich nach einem Unterschied bezüglich der Thematik des Maskierens gesucht.War doch nicht meine Idee. REQUEST ist stellvertretend für GET und POST, dh. bei Request spielt es keine Rolle ob man Daten per POST oder GET Methode überträgt.
Wenn du zum Beispiel ein Passwort mit einem Steuerzeichen als POST-oder GET-Variable übergibst ändert sich somit durch das/die Escape-Zeichen der String und somit auch dessen Prüfsumme.Kann es eigentlich nicht. Unter welchem Umständen sollte das deiner Meinung nach passieren?
Wenn du allerdings erst die Prüfsumme maskierst ändert dies natürlich nichts.
In dem Fall ist dies aber dennoch überflüssig, da ein MD5-Hash keine entsprechenden Zeichen enthält.
MfG mh1001
Zuletzt bearbeitet:
- Registriert
- Sep. 2005
- Beiträge
- 2.626
Login-Page:
Zu schützende seite
PHP:
<?php
session_start();
?>
.....
<?php
include 'function.php';
$DatabasePointer = mysql_connect("127.0.0.1", "" , "");
mysql_select_db("tewes_01", $DatabasePointer);
$username=$_POST['username'];
$passwort=$_POST['passwort'];
$sql_query = mysql_query("SELECT passwort FROM member WHERE nick='".maskieren($_POST['username'])."'" ) ;
$row = mysql_fetch_array($sql_query);
$id = mysql_query("SELECT id FROM member WHERE nick='".maskieren($_REQUEST['username'])."'");
if ( (mysql_num_rows($sql_query) != 0) && (md5($passwort) == $row['passwort']) )
{
echo "Willkommen, $username!";
echo "<br />";
echo$id;
$_SESSION["ID"] = $id;
?>
<br />
<a href="31.php">31</a>
<?php
}
else
{
echo"Der User und/oder das Passwort wurden nicht gefunden!";
}
?>
PHP:
<?php
session_start();
include 'function.php';
$DatabasePointer = mysql_connect("127.0.0.1", "" , "");
mysql_select_db("tewes_01", $DatabasePointer);
$id = mysql_query("SELECT id FROM member WHERE nick='".maskieren($_REQUEST['username'])."'");
echo$id;
if($_SESSION["ID"] != $id)
{
echo "Sie haben keine Berechtigung diesen bereich zu sehen";
}
else
{
?>
<html>
<head>
Ähnliche Themen
- Antworten
- 1
- Aufrufe
- 2.869
- Antworten
- 4
- Aufrufe
- 2.202