• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

sicherer passwortschutz für loginbereich

hokage555

Neues Mitglied
hi leute ;-)

ich möchte auf meiner website eine adminzone einrichten, von woaus ich über fprmulare daten etc. in eine datenbank eintrage und diese dann auslese etc.
darum geht es aber noch nicht.

es soll natürlich kein anderer nutzer außer mir die adminzone betreten können ^^ (logisch)

also habe ich folgenden code geschrieben:

PHP:
<?php
header('Content-Type: text/html; charset=utf-8');
setcookie("count","yes");
session_start();
            if(isset($_POST["senden"])){
                if(!empty($_POST["pw"])){
                    $pw = "meinpw";
                    if($_POST["pw"] == "$pw"){
                        setcookie("login", "meinpw");
            

?> Seite mit geheimen Daten

<?php }else{ ?>

    Seite mit fehlermeldung: passwort falsch

<?php die("</body>");

     }else{ ?>

    Seite mit Fehlermeldung: Passswort nicht eingetragen.

<?php die("</body>");
     }
}

?>
die variable pw wollte ich eig. mit include auslagern. wegen der sicherheit. wenn ich das aber mache, generiert das cookie eine fehlermeldung. header schon abgesendet oder so.
das cookie möchte ich als merkwimpel haben, ob ich eingeloggt bin.
in all meinen späteren abfragen, die im adminbereich gemacht werden, wird dieses am anfang immer geprüft.
es ist logischerweise ein sitzungscookie.

frage: ist es schlimm wenn ich die pw variable nicht auslagere? warum kann ich das nicht?
gibt es noch andere methoden den loginbereich sicher zu machen?
ich hab mal irgendwas von session un ip -check gehört.
wäre net, wenn mir das mal jemand näher bringen könnte ;-)

grüße hokage
 
Werbung:
Verstehe ich das richtig, du willstein cookie dafür benutzen, damit du schauen kannst ob du momentan angemeldet bist oder nicht?
Nunja, du startest ja sowieso eine SESSION, welche du beim LOGOUT zerstören musst, dann könntest du ja eine abfrage mache, ob diese SESSION nooch geführt wird.

Code:
if($_SESSION)
{
 echo "Sie sind Angemeldet";
}
 
Werbung:
eine session ist zwar standartmäßig an ein cookie gebunden allerdings ist ein cookie keine pflicht für eine session.

PHP:
<?php

/**
 * hier empfehle ich dir einen sha1 passwort zu berechnen und
 * dieses dann hier reinzuschreiben das spaart nicht nur
 * rechenleistung (auch wenns wenig ist ist es trotsdem
 * verschwendete leistung ;)) sondern ist auch noch sicherer
 * da so niemand der evtl diese datei in die hand bekommt
 * das passwort kennt
 */
$pw = sha1('passwort');

$check = (
	(isset($_SERVER['PHP_AUTH_USER']) || isset($_SERVER['PHP_AUTH_PW'])) &&
	($pw == sha1($_SERVER['PHP_AUTH_USER']) || $pw == sha1($_SERVER['PHP_AUTH_PW'])) 
);

if(!$check) {
	header('WWW-Authenticate: Basic realm="Test Authentication System"');
	header('HTTP/1.0 401 Unauthorized');
	exit;
}

// hier deine homepage die nur der besitzer des passworts sehen kann ^^

?>

wenn du die seite öffnest wird sich ein fenster öffnen da sollst du einen usernamen und ein passwort eingeben, ich habs allerdings so gebaut das es egal ist welches feld du ausfüllst. solange in einem der felder das gültige passwort steht kannst dich einloggen ^^
 
@efchen: keine ahnung ^^
das session starte ich allerdings wegen etwas anderem, was ich auf meiner seite brauche.

das ganze ist halt so recht unelegant. da, wo ich hier im code "seite mit fehlermeldung" geschrieben habe, ist halt meine komplette seite drin. mit doc-type etc.
wie man so sehen kann habe ich das ganze also 3 mal. ziemlich unübersichtlich^^

von daher überlege ich dieses script auf eine eigene seite zu machen. und dann mit diesem code auf die einzelnen fehlermeldungsseiten, oder den geheimen inhalt zu verweisen.
haltet ihr das für sinnvoller?
PHP:
header("Location:index.php");
mein ziel ist halt folgendes: ich möchte durch ein login, welches in form eines formulares von jeder seite erreichbar ist, auf eine admiin-startseite kommen, wenn das pw richtig ist. ansonsten auf entsprechende fehlerseiten.

frage: ich hab ja eine index.php gemacht, aber kann ein fremder benutzer nicht trotzdem durch zufall auf die admin seite kommen, wenn er die entsprechende adresse in die url-leiste eingibt?
wenn ja, wie kann man das verhindern? das man also auf diese seiten nur kommt, wenn das pw in dem loginformular richtig ist.

grüße hokage

*edit: @slibbo: ok das hört sich ja so gut an :p aber so wie ich das sehe, nutze ich hier ja gar kein formular, oder? ich würde dann nur auf einen link gehen z.B. adminbereich und dann auf diese seite mit deinem script kommen. dort wird dann nach einem passwort verlangt. (bei der eingabe, werden die buchstaben/zahlen als * angezeigt???).
ich würde allerdings gerne mein login-formular beibehalten. kann ich das damit irgendwie verbinden?
das also statt das pw auf der neuen seite zu überprüfen das pw aus dem formular überprüft wird?
 
Zuletzt bearbeitet:
auf der seite würde ein fenster erscheinen und das hat 2 felder, eins für den namen da shtet alles plain drin und eins fürs passwort da werden nur * angezeigt.

und warum willst du dir unbedingt die mühe machen da extra ein formular reinzubauen? das währe nur unnötiger mehraufwandt.
 
Werbung:
Ich möchte diese login halt lieber in mein design integrieren ;-)

das kann ich mit deiner methode ja nicht :p

aber ich hab schon eine idee beides zu kombinieren ^^
bin nur leider nicht zuhause. heute mittag waren da noch ein paar fehler. den code schreibe hier ich morgen nochmal rein.

danke schonmal für die hilfe ;-)

grüße hokage
 
wenn du mit einem formulat das feld "pass" sendest würde der code ohne die andere box so aussehen

PHP:
<?php

$pw = sha1('passwort');

if(!isset($_POST['pass']) || $pw != sha1($_POST['pass'])) {
    die('Falsches Passwort!');
}

// hier deine homepage die nur der besitzer des passworts sehen kann ^^

//Edit: und hier das beispiel bei dem du acuh eingelogt bleibst xD

PHP:
<?php

session_start();

$pw = sha1('passwort');

if((!isset($_POST['pass']) || $pw != sha1($_POST['pass'])) && (!isset($_SESSION['admin_pw']) || $_SESSION['admin_pw'] != $pw)) {
    die('Falsches Passwort!');
}

$_SESSION['admin_pw'] = $pw;
 
Zuletzt bearbeitet von einem Moderator:
um dies zu verhindern musst du

register_globals
in der php.ini datei auf "off" setzen, so kannst du verhindern, dass jemand durch die Adressliste, deine Homepage manipuliert.

Ansonsten kannst du zwei Bereiche machen.

GROBES BEISPIEL (habe fast keine Zeit mehr):
HTML:
//Eingabefeld für Passwort und Button zum bestätigen
<form action="index.php?action=checkpw" method="post">
       <input type="password" name="adminPassword">
       <input type="submit" value="login">
</form>
PHP:
<?
    //Wenn auf den Submit Button geklickt wurde
    if($_GET['action']=="checkpw")
   {
         //Überprüfen, ob das Passwort korrekt ist
         if($_POST['adminPassword']=="MeinPasswort")
         {
                  //wenn ja,wird der adminbereichzugelassen
                  $adminBereich="zugelassen";

          }//ansonsten nicht
   }
    //wenn der adminbereich betreten werden darf,
    if($adminBereich=="zugelassen")
    {

?>
        //hier der geschützte bereich
<?
     }
?>

//hier der Bereich für alle
 
Werbung:
danke schonmal für die vielen anregungen ;-)

ich werde sicherlich einiges gebrauchen können :p

bei neuen fragen, werde ich mich wieder melden ;-)

grüße hokage
 
Eine Session ist doch auch nur ein Cookie, oder nicht?
genaugenommen nicht, im cookie wird die sessionsid gespeichert, nicht der inhalt von sessions-variablen.

@hokage555
du siehst aber schon, dass du das passwort in echt speicherst. sollte jemand das cookie auslesen, kennt er das passwort !

ich verstehe das so, dass du ein permanentes login ohne neuerliche passwort abfrage erstellen willst.
wenn du ein passwort in einem cookie ablegen willst, dann verschlüsselt (md5 oder so)

session_start() muss vor dem cookie und dem header ausgeführt werden, das ist eine browser ausgabe. sonst gibt es fehlermeldungen.
 
wie kann man denn ein pw aus einem cookie auslesen?
kann man es auch aus session auslesen?
hab das ganze nähmlich jetzt mit session gelöst. loginbereich mit logout und allem steht. aber wenn man das pw aus der session lesen kann, ist es natürlich unsicher.
wenn ja.
wie kann ich das verhindern?
du hast was von verschlüsseln gesagt. wie geht das dann genau?

grüße hokage
 
Werbung:
man kann das pw nur auslesen wenn es in einem cookie ist nicht wenn es in einer session ist (nur der vlergleich von sookie und session (es sei denn du programmierst unsicher ;)))
 
Zurück
Oben