Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP] Eigenes Loginscript (https://www.delphipraxis.net/121258-%5Bphp%5D-eigenes-loginscript.html)

BullsEye 24. Sep 2008 17:24


[PHP] Eigenes Loginscript
 
Hallo Leute,

ich habe ein "Loginscript" geschrieben. Es ist zwar ganz einfach aber im Grund reicht es für meine Zwecke!
Allerdings habe ich noch ein Problem, das ich hier beschreibe. Vorab, ich möchte KEIN MySql o.ä. verwenden.

Das Login Formular:

Delphi-Quellcode:

<form action="" method="post">
<p align="center">
<table border="7">
<tr><td>
   <table width="50%" border="0">
   <tr>
      <td colspan="2"> <p align="center">[b]<u> L O G I N </u>[/b]</p></td>
   </tr>
   
   <tr>
      <td> [b] Benutzername [/b] </td>
      <td> <input type="text"    name="user"> </td>
   </tr>

   <tr>
      <td> [b] Passwort [/b] </td>
      <td> <input type="password" name="pw">    </td>
   </tr>

   <tr>
      <td> </td>
      <td>
         <input type="submit" value="Login"  >
         <input type="reset" value="Löschen">
      </td>
   </tr>
   </table>
</tr></td>
</table>
</form>
Folgender Code wird für die Login Funktion verwendet.

Delphi-Quellcode:
<?php
      $username = 'BENUTZER';
      $passwort = 'PASSWORT';
   
IF($_POST)
{
   IF ($_POST['user']== $username)
   {   
      IF ($_POST['pw']== $passwort)
      {
      echo
      ('
      <h1><p align="center">
      Login erfolgreich!
      </p></h1>


      


      <p align="center">
      [url="?id=1"] Weiter [/url]
      </p>
      <!----
      


      <iframe src="http://m-v-g.de.ms" width="100%" height="100%"> </iframe>
      --->
      ');
      }
   }
   ELSE
   {
      echo
      ('
      <h1><p align="center">
      Login fehlgeschlagen!
      </p></h1>
      ');
   }
}
?>

Das Prinzip ist sehr einfach:

Ich habe eine auf PHP basierende Seite (Administration). Wird diese Aufgerufen, erscheint automatisch die Indexdatei
mit dem Loginformular.
Geb ich nun meinen Nutzernamen und das Passwort ein, erfolgt die Ausgabe einer Nachricht "Login erfolgreich!"
sowie die Ausgabe eines Links. Der Link leitet mich dann auf den Inhalt weiter. Ist der Nutzername schon falsch,
wird erst gar nicht das Passwort überprüft sondern gleich die Nachricht "Login fehlgeschlagen" ausgegeben.
Soweit so gut, ist zwar nicht das effizienteste Script aber der Grundaufbau funktioniert damit!
Nun zum eigentlichen Problem:
Ich verwenden für die Anzeige des Inhalts ein Array, in dem ich die Links speichere:


Delphi-Quellcode:
<?php
   $seite[0]= 'inhalt/login';
   $seite[1]= 'inhalt/start';
   $seite[2]= 'inhalt/chat_admin';   
?>

   <?php include($seite[$_GET['id']].'.php'); ?>
Der Link um auf die Seite zu kommen (Den ich beim Login erhalte) lautet:

Delphi-Quellcode:
[url="?id=1"] Weiter [/url]
Sprich es wird die ID auf 1 gesetzt. Somit wird der Inhalt ausgetauscht (Header und Navi natürlich auch, ist nun aber
nicht weiter von nöten zu erklären).
An sich ist das ganze auch recht sicher, vergleich mit der einfachheit.
Ich will aber nicht, das jdn den "Trick durschaut" und einfach mal auf gut Glück in der Navileiste den Teil
index.php?id=1 durch index.php?id=2 austauscht und somit das Loginmenü umgeht.
Eine Idee von mir ist bsp: ich generiere einfach Zufalls ID's. Das Problem dabei ist, woher weiß ich denn, welche
Seite welche ID hat?
Oder gibts da noch andere Möglichkeiten es so zu machen?

Danke für die Hilfe und Gruß Marc

Valle 24. Sep 2008 17:33

Re: [PHP] Eigenes Loginscript
 
Hi!

Also dein Ansatz ist leider völlig falsch! So wird das nichts. Das nennt man Security by Obscurity und sollte tunlichst vermieden werden. Besonders in so einer einfachen Form wie hier.

Richtig geht es so: Nachdem du die Daten in POST auf Richtigkeit geprüft hast, musst du dem User eine Session geben. Dafür hat PHP schon fertige Funktionen, die sogar echt einfach zu verwalten sind. Als erstes musst du ganz (!) am Anfang jeder Datei, noch bevor jeder (!) Ausgabe die Funktion session_start(); aufrufen. Wenn die Login-Daten dann richtig sind, kannst du in die globale Array-Variable $_SESSION dann z.B. einen Wert "true" reinschreiben, auf den du dann immer überprüfst. Beim Logout dann einfach ein false rein. Kurzes, ungetestetes Beispiel:

Code:
session_start();
if ($_POST['name'] == $name && $_POST['password'] == $password) { // Warum denn 2 Abfragen?
  $_SESSION['login'] = true;
} else {
  // Fehlermeldung ausgeben
}

// [...]

if ($_SESSION['login']) {
  // geheime Inhalte anzeigen
} else {
  // "Sie sind nicht berechtigt" ...
}
Edit:// Vielleicht noch ein paar Worte zu den Sessions. Die Daten, welche du in $_SESSION speicherst bleiben erhalten, solange der User eingeloggt ist und sind bei jedem Script-Aufruf wieder verfügbar. Der User bekommt von PHP einen Cookie mit einem 32 Zeichen langen Zufalls-String. Dieser wird vom Browser bei jedem Seitenaufruf an den Server geschickt. Der Server sucht in seiner Session Datenbank nach diesem Zufalls-String (die Session-ID). Hat er was gefunden, läd er die Daten in die $_SESSION-Variable und führt das Script aus. Wichtig zu erwähnen ist es dann wohl, dass all diese Daten Server-gespeichert sind. Das heißt, es ist Problemlos möglich, statt einem "true" auch eine ID möglich, die den gerade eingeloggten User identifiziert. Der User kann diese Daten weder sehen noch ändern. ;-)

Mit freundlichen Grüßen,

Valle

BullsEye 24. Sep 2008 21:15

Re: [PHP] Eigenes Loginscript
 
Zitat:

Zitat von Valle
Also dein Ansatz ist leider völlig falsch! So wird das nichts. Das nennt man Security by Obscurity und sollte tunlichst vermieden werden. Besonders in so einer einfachen Form wie hier.

hm?
Ich bin gerade dabei, mir PHP beizubringen, ohne Hilfe von Lehrern etc... wenn du verstehst wie ich meine. So die Grundlagen etc hab ich schonmal drinne.
Allerdings habe ich noch nie was von diesem "Session" in dieser Form bzw in PHP gesehen!

Zitat:

Zitat von Valle
Richtig geht es so: Nachdem du die Daten in POST auf Richtigkeit geprüft hast, musst du dem User eine Session geben. Dafür hat PHP schon fertige Funktionen, die sogar echt einfach zu verwalten sind. Als erstes musst du ganz (!) am Anfang jeder Datei, noch bevor jeder (!) Ausgabe die Funktion session_start(); aufrufen. Wenn die Login-Daten dann richtig sind, kannst du in die globale Array-Variable $_SESSION dann z.B. einen Wert "true" reinschreiben, auf den du dann immer überprüfst. Beim Logout dann einfach ein false rein. Kurzes, ungetestetes Beispiel:

Wie schon gesagt habe ich vorher noch nie was von gehört. Allerdings hat diese Funktion nun meine Neugier geweckt! So wie das aussieht könnte das ganz nützlich und vor allem Interessant sein. Ich werde mal versuchen, mein Script danach umzuschreiben!

Zitat:

Zitat von WIKIPEDIA
Ein System sollte sich niemals allein auf security through obscurity verlassen, aber es kann sinnvoll sein, dadurch die Schwelle für potentielle Angreifer anzuheben.

Das hätte mir ja schon gereicht. Ganz so wichtig sind die Daten auch nicht.
Ich will es mal genauer erklären:
Ich habe für z.B. den Chat auf meiner Seite ne Adminstration und auch eine Adminisrtation für den Downloadzähler etc.. diese sind ansich schon Passwortgeschützt. Nur damit ich mich nicht jedes mal überall durch mein Webspace 'schummeln' muss, um dorthin zu gelangen weil ich was ändern möchte, möchte ich das alles quasi zusammenfassen. Zudem hat es noch den Vorteil, das es übersichtlicher ist ;)


Zitat:

Zitat von Valle
Edit:// Vielleicht noch ein paar Worte zu den Sessions. [..]

Danke für die Erklärung!

Valle 24. Sep 2008 22:04

Re: [PHP] Eigenes Loginscript
 
Hi BullsEye!

Zitat:

Zitat von BullsEye
Das hätte mir ja schon gereicht. Ganz so wichtig sind die Daten auch nicht.
Ich will es mal genauer erklären:
Ich habe für z.B. den Chat auf meiner Seite ne Adminstration und auch eine Adminisrtation für den Downloadzähler etc.. diese sind ansich schon Passwortgeschützt. Nur damit ich mich nicht jedes mal überall durch mein Webspace 'schummeln' muss, um dorthin zu gelangen weil ich was ändern möchte, möchte ich das alles quasi zusammenfassen. Zudem hat es noch den Vorteil, das es übersichtlicher ist ;)

Das sagst du so einfach. ;-) Was bringt dir jeden Passwortschutz, wenn eine einfache Ersetzung von 1 und 2 in der URL alles zunichte macht? Das schafft keinen guten Eindruck. Und glaub mir, es ist nicht schwer mit den Sessions. Also dann doch lieber sicher machen. :)

Zitat:

Zitat von BullsEye
Danke für die Erklärung!

Bitteschön. :) Wenn du noch mehr Hilfe brauchst, dann bietet die PHP-Homepage eine sehr gute Dokumentation. Sowohl mit Funktions-Referenz als auch mit Erklärungen von diversen Features, zum Beispiel Sessions. Ansonsten, melde dich nochmal. ;-)

Mit freundlichen Grüßen,

Valle


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz