WinFuture-Forum.de: Login-system - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Login-system


#1 Mitglied ist offline   bluescorp 

  • Gruppe: aktive Mitglieder
  • Beiträge: 323
  • Beigetreten: 23. Oktober 04
  • Reputation: 0
  • Wohnort:nähe Wien

geschrieben 06. April 2009 - 09:19

Hiho!

Ich bastel derzeit an einem Login-System und stoße dabei leider auf folgendes Problem:

Login funktioniert soweit, User und PW wird in der Datenbank gespeichert und kontrolliert. Wenn man sich einloggt wird man per Header - Location auf die "geheime" Seite weitergeleitet, nur da ist jetzt mein Problem:

Ich möchte, dass sich der Benutzer anmeldet und dann sofort auf die "Benutzerdatenändern"-Seite gelangt. Soweit so gut, ich schicke mit der Header - Location den Zusatz ?user=$id mit und lese die ID in der ändern-Seite mit GET aus (mit POST funktioniert das ganze leider nicht)

Wenn man jetzt jedoch auf der ändern-Seite einfach eine andere ID im Zusatz eingibt, gelangt man auf die Seite des anderen Benutzers und kann somit auch dem seine Daten ändern.

Gibt es eine Möglichkeit den User auf seiner eigenen Seite "einzusperren"?

Komm da leider nicht drauf :)

PHP-Teil admin.php:
CODE
<?php

// Session starten
session_start();

// Variablen deklarieren
$_SESSION['angemeldet'] = false;
$benutzername = '';
$passwort = '';
$fehlermeldung = '';

// Funktion zum verbinden zur Datenbank
function db_connect()
{
// Zugangsdaten für die DB
$dbhost = 'xxx';
$dbuser = 'xxx';
$dbpass = 'xxx';
$dbname = 'xxx';

// Verbindung herstellen und Verbindungskennung zurückgeben
$conid = mysql_connect( $dbhost, $dbuser, $dbpass ) or die( 'Verbindungsfehler!' );
if (is_resource( $conid ))
{
mysql_select_db( $dbname, $conid ) or die( 'Datenbankfehler!' );
}
return $conid;
}

// Prüfen ob ein Cookie existiert und zu einem gültigen User gehört
if (isset( $_COOKIE['UserLogin'] ))
{
// Wert aus dem Cookie mit dem Wert in der Datenbank vergleichen
$conid = db_connect();
$sql = "SELECT
`id`
FROM
`user`
WHERE
`cookie_hash` = '" .mysql_real_escape_string( $_COOKIE['UserLogin'] ). "' AND
`aktiviert` = 1";

$ergebnis = mysql_query( $sql, $conid );

// Stimmt der Cookie Hash überein, wurde 1 Datensatz gefunden
if (mysql_num_rows($ergebnis) == 1)
{
// Wenn der Hash aus dem Cookie mit dem aus der DB übereinstimmt,
// Session Variable setzen und auf die geheime Seite weiterleiten
$_SESSION['angemeldet'] = true;
header( "Location: admin_user.php" );
exit;
}
}

// Wenn das Formular abgeschickt wurde
if (isset( $_POST['login'] ))
{
// Maskierende Slashes aus POST Array entfernen
if (get_magic_quotes_gpc())
{
$_POST = array_map( 'stripslashes', $_POST );
}

// Benutzereingabe umladen, von Leerzeichen befreien und
$benutzername = strtolower( trim( $_POST['benutzer'] ) );
$passwort = md5( trim( $_POST['passwort'] ) );

// Benutzereingabe mit User in der Datenbank vergleichen
$conid = db_connect();
$sql = "SELECT
`cookie_hash`
FROM
`user`
WHERE
LOWER(`NName`) = '" .mysql_real_escape_string( $benutzername ). "' AND
`Kennwort` = '" .mysql_real_escape_string( $passwort ). "' AND
`aktiviert` = 1";

$ergebnis = mysql_query( $sql, $conid );



// Stimmen die Benutzereingaben überein, wurde 1 Datensatz gefunden
if (mysql_num_rows($ergebnis) == 1)
{

$sql2 = "SELECT ID FROM user WHERE LOWER(NName) = '" .mysql_real_escape_string($benutzername)."' AND Kennwort = '".mysql_real_escape_string($passwort)."' AND aktiviert = 1 ";
$ergebnis2 = mysql_query($sql2, $conid);

while($row = mysql_fetch_object($ergebnis2)){
$getUserID = $row->ID;
}
// Abfrageergebnis fetchen
$usercookie = mysql_fetch_assoc( $ergebnis );

// Wenn die Anmeldung korrekt war Session Variable setzen,
// COOKIE an Browser schicken und auf die geheime Seite weiterleiten
$_SESSION['angemeldet'] = true;
setcookie( 'UserLogin', $usercookie['cookie_hash'], time()+600 );
header( "Location: admin_user.php?userid=".$getUserID."" );
exit;
}
else
{
$fehlermeldung = '<h3>Die Anmeldung war fehlerhaft!</h3>';
}
}

?>


PHP-Teil admin_user.php
CODE
<?php

// Session starten
session_start();

// Prüfen ob der Benutzer angemeldet ist
if (!$_SESSION['angemeldet'])
{
// Zum Login umleiten
header( 'location: admin.php' );
exit;
}

// Abmelden, Cookie löschen und zum Login umleiten
if ($_GET['keks'] == 'loeschen')
{
setcookie( 'UserLogin', '', time()-3600 );
session_destroy();
header( 'location: admin.php' );
exit;
}

$id = $_GET['userid'];
?>


LogIn-Script von traum-projekt.com

Dieser Beitrag wurde von bluescorp bearbeitet: 06. April 2009 - 10:19

0

Anzeige



#2 Mitglied ist offline   mibtng 

  • Gruppe: aktive Mitglieder
  • Beiträge: 298
  • Beigetreten: 03. Juni 05
  • Reputation: 0

geschrieben 06. April 2009 - 09:29

Du musst prüfen, ob der eingeloggte User überhaupt berechtigt ist, den angezeigten User zu ändern. Ein funktionierendes (gut durchdachtes) Rechtesystem zu machen ist aber alles andere als einfach...
0

#3 Mitglied ist offline   bluescorp 

  • Gruppe: aktive Mitglieder
  • Beiträge: 323
  • Beigetreten: 23. Oktober 04
  • Reputation: 0
  • Wohnort:nähe Wien

geschrieben 06. April 2009 - 09:34

naja, ich brauche eigentlich nicht viel :)

Jeder User sich selber ändern aber niemanden anderes, und der Admin alle ändern (buharhar :) )

Nur wie mach ich das?

Wenn ich in der DB ein Feld "berechtigt" mache und das zB auf 1 stelle für User und auf 2 für Admin, hab ich ja wieder das gleiche Problem, weil jeder User den Status 1 hätte und somit wieder Jeder Jeden ändern könnte, oder?

MfG
0

#4 Mitglied ist offline   bluefisch200 

  • Gruppe: aktive Mitglieder
  • Beiträge: 718
  • Beigetreten: 28. Januar 07
  • Reputation: 0

geschrieben 06. April 2009 - 09:54

Keine Ahnung ob ich dich richtig verstanden habe...
Mach doch 2 DB Tabellen
In einer sind alle User, in der anderen Rechtsstufen in denen du die Rechte der Stufen hast...danach gibst du jedem User die entsprechende Stufe...
Im Pageload Event der Seite fragst du halt das Level des Users ab und wenn dieser keine Berechtigung hat teilst du ihm das mit...weis nicht was da schwer dran ist...
Laptop: Apple Macbook / Intel Core 2 Duo 2.26 Ghz / 2 GB DDR3 / 250 GB HDD / nVidia 9400GT
Desktop: AMD "Dragon" / Phenom X4 955BE 3.2 Ghz / 8 GB DDR3 / 1 TB HDD + Intel X25 SSD / ATI 4870
Smartphone: SGS / Samsung Hummingbird 1 Ghz / 512 MB RAM / 2 GB Internal + 10 GB SD / SGX540
0

#5 Mitglied ist offline   mbe 

  • Gruppe: aktive Mitglieder
  • Beiträge: 20
  • Beigetreten: 08. Oktober 08
  • Reputation: 0

geschrieben 06. April 2009 - 09:56

Setzt nach dem "$_SESSION['angemeldet'] = true;" noch ne Zeile mit "$_SESSION['id'] = <id aus der db>;" und prüfst dann auf der Seite ob die ID, die der User angezeigt haben will, auch seine ist.

Dieser Beitrag wurde von mbe bearbeitet: 06. April 2009 - 10:46

0

#6 Mitglied ist offline   bluescorp 

  • Gruppe: aktive Mitglieder
  • Beiträge: 323
  • Beigetreten: 23. Oktober 04
  • Reputation: 0
  • Wohnort:nähe Wien

geschrieben 06. April 2009 - 10:14

ha, na das war ja leicht *gg* Danke mbe! Hatte schon die irrsinnigsten Ideen ^^

Aber die Version von bluefisch200 werde ich mir auch noch anschauen
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0