[PHP] sinnvolles LoginScript

RuL3R

Commodore
Registriert
Dez. 2004
Beiträge
4.577
Hallo
ich möchte mir in PHP ein Script bauen mit folgendem Aufbau:

Formular.html- > Interner Bereich.php

Das Problem, was sich hier nun stellt: Wenn man im Browser einfach www.domain.de/InternerBereich.php eingibt kommt man dort ja auch rein. Wie kann ich das absichern?
 
Hallo,

setz doch in dem Formular eine versteckte Variable. Nur wenn die gesetzt ist, darf die interne PHP-Datei aufgerufen werden.

Am Anfang der PHP-Datei fragst Du die Variable auf exist und Wert ab. Wenn nicht vorhanden rufst Du automatisch mit "header()" z.B. die Startseite, wieder das Formular oder eine "Zeigefinger-Du-Du-Du-Datei" auf :)


Gruss, Dirk
 
Hmm. Das könnte funktionieren .. Danke ^^
 
ich machs mit passwort und setz dann ein cookie wenns stimmt
 
Die Daten (User/Pass) müssen bei jedem Aufruf natürlich auf ihre Gültigkeit überprüft werden (also in dem PHP File)! Und eine Kontroll-Variable in einem Formular unterzubringen ist nicht gerade ein sicheres Versteck. Cookie ist eine gute Lösungsmöglichkeit (oder halt Session).
 
Session bevorzuge ich gegen Cookie. Ist leider (oder zum Glück) immer noch vielen unheimlich und wird oft kontrolliert, wenn nicht abgeschaltet.

Eine weitere Möglichkeit wäre, per Servervariable den Referer auszulesen. Damit kann die Seite NUR von der FormPage aufgerufen werden.


Gruss, Dirk
 
Was meinst du mit Referer auslesen?
 
Login und PW in die DB speichern und dann nen cookie schreiben. Die Cookie Gültigkeit nicht allzuhoch ansetzen und dann halt beim aufruf der internen Seite prüfen, ob das Cookie vorhanden ist und dann die eingegeben Daten auf richtigkeit überprüfen...Aber wurd inetwa ja schon erklärt.
 
Mit Cookies wollte ich eigentlich erst einmal nicht arbeiten.
 
Der Referer gibt an, von wo jemand auf deine Seiten kommt, d.h. wenn er über einen Link kommt, kannst Du darin auslesen wo der Links steht.

Diese WebSite-Analysetools "wusage" und wie sie alle heißen, werten das auch aus.

Du könntest also z.B. auslesen, ob der aufruf wirklich von der LogIn-Page kommt.

PHP:
$var1 = getenv('REMOTE_ADDR');
$var2 = gethostbyaddr(getenv('REMOTE_ADDR'));
$var3 = getenv('HTTP_REFERER');

Gruss, Dirk
 
Ich würd eh nur eine seite aufrufen lassen und den internen bereich notfalls includen.

Dann kannste am Anfang der aufrufbaren seite (index) die Logindaten testen und in ne Session schreiben a la
Code:
wenn keine session, dann
  wenn keine logindaten, dann
    zeige loginmaske
  sonst
    wenn logindaten gültig, dann
      erstelle session
    sonst
      zeige loginmaske

Wenn ich mich jetzt nicht grob vertan hab, dürfte aller nachfolgender Code nurnoch ausgeführt werden, wenn der benutzer eine gültige session besitzt.

Also kannst du im folgenden eine Konstante definieren zB mit
Code:
define('blubb',1);
und danach das InternerBereich.php includen.

In das InternerBereich.php schreibst du ganz oben rein
Code:
if(!defined('blubb')){die "So aber nicht!";}

So hätt ich es zumindest gemacht o.o
 
mit dem referrer würde ich nicht arbeiten, viele security softwares stelles das ab (und viele user sind nicht in der lage das dann zu reaktivieren), dann wird keiner gesendet und dann würde das nicht funktionen.
 
Also das mit dem Referer würde ich komplett vergessen. Mal abgesehen von dem was marodeur gepostet hat ist das einfach extrem unsicher. Den Referer kann man sehr leicht mit "Spoof" Progs faken. An diese Progs kommt jeder per Google ran.

Den richtigen Weg hat pcw schon aufgezeigt :)
Einfach eine Datei, in der man dann in Abhängigkeit des vorhandenen oder nicht vorhandenen Logins (Session) entweder die Inhaltsseite oder die Loginseite included oder per Funktion aufruft.
 
google mal nach Session Management und Fallback Methode.
Sollten paar Tipps und scripts auftauchen. ;)

Fallback deshalb, weil nicht jeder user cookies aktiviert hat, dann wird die Session-ID halt automatisch an jeden link drangehangen bzw. im Formular in einer hiddenbox.

Ich mache solcherlei Login- und Benutzergeschichten zusätzlich über MySQL, da ich eh alles über DB mache.
Dort steht zb. die userid, letzter-klick-zeit und sessionID, welche per script übergeben wurde und abgefragt/ aktualisiert wird.

Ist die Zeit überschritten oder die übergebene sessid ungültig, werden die Einträge einfach gelöscht und somit ungültig und von php auf die standard loginseite weitergeleitet/ diese stattdessen ausgegeben oder halt ne öffentlich Seite, jenachdem wie mans nun will.

Und wenn ein Ordner generell nur für Admins usw ist, schütze ich den meist noch per .htaccess Datei.
 
Zuletzt bearbeitet:
OK, mit Sessions werde ich mich dann wohl nochmal befassen müssen. Ich denke, so werde ich es machen.

@Relict : Mit einer Datenbank arbeite ich im Moment auch schon, jedenfalls um die Passwörter abzufragen.
 
jupp, dann richtest Dir zusätzlich noch ne Tabelle ein für temporäre Logingeschichten.
Über userid kann man das ja dann gut tabellenübergreifend arrangieren und abfragen.

Passwortabfrage brauchste ja dann nur noch für den erstmaligen Einlogvorgang, um ne Session-ID zu erstellen oder den Bereich halt freizugeben.
Der Rest läuft dann über Session-ID und userid weiter. :)

PS:
hier zb. gibts so ne fallback-sess-class, die man recht gut nutzen kann.
 
Zuletzt bearbeitet:
kleine variante:
inc.php
PHP:
<?php
# - inc.php

// Session starten
session_start();

// User in array ablegen
$user = array(
	// Username => Passwort
	"funland" => "agent007",
	"RuL3R" => "115sdffa",
	"niemand" => "012420"
);
// Funktion zum überprüfen von angemeldeten user
function is_user() {
	// Wenn Session "loged" true ist
	if($_SESSION['loged'] == true) {
		// Dann zulassen
		return true;
	} else {
		// Sonst nicht
		return false;
	}
}
?>


login.php
PHP:
<?php
# - login.php

// inc laden
include("inc.php");

// Wenn Button "GO" gedrückt wurde
if(isset($_POST['go'])) {
	// User durchlaufen
	foreach($user as $u_name => $u_pass) {
		// Überprüfen ob name und passwort mit den einträgen übereinstimmen
		if($_POST['user_name'] == $u_name AND $_POST['user_pass'] == $u_pass) {
			// Wenn ok dann soll die Session "loged" wert true bekommen
			$_SESSION['loged'] = true;
			echo "Sie haben sich erfolgreich eigenlogt";
		}
	}
} else {
	echo '
		<form action="'.$_SERVER['PHP_SELF'].'" method="post">
			Username: <input type="text" name="user_name" /><br />
			Passwort: <input type="password" name="user_pass" /><br />
			<input type="submit" name="go" value="GO" />
		</form>
	';
}

?>


admin.php
PHP:
<?php
include("inc.php");
if(is_user()) {
	echo "Geschützter Bereich";
} else {
	echo "Sie haben kein Zugriff auf diese Section";
}
?>
 
Zurück
Oben