Probleme mit Login :-\

Kalma

Erfahrenes Mitglied
Hey,

ich habe einen kleines Problem mit meinem Login-System.

Und zwar:
Ich wollte jetzt ein bisschen mehr auf Sicherheit gehen, und alles in Funktionen schreiben, was soweit kein Problem ist.

Zuerst, das sind folgende Seiten, die ich habe:
index.php << da werden alle dateien includet
db_fns.php << da sind die funktionen für die db drinne.
user_auth.php << da sind die funktionen für user drinne: session prüfen, login-formular, login-check usw.

So sieht meine index.php aus:
PHP:
<?php
	require_once("fns/fns.php");	//nicht spezifierte funkitonen includen
	require_once("fns/db_fns.php");	//datenbank funktionen includen
	require_once("fns/user_auth.php"); //user funktionen: login, logout, registrieren
	session_start();
	
	do_html_header(); //den html-teil beginnen: funktion
	
	$section	= $_GET['section'];
	//login, logout, register,
	if ($section == "login")
		{ display_login_form(); } //login form anzeigen
	
	if ($section == "check_login")
		{ check_login(); } //login überprüfen

	check_valid_user(); //prüfen, ob der user eingeloggt ist
	if (($section == "") OR ($section == "index"))
		{ include "welcome.php"; } //wenn ja, welcome.php includen
	
	do_html_footer(); //den html-teil beenden: funktion
?>

halt, zuerst login-formular, dann login checken, danach mit der funktion check_valid_user(); checken, ob der user eingeloggt ist, und dann die startseite.

So.
Die Funktionen display_login_form(); und check_login(); sind in einer Datei, der user_auth.php, welche folgender Maßen aussieht:
PHP:
<?php
	function check_valid_user()	//prüfen, ob user eingeloggt
	{
		if (!isset($_session['user_id'])) {
			display_login_form(); //wenn user nicht eingeloggt ist, login anzeigen
			exit();								//und script beenden
		}
	}
	
	function display_login_form() //login formular
	{
		//stylesheet anhängen
		echo '<link href="css/display_login_form.css" rel="stylesheet" type="text/css" />';
		
		//das formular
		echo '<form action="?section=check_login" method="post">';
		echo '<div class="login_box">
						<div id="header">
							<h1>dfm[u]sik Lo[g]in</h1>';
							
							//prüfung auf meldungen
							if (isset($message)) {
								echo 'Username or Password were incorrect';
							} else {
								echo 'Please login...';
							}
							
		echo '</div>
						
						<div id="login_form">
							Username: <br />
							<input type="text" name="username" class="login_input" maxlength="15" title="Type Username right here" />
							
							<p>

							Password: <br />
							<input type="password" name="password" class="login_input" maxlength="15" title="Type Password right here" />
							
							<p>
							
							<input type="checkbox" name="loged" value="yes"> stay logged in for 30 days!
						</div>
					</div>
					
					<p align="center">
						<input type="submit" name="login" value="Login" class="login_button" />
					</p>
					
					<div class="login_info" align="center">
						<a href="#">Forgot Password</a> | <a href="#">Register New Account</a>
					</div>';
		echo '</form>';
		exit();
	}
	
	function check_login() //prüfung der daten zum login
	{
		//werte übergeben
		$username		= $_POST['username'];
		$password		= $_POST['password'];
	
		//verbindung zur db
		$conn = db_connect();
		
		//Benutzernamen überprüfen
		$result = $conn->query("select * from user
														where `username`='$username'
														and `password`=sha1('$password')
														limit 1");
		
		if ($result -> num_rows > 0) {
			echo 'Du bist eingeloggt';
			return TRUE;
		} else {
			echo 'Du bist nicht eingeloggt';
			return FALSE;
		}		
	}
?>

SO. im Anhang mal ein kleines Bild, wie das Login-Formular aussieht.

Angesehen? Na dann halt ma weiter^^.
So, wenn ich mich nun einlogge, mit den korrekten Daten, sagt er auch, "du bist eingeloggt". Wenn nicht sagt er wiederrum "du bist nicht eingeloggt". Soweit alles klar, nur, sollte eigentlich in der funktion check_login(); das formular nicht mehr angezeigt werden. Aber er zeigt es trotzdem an. Wie kann ich das ändern? Halt, das bei check_login(); das Formular nicht angezeigt wird.

So. 2. Problem:
Da der header(); auf meinem Apache2 nicht läuft, weiß ich nicht, wie ich das machen soll, das der User automatisch zurückgeht und das Formular noch mal ausfüllen muss, wenn er etwas falsch gemacht hat. Außerdem sollte eine Fehlermeldung statt dem "please login..." kommen, das unter "dfm[u]sik Lo[g]in" steht.



Hoffe ihr könnt mir helfen :)

kalma
 

Anhänge

  • 26889attachment.jpg
    26889attachment.jpg
    38,3 KB · Aufrufe: 13
Du musst anhand des Rueckgabewerts der Funktion entscheiden ob das Formular dargestellt werden soll oder nicht.

Uebrigens, was hat es mit der Sicherheit zu tun wenn Du den Code in Funktionen packst? Das kann ich irgendwie nicht so ganz nachvollziehen.
 
Wenn ich den Code inne Funktion packe, dann kann man die seite nicht einfach aufrufen

Könntest du mir nen bsp schreiben, wie ich das mache? Mit dem Rückgabewert? :):rolleyes:

Kalma
 
Was ist denn so schlimm wenn man eine Login-Seite einfach aufruft? Relevanter Code sollte eh nur ausgefuehrt werden wenn die entsprechenden Daten uebergeben wurden, und dann macht es keinerlei Unterschied ob der Code in einer Funktion steht oder nicht.
Also, wie gesagt, in Sachen Security bringt es Dir garnichts den Code in eine Funktion zu stecken.

Und ein Beispiel sollte doch eigentlich wohl ueberfluessig sein, oder? :rolleyes:
PHP:
if (!check_login())
{
 display_login_form();
}
 

Neue Beiträge

Zurück