Login
tino
- php
Ich habe ein Problem mit meinem Loginskript, es will nicht so wie es sollte, das registrieren ist kein problem aber die geschützte seite kommt immer. Ich schreibe unten mall die Skripte rein so wie ich sie benutze.
<form action="login.php" method="post">
Benutzer:
<br>
<input type="text" size="14" maxlength="25" name="user">
<br>
Passwort:
<br>
<input type="password" size="14" maxlength="25" name="password">
<br>
<input type="submit" value="Login">
</form>
login.php
<?php
session_start();
// version 1.1
?>
<?php
include "config.php";
$user = $_POST["user"];
$passwort = md5($_POST["password"]);
$abfrage = "SELECT user, passwort FROM user WHERE user LIKE '$user' LIMIT 1";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_object($ergebnis);
if($row->passwort == $passwort)
{
$_SESSION["user"] = $user;
echo "Login erfolgreich. <br> <a href=\"geheim.php\">Geschützer Bereich</a>";
}
else
{
echo "Benutzername und/oder Passwort waren falsch. <a href=\"index.htm\">Login</a>";
}
?>
Geheim.php
<?php
session_start();
?>
<?php
if(!isset($_SESSION["user"]))
{
echo "Bitte erst <a href=\"index.htm\">einloggen</a>";
exit;
}
echo "<br> session_id = ".session_id();
include "footer.php";
?>
Jetzt habe ich bei jeder zu schützenden Seite das geheim php über den html tag gesetzt sieht also so aus:
<?php
session_start();
?>
<html>
<head>
Ich denke das das der fehler ist und da etwas vollständig anderes rein muss?
Gruss
Grüße,
ich sehe keinerlei methoden um die anzeige von html der geschützten seite zu unterbinden. willst du es vllt in die ifabfrage des suers mti reinpacken? zudem - abfrage ob etwas einfach nur deklariert/gesett ist, ist definitv kein guter sicherheitsansatz.
MFG
bleicher
Grüße,
ich sehe keinerlei methoden um die anzeige von html der geschützten seite zu unterbinden. willst du es vllt in die ifabfrage des suers mti reinpacken? zudem - abfrage ob etwas einfach nur deklariert/gesett ist, ist definitv kein guter sicherheitsansatz.
MFG
bleicher
Ich würde das ganze ja am liebsten über htacces machen aber dort verstehe ich es leider noch weniger, und hier würde es nur um eine einzelne seite gehen welche nicht gerade angeschaut werden muss ob sie sicher ist ist 2t rangig.
wollte es eigentlich in der ifabfrage machen wenn du true bist dann darf man lesen wenn nein dann über header("location:
wohl gerade weiter.
Grüße,
wollte es eigentlich in der ifabfrage machen wenn du true bist dann darf man lesen wenn nein dann über
header("location:
wohl gerade weiter.
böser bube! wilslt du den schutz noch gleich über JS
alert("wenn sie hier nix sein dürfen, weggehen!");
lösen?
MFG
bleicher
Hello,
Ich habe ein Problem mit meinem Loginskript,
mindestens eins ;-)
es will nicht so wie es sollte, das registrieren ist kein problem aber die geschützte seite kommt immer. Ich schreibe unten mall die Skripte rein so wie ich sie benutze.
login.php
<?php
session_start();
include "config.php";$passwort = md5($_POST["password"]);
$abfrage = "UPDATE user
SET logintime = now()
WHERE user = '" . mysql_real_escape_string($_POST['user']) . "'" .
AND passwort = '" . mysql_real_escape_string($_POST["password"]) . "'";
$ergebnis = mysql_query($abfrage);
if ($ergebnis and mysql_affected_rows($ergebnis) == 1)
{
## Anmeldung erfolgreich
## weitere Aktionen zur Auswertung des angemeldeten Benutzers
## z.B. speichern des Loginstatus in der Session
}
else
{
## Aktionen zum Ablehnen
exit;
}
?>
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
![](http://selfhtml.bitworks.de/Virencheck.gif)
--
☻\_
/▌
/ \ Nur selber lernen macht schlau
<http://bergpost.annerschbarrich.de>
Hello,
Hello,
Ich habe ein Problem mit meinem Loginskript,
mindestens eins ;-)
es will nicht so wie es sollte, das registrieren ist kein problem aber die geschützte seite kommt immer. Ich schreibe unten mall die Skripte rein so wie ich sie benutze.
login.php
<?php
session_start();
include "config.php";$abfrage = "UPDATE user
SET logintime = now()
WHERE user = '" . mysql_real_escape_string($_POST['user']) . "'" .
AND passwort = '" . md5($_POST["password"]) . "'";
Bitte lesen: [link:http://wiki.selfhtml.org/wiki/Artikel:Kontextwechsel]
$ergebnis = mysql_query($abfrage);
if ($ergebnis and mysql_affected_rows($ergebnis) == 1)
{
## Anmeldung erfolgreich
## weitere Aktionen zur Auswertung des angemeldeten Benutzers
## z.B. speichern des Loginstatus in der Session
}
else
{
## Aktionen zum Ablehnen
exit;
}?>
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
![](http://selfhtml.bitworks.de/Virencheck.gif)
--
☻\_
/▌
/ \ Nur selber lernen macht schlau
<http://bergpost.annerschbarrich.de>
hi,
beim 'Logn' gibt es mehrere Möglichkeiten, von denen jedoch nur Eine den 'Erfolg' wiedergibt:
Dementsprechend sollte die Kontrollstruktur aussehen, die sich insofern vereinfachen lässt, als dass zuerst der Fehler abgefragt wird.
Hotti
So habe das gesammte umgeschrieben und es geht jetzt auch mit der session, nur jetzt ist bei mir die frage aufgetaucht ob ich auch nur einen Teil der HTML Seite Anzeigen kann und den rest mittels php ausblenden?
Die seite wird mittels session gespert.
<?
session_start();
if(!session_is_registered(myusername)){
header("location:index.htm");
}
?>
Ich stelle mit das so vor,
<?
if(!session_is_registered(myusername)){
<!--
}
?>
und dann weiter unten einfach ein --> dort wo es enden würde. bin ich da auf dem richtigen weg oder vollständig von allen Geistern verlassen?
Mahlzeit Tino,
<?
if(!session_is_registered(myusername)){
<!--
}
?>
Selbst wenn das funktionieren würde, würde ja trotzdem der gesamte produzierte HTML-Code an den Browser übertragen (dort aber wegen der Kommentar-Zeichen nicht angezeigt ... natürlich nur, wenn der HTML-Code selbst nicht auch schließende Kommentar-Zeichen enthält!) - und ich denke nicht, dass Du das willst.
Was hältst Du davon:
~~~php
if (session_is_registered($myusername)) {
?>
<p>
Hallo <em><?php echo $myusername; ?></em>
Dieser Absatz ist nur sichtbar, wenn Du eingeloggt bist!
</p>
<?php
}
bin ich da auf dem richtigen weg oder vollständig von allen Geistern verlassen?
Ersteres auf keinen Fall und bei Letzterem wage ich keine Aussage ... ;-)
MfG,
EKKi
Hello,
if(!session_is_registered('myusername'))
Die Funktion ist so uralt, dass sie schon auf den Keilschrifttafeln der Sumerer durchgestrichen war.
Das kann man übrigens auch unter http://de.php.net/manual/en/function.session-is-registered.php nachlesen.
Der Ablauf ist folgender:
session_start();
define('MAX_WO_REQUEST', 360); ## maximum time without a request in seconds
$now = time();
if(isset($_SESSION['login']['lastrequest'])
and $_SESSION['login']['lastrequest'] > $now-MAX_WO_REQ)
{
$_SESSION['login']['lastrequest'] = $now;
## User is logged
## ... further stuff
## preferably put this whole cahpter in a function
}
else
{
include('../includes/loginpage.php');
## or alternatively
# header('http://example.org/loginpage.php')
exit;
}
Und beim Login wird dann
if (isset($_POST['loginbutton']))
{
## ...
- die geposteten Userdaten (Username und Passwort) mit der Datenbank/Dateieintrag verglichen
- bei Erfolg die Userdaten in die Session eingetragen
$_SESSION['login'] = array();
$_SESSION['login']['lastrequest'] = $now;
$_SESSION['login']['logintime'] = $now;
$_SESSION['login']['username'] = $_POST['username'];
## Das Passwort wollen wir bitte nicht in der Session speichern!
- oder im Misserfolgsfall das ganze Loginteilarray aus der Session rauslöschen
unset($_SESSION['login'];
}
Das bedeutet also für die Logik: Das Vorhandensein einer gültigen Session deutet _nicht_ auch auf eine gültige Anmeldung hin, ist aber Voraussetzung dafür. Eine gültige Anmeldung setzt eine gültige Session voraus.
Die Zeit MAX_WO_REQ (max without request) ist eine Konstante, die Du dir selber definierst und in deiner persönlichen Konfigurationsdatei für das Projekt ablegst. Sie muss kürzer sein, als die systemspezifische Zeit in session.gc_maxlifetime (siehe php.ini). Die kannst Du ggf. auch verlängern. Je länger allerdings ein Session-Identifier gültig ist, desto angreifbarer wird die Session. Das ist aber ein anderes Thema, zu dem sich Christian Seiler hier schon öfter hilfreich ausgelassen hat.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Ich danke euch beiden für die Antwort, das mit dem $_SESSION muss ich mir dann noch anschauen und in einem schlauen PHP-Buch nachlesen gehen wie das funktioniert, kennt jemand etwa gerade ein gutes Buch oder auch eine gute Webseite wo es von Grund auf aufgebaut wird? bei mir sind in der Zwischenzeit so viele Lücken drin und so veraltet das es wohl besser wäre von 0 an zu beginnen. Das Beispiel mit dem Echo zeigt es mir wieder mal.
Hello,
Ich danke euch beiden für die Antwort, das mit dem $_SESSION muss ich mir dann noch anschauen und in einem schlauen PHP-Buch nachlesen gehen wie das funktioniert, kennt jemand etwa gerade ein gutes Buch oder auch eine gute Webseite wo es von Grund auf aufgebaut wird? bei mir sind in der Zwischenzeit so viele Lücken drin und so veraltet das es wohl besser wäre von 0 an zu beginnen. Das Beispiel mit dem Echo zeigt es mir wieder mal.
Da guckst Du dir zuerst mal die Beispiele im PHP-Manual an.
http://de3.php.net/manual/en/book.session.php
http://de3.php.net/manual/en/ref.session.php
Die Benutzerkommentare sind meistens recht aufschlussreich.
Und achte darauf, welche Funktionen als "deprecated" bezeichnet werden. Die solltest Du gleich auslassen.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hallo EKKi
Ich danke dir, habe es zwar noch ein bisschen abgeändert, aber ich bin froh das du mich auf den richtigen Weg geleitet hast, danke dafür auch noch das ich selber noch minimal was überlegen musste :-)
Gruss
Hallo mein Login geht jetzt und die anderen teile auch, doch jetzt kommt der teil mit der Registration, der Code sieht so aus, ich finde einfach keinen Fehler mehr vielleicht findet jemand von euch noch einen Fehler.
<?php
<?php
$user = $_POST["user"];
$passwort = $_POST["passwort"];
$passwort2 = $_POST["passwort2"];
$email = $_POST["email"];
$numer = $_POST["handy"];
include("config.php");
if($passwort != $passwort2 OR $user == "" OR $passwort == "" OR $email == "" OR $numer == "")
{
exit;
}
$passwort = md5($passwort);
$result = mysql_query("SELECT userid FROM user WHERE user LIKE '$user'");
$menge = mysql_num_rows($result);
if($menge == 0)
{
$eintrag = "INSERT INTO user (user, passwort, email, numer) VALUES ('$user', '$passwort', '$email', '$numer')";
$eintragen = mysql_query($eintrag);
if($eintragen == true)
{
header("location: www.tkobler.ch/index.php");
}
else
{
header("location: www.tkobler.ch/registrationfals.php");
}
}
else
{
echo "Benutzername schon vorhanden.";
}
?>
?>
config.php
<?php
// version 1.1
$host="localhost"; // Host name
$username="xxx"; // Mysql username
$password="xxx"; // Mysql password
$db_name="login"; // Datenbankname
$tbl_name="user"; // Tabelenname
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
?>
Mahlzeit Tino,
der Code sieht so aus, ich finde einfach keinen Fehler mehr
Tritt denn ein Fehler auf? Wenn ja: wie lautet er? Oder erwartest Du, dass Deine Leser hellsehen können?
vielleicht findet jemand von euch noch einen Fehler.
Etliche:
<?php
<?php
Was soll das? Warum startest Du zweimal mit einem PHP-Bereich? Hier sollte schon ein Fehler auftreten ...
$user = $_POST["user"];
$passwort = $_POST["passwort"];
$passwort2 = $_POST["passwort2"];
$email = $_POST["email"];
$numer = $_POST["handy"];
Derartiges simples Umkopieren ist sinnlos und gefährlich!
$passwort = md5($passwort);
$result = mysql_query("SELECT userid FROM user WHERE user LIKE '$user'");
Das Verwenden von Nutzereingaben bzw. von außen kommenden Daten ohne eine Prüfung ist fahrlässig und gefährlich. Informiere Dich *mindestens* zum Thema "Kontextwechsel". Darüber hinaus solltest Du IMHO eine Validierung der Eingabeparameter vornehmen - merke: ALL INPUT IS EVIL!
if($eintragen == true)
"Wenn es wahr ist, dass $eintragen wahr ist ..."
header("location: www.tkobler.ch/index.php");
Das ist kein vollständiger URL, den header() (bzw. die entsprechende HTTP-Spezifikation) aber erwartet.
?>
?>
Siehe meine Anmerkung zum zweimaligen "Öffnen" eines PHP-Bereichs weiter oben.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
Siehe Zitat 1282 ...
MfG,
EKKi