php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 17-05-2007, 18:49
dr_mario
 Newbie
Links : Onlinestatus : dr_mario ist offline
Registriert seit: Apr 2007
Beiträge: 13
dr_mario ist zur Zeit noch ein unbeschriebenes Blatt
Standard Login-Problem

Hallo,

ich habe ein Login (Benutzername, Kennwort), bei dem man, bei Eingabe der korrekten Daten zu einer Seite start.php weitergeleitet wird. Falls der Benutzername "admin" ist, wird man zur Seite admin.php weitergeleitet. Vor der Weiterleitung wird eine Session gestartet, die, solange man sich nicht ausloggt, von Seite zu Seite weitergeführt wird.

In der Login-Datei:
PHP-Code:
ini_set('session.use_cookies'1);
ini_set('session_use_cookies_only'1);
session_start();
$_SESSION['user_id'] = $data["id"];
$_SESSION['sid'] = session_id();
if (
$name == "admin")
{
     
header("Location: admin.php");
}
else
{
     
header("Location: start.php");
}
exit; 
Auf den Folgeseiten:
PHP-Code:
ini_set('session.use_cookies'1);
ini_set('session_use_cookies_only'1);
session_start();

if(
$_SESSION['sid'] == session_id())
{
//Seiteninhalt
}
else
{
echo 
"Sie sind nicht eingeloggt";

Das Problem ist, dass wenn man als "normaler" User eingeloggt ist, einfach admin.php in die Adresszeile eingeben kann und ohne weiteres im Admin-Bereich landet, da eine Session ja bereits besteht.

Wie kann ich das Problem beheben?

Vielen Dank im Voraus

Viele Grüße,
Mario
Mit Zitat antworten
  #2 (permalink)  
Alt 17-05-2007, 19:00
Griecherus
 PHP Senior
Links : Onlinestatus : Griecherus ist offline
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
Griecherus ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Du musst natürlich auch dafür sorgen, dass die admin.php prüft, ob der Benutzer, der sie aufgerufen hat, auch berechtigt ist, das zu tun. Also musst du entsprechende Änderungen an der admin.php selbst vornehmen, nämlich die Überprüfung, ob es sich um "admin" handelt.

Davon abgesehen birgt dein System eventuell noch andere Risiken. So ist es für dich besonders wichtig, dass Benutzernamen einmalig sein müssen, denn sonst kann sich jemand unter dem Namen "admin" registrieren, der eigentlich gar keiner sein soll, und hat damit deinem System gezeigt, wer die Hosen anhat.

Allgemein würde ich dir eher dazu raten, das Ganze besser zu durchdenken und den Zugang zu kritischen Seiten nicht nur anhand eines Benutzernamen zu gestatten.

Geändert von Griecherus (17-05-2007 um 19:12 Uhr)
Mit Zitat antworten
  #3 (permalink)  
Alt 17-05-2007, 19:19
dr_mario
 Newbie
Links : Onlinestatus : dr_mario ist offline
Registriert seit: Apr 2007
Beiträge: 13
dr_mario ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi,
danke schon mal für die schnelle Antwort.

Ich habe jetzt beim Login, falls sich der Admin anmeldet, eine neue Session-Variable "is_admin = TRUE" deklariert, die dann auf jeder Admin-Seite abgefragt wird.

Benutzername und Kennwort werden in einer Datenbank verwaltet und bei Registrierung auf Einzigartigkeit geprüft.

Ich hoffe, dass ich jetzt einen einigermaßen sicheren Login habe, oder sieht noch jemand triviale Sicherheitslücken?

Falls jemand einen guten Link zu diesem Thema hat (ja, ich hab vorher Google verwendet), würde ich mich darüber freuen!

Viele Grüße,
Mario
Mit Zitat antworten
  #4 (permalink)  
Alt 17-05-2007, 19:33
Griecherus
 PHP Senior
Links : Onlinestatus : Griecherus ist offline
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
Griecherus ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Gut. Nach welchen Kriterium wird bei einem Login ausgemacht, ob die is_admin-Flag auf true gesetzt wird?
Ansonsten ist es relativ schwer zu sagen, ob es noch Sicherheitslücken in deinem Login gibt, ohne Code zu sehen. Interessant wären natürlich die SQL-Anfragen, Stichwort SQL-Injection. Vielleicht postet du ja mal entsprechenden Code, dann schauen wir mal.
Mit Zitat antworten
  #5 (permalink)  
Alt 17-05-2007, 20:08
dr_mario
 Newbie
Links : Onlinestatus : dr_mario ist offline
Registriert seit: Apr 2007
Beiträge: 13
dr_mario ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Nach Eingabe von Name (die Email-Adresse) und Passwort wird erst überprüft, ob der Name vorhanden ist und ob das dazugehörige Passwort stimmt, danach wird die o.a. Verzweigung durchgeführt.

Das Login-Formular ist mit QuickForm erstellt, wobei der Login-Namen (die Email-Adresse) auf ein richtiges Email-Format geprüft wird. Falls man also SQL-Injection versucht, wird eine falsche Eingabe erkannt.

Ich würde ja den Quellcode posten, da aber einige Klassen davon abhängen, wäre er recht lang. Mit Schlagworten nach denen ich googlen kann, wie eben SQL-Injection, ist mir schon sehr geholfen!

Ich habe gelesen, dass es sinnvoll ist, bei jeder Aktion eine neue Session-ID mit session_regenerate_id zu generieren, um ein abhören bzw. Austesten der SID zu verhindern...
Mit Zitat antworten
  #6 (permalink)  
Alt 17-05-2007, 20:16
Griecherus
 PHP Senior
Links : Onlinestatus : Griecherus ist offline
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
Griecherus ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Damit ist mir das Kriterium, nach dem dein Skript einen Administrator als solchen erkennt, immer noch nicht klar.

SQL-Injections ist ein sehr wichtiges Stichwort. Auf QuickForm würde ich mich was das angeht nicht verlassen; deine SQL-Anfragen müssen für sich selbst sicher sein, vom Benutzer stammende Parameter dementsprechend maskiert werden etc. pp.

Die Session-ID bei jedem Request neu zu generieren, halte ich für unnötig. Das gilt allerdings nicht, wenn es sich um kritische Aktionen handelt (nach erfolgreichem Login, Änderungen am Profil oder sonstiges).
Mit Zitat antworten
  #7 (permalink)  
Alt 17-05-2007, 20:43
dr_mario
 Newbie
Links : Onlinestatus : dr_mario ist offline
Registriert seit: Apr 2007
Beiträge: 13
dr_mario ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Also: nachdem Email und Password mit der DB abgeglichen und als korrekt erkannt sind, wird auf die Seite admin.php weitergeleitet, wenn die Emailadresse die des Admins ist (dann wird außerdem is_admin = true gesetzt), ansonsten wird auf die seite start.php verwiesen...
Mit Zitat antworten
  #8 (permalink)  
Alt 17-05-2007, 20:57
Griecherus
 PHP Senior
Links : Onlinestatus : Griecherus ist offline
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
Griecherus ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Wieso fügt du deiner Datenbanktabelle keine Spalte "is_admin" hinzu? Damit hättest du auch die Möglichkeit problemlos(er) andere Benutzer zu Admins zu machen, ohne ihre E-Mail-Adressen mit einer ellenlangen Liste abgleichen zu müssen. Nur als Vorschlag.

Wenn du das Ganze dynamischer gestalten möchtest, damit du auch mehrere Admins und gegebenenfalls auch andere Gruppen bedienen kannst, dann such mal nach Rechtesystem im Forum oder bei Google, da wirst du fündig.

Ich hoffe dir ist geholfen.
Mit Zitat antworten
  #9 (permalink)  
Alt 17-05-2007, 21:58
dr_mario
 Newbie
Links : Onlinestatus : dr_mario ist offline
Registriert seit: Apr 2007
Beiträge: 13
dr_mario ist zur Zeit noch ein unbeschriebenes Blatt
Standard

sehr guter Vorschlag

Vielen Dank für die schnelle Hilfe!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:24 Uhr.