php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2009

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 07.10.2009, 22:11  
Neuer Benutzer
 
Registriert seit: 07.10.2009
Beiträge: 3
PHP-Kenntnisse:
Anfänger
sliver2203 befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Ist der Login Bereich wirklich sicher?

Hallo,

ich habe mal eine Frage
Ich erstelle gerade einen Login-Bereich für meine Webseite.

Dafür habe ich vier Dateien angelegt:
1. auth.php
2. login.php
3. index.php
4. logout.php

Zum Code der einzelnen Dateien:
auth.php:
PHP-Code:
     session_start();

     
$hostname $_SERVER['HTTP_HOST'];
     
$path dirname($_SERVER['PHP_SELF']);

     if (!isset(
$_SESSION['angemeldet']) || !$_SESSION['angemeldet']) {
      
header('Location: http://'.$hostname.($path == '/' '' $path).'/login.php');
      exit;
      } 
login.php:
PHP-Code:
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
      
session_start();

      
$username $_POST['username'];
      
$passwort $_POST['passwort'];

      
$hostname $_SERVER['HTTP_HOST'];
      
$path dirname($_SERVER['PHP_SELF']);

      
// Benutzername und Passwort werden überprüft
      
if ($username == 'benjamin' && $passwort == 'geheim') {
       
$_SESSION['angemeldet'] = true;

       
// Weiterleitung zur geschützten Startseite
       
if ($_SERVER['SERVER_PROTOCOL'] == 'HTTP/1.1') {
        if (
php_sapi_name() == 'cgi') {
         
header('Status: 303 See Other');
         }
        else {
         
header('HTTP/1.1 303 See Other');
         }
        }

       
header('Location: http://'.$hostname.($path == '/' '' $path).'/index.php');
       exit;
       }
      } 
HTML-Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
 <head>
  <title>Geschützter Bereich</title>
 </head>
 <body>
  <form action="login.php" method="post">
   Username: <input type="text" name="username" /><br />
   Passwort: <input type="password" name="passwort" /><br />
   <input type="submit" value="Anmelden" />
  </form>
 </body>
</html> 

index.php:
HTML-Code:
<?php include('auth.php'); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
 <head>
  <title>Geschützter Bereich</title>
 </head>
 <body>
  <h1>Herzlichen Glückwunsch!</h1>
  <p>Sie sind nun angemeldet.</p>
  <p>Sie können sich auch wieder <a href="logout.php">abmelden</a>.</p>
 </body>
</html> 
und logout.php:
PHP-Code:
     session_start();
     
session_destroy();

     
$hostname $_SERVER['HTTP_HOST'];
     
$path dirname($_SERVER['PHP_SELF']);

     
header('Location: http://'.$hostname.($path == '/' '' $path).'/login.php'); 

Da wird das ganze ja mit Cookies gemacht. Das ist aber glaube ich alles recht unsicher. Ich will das später auch über eine Datenbank abfragen, den Benutzer und das Passwort, da weiß ich auch wie das geht! Es ist nur die Frage, kann ich zu jedem Nutzer dann auch eine Session-Id abspeichern und wie geht das?

Freu e mich auf Antworten!

gruß sliver
sliver2203 ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 08.10.2009, 07:38  
MDX
Benutzer
 
Registriert seit: 04.07.2008
Beiträge: 31
PHP-Kenntnisse:
Fortgeschritten
MDX befindet sich auf einem aufstrebenden Ast
MDX eine Nachricht über ICQ schicken
Standard

Du kannst in der login.php einfach eine MySQL-Abfrage durchführen, z.B.:
PHP-Code:
$abfrage=mysql_query("SELECT * FROM users WHERE username LIKE '".$POST["username"]."'"); // MySQL-Abfrage
if(mysql_num_rows($abfrage) > 0){
while(
$row=mysql_fetch_array($abfrage)){
$passwort=$row['passwort']; // Passwort auslesen
$id=$row['id']; // ID auslesen
}
if(
md5($_POST["passwort"])==$passwort){ // Abfrage
session_start(); // Session starten
$_SESSION['id']=$id;
header("location: /geschuetzteseite.php");
}else{
echo 
"Passwort falsch!"// Ausgabe
}
}else{
echo 
"Username nicht in der Datenbank"// Ausgabe

Dafür brauchst du eine MySQL-Tablle mit id, username und passwort (md5).
In der auth.php musst du nun nur überprüfen ob die
PHP-Code:
$_SESSION['id'
nicht leer ist und ggf. prüfen ob aktiv (z.B. zeile "status" in DB)
Logout machst du in diesem fall einfach mit
PHP-Code:
session_start();
session_unset();
session_destroy(); 
(Ungetestet)
MDX ist offline  
Alt 08.10.2009, 08:31  
Erfahrener Benutzer
 
Registriert seit: 28.05.2008
Beiträge: 1.897
PHP-Kenntnisse:
Fortgeschritten
rudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nett
Standard

Zitat:
PHP-Code:
WHERE username LIKE '".$POST["username"]."' 
warum denn like? dazu noch:mysql_real_escape_string

session_unset besser nicht verwenden. php manual auszug:

Zitat:
Hinweis: Verwenden Sie session_unset() nur bei veraltetem Code, bei dem nicht $_SESSION benutzt wird.
Zitat:
PHP-Code:
  <?php
// Initialisierung der Session.
// Wenn Sie session_name("irgendwas") verwenden, vergessen Sie es
// jetzt nicht!
session_start();

// Löschen aller Session-Variablen.
$_SESSION = array();

// Falls die Session gelöscht werden soll, löschen Sie auch das
// Session-Cookie.
// Achtung: Damit wird die Session gelöscht, nicht nur die Session-Daten!
if (isset($_COOKIE[session_name()])) {
    
setcookie(session_name(), ''time()-42000'/');
}

// Zum Schluß, löschen der Session.
session_destroy();
?>

@sliver2203 : benutze doch die Forensuche oder missbrauche google, da findest du jede Menge hilfreiches
__________________
++++ Wieder einer ins Netz gegangen: Phishers Fritz zufrieden ++++
Blog
rudygotya ist offline  
Alt 08.10.2009, 12:54  
Neuer Benutzer
 
Registriert seit: 07.10.2009
Beiträge: 3
PHP-Kenntnisse:
Anfänger
sliver2203 befindet sich auf einem aufstrebenden Ast
Standard Danke für die Antworten

Hallo,

ich werde deine Lösung mal ausprobieren, hätte auch sowas ähnliches gemacht. Eigentlich wollte ich genau wissen, ob das sicher ist mit dieser Session-Sache. Oder eher wie das genau funktioniert. Bei meinem programm wusste ich gar nicht, was in der
PHP-Code:
$_SESSION['angemeldet'
steht. Habe es mit echo dann ausgegeben und da kam "1". Das schien mir irgendwie unsicher. Kann man das nicht leicht herausbekommen? und jetzt wir eine User-ID abgespeichert, oder? Kann man das nicht auch knacken?

Also: @ rudygotya, ich suchte eigentlich weniger nach Lösungsvorschlägen, ondern nach einer Antwort, wie das mit den Session-ID funktioniert und wie es mit der Sicherheit aussieht. Darüber habe ich nichts konkretes hier und bei Google gefunden. Trotzdem freue ich mich über die Lösungsvorschläge!

Hat denn jemand eine Erklärung für mich parat?

mfg sliver2203
sliver2203 ist offline  
Alt 08.10.2009, 14:13  
Erfahrener Benutzer
 
Registriert seit: 25.09.2009
Beiträge: 2.044
PHP-Kenntnisse:
Fortgeschritten
BlackScorp wird schon bald berühmt werdenBlackScorp wird schon bald berühmt werden
Standard

deine ausgabe 1 ist nicht die user id, du hast ja session auf true gesetzt. true beudetet 1. eine session kannste nicht manipulieren. nur im quellcode selbst. eine session ist nur solange gültig, wie der browser offen ist. sobald du den browser schließt exestiert die $_SESSION nicht mehr (es seidenn du hast die schon davor geleert dann ist die sowieso leer) und allgemein würde ich so vorgehen bei einer login funktion:

1. User gibt userdaten ein
2. Die Userdaten werden mit der Datenbank überprüft
3. Wenn die Daten stimmen, dann speichere in der Datenbank die session_id()
4. Funktion erstellen welche überprüft ob der user eingeloggt ist
4.1 hole user id aus der datenbank welche die selbe session_id hat wie die session_id() aus dem script.
5. die geholte id an $_SESSION übergeben

zusätzlich das passwort mit md5($passwort+'irgendeinwert'); verschlüsseln

MFG
__________________
Mein kleines Projekt
-Cruel Online-
5 von 3 Leuten können kein Bruchrechnen
BlackScorp ist offline  
Alt 08.10.2009, 14:18  
Erfahrener Benutzer
 
Registriert seit: 27.06.2009
Beiträge: 498
PHP-Kenntnisse:
Anfänger
cetalian sorgt für eine eindrucksvolle Atmosphärecetalian sorgt für eine eindrucksvolle Atmosphäre
Standard

Natürlich kann ich eine Session als User manipulieren bzw mir eine fremde Session "besorgen". Bitte vergiss auch ganz schnell den Code in #2. Datenbankabfragen im Login ohne escapen und mit LIKE, oha
cetalian ist offline  
Alt 08.10.2009, 14:20  
Erfahrener Benutzer
 
Registriert seit: 25.09.2009
Beiträge: 2.044
PHP-Kenntnisse:
Fortgeschritten
BlackScorp wird schon bald berühmt werdenBlackScorp wird schon bald berühmt werden
Standard

Zitat:
Zitat von cetalian Beitrag anzeigen
Natürlich kann ich eine Session als User manipulieren bzw mir eine fremde Session "besorgen". Bitte vergiss auch ganz schnell den Code in #2. Datenbankabfragen im Login ohne escapen und mit LIKE, oha
also das dass bei cookies geht weis ich , aber bei sessions? wie willste das anstellen wenn man keine session_id über die url überträgt?
__________________
Mein kleines Projekt
-Cruel Online-
5 von 3 Leuten können kein Bruchrechnen
BlackScorp ist offline  
Alt 08.10.2009, 15:07  
Neuer Benutzer
 
Registriert seit: 07.10.2009
Beiträge: 3
PHP-Kenntnisse:
Anfänger
sliver2203 befindet sich auf einem aufstrebenden Ast
Standard Ja dann werde ich mal rumprobieren...

...eure Anmerkungen haben auf jeden Fall geholfen
Falls es nicht klappt melde ich mich nochmal, denke aber es klappt wohl.

mfg sliver2203
sliver2203 ist offline  
Alt 08.10.2009, 15:25  
Erfahrener Benutzer
 
Registriert seit: 28.05.2008
Beiträge: 1.897
PHP-Kenntnisse:
Fortgeschritten
rudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nett
Standard

click me

hier einer der neueren (Login mit Session und Cookies? Sicherste Möglichkeit?), schau auf die 3 Beiträge von David sowie die verlinkten Artikel. Falls du dann noch Fragen hast, immer raus damit
__________________
++++ Wieder einer ins Netz gegangen: Phishers Fritz zufrieden ++++
Blog
rudygotya ist offline  
Alt 08.10.2009, 17:12  
Erfahrener Benutzer
 
Registriert seit: 08.04.2009
Beiträge: 324
Creator befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
also das dass bei cookies geht weis ich , aber bei sessions? wie willste das anstellen wenn man keine session_id über die url überträgt?
Wenn du das jetzt nicht weiß solltest du dich nicht als Fortgeschritten bezeichnen.

Wo steht den wohl die SID wenn die nicht in der URL übertragen wird?

Zitat:
1. User gibt userdaten ein
2. Die Userdaten werden mit der Datenbank überprüft
3. Wenn die Daten stimmen, dann speichere in der Datenbank die session_id()
4. Funktion erstellen welche überprüft ob der user eingeloggt ist
4.1 hole user id aus der datenbank welche die selbe session_id hat wie die session_id() aus dem script.
5. die geholte id an $_SESSION übergeben
Was soll er mit der SID in der Db? Das schützt dich nicht vor Session oder Keksklau
Sorry aber das sehe ich grade als Totaler Blödsinn an.
Creator ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Session Login nur für bestimmten Bereich 9999 PHP Tipps 2009 4 24.08.2009 21:29
[Erledigt] Loginbereich / trotz Login nicht funktionsfähig woggly4 PHP Tipps 2009 5 27.07.2009 14:50
[Erledigt] Login erstellen coraplanet PHP Tipps 2008 33 21.04.2008 16:49
Forum Login per curl leb0rtran PHP Tipps 2008 1 19.03.2008 12:47
phpBB Loginscript in eigenes Login Script einbinden 2wuck PHP Tipps 2007 4 19.12.2005 23:10
Problem mit Login Script PHP Tipps 2007 4 15.11.2005 17:29
Login Bereich PHP Tipps 2005-2 12 15.08.2005 23:27
Eigener Login Bereich für WebSite PHP Tipps 2005-2 6 22.07.2005 04:25
[Erledigt] Zugriff auf Dateien im passwortgeschützten Bereich PHP Tipps 2005 15 16.03.2005 17:50
Login per Passwortfeld. PHP Tipps 2005 2 14.03.2005 18:37
[Erledigt] Login Bereich !! + Reg. PHP Tipps 2004 3 10.08.2004 15:17
Login Bereich PHP Tipps 2004 46 27.07.2004 11:06
Sicherer Bereich mit .htaccess + phpskript auf einem Server PHP Tipps 2004 2 23.07.2004 18:25
login bereich #2 PHP Tipps 2004 8 22.07.2004 20:21
Automatisierter Login in HTTP-geschützen Bereich ? brain_overload PHP-Fortgeschrittene 3 21.07.2004 17:54

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
sicheres login erstellen php, sicheres php login erstellen, header(\'location: http://\'.$hostname.($path == \'/\' ? \'\' : $path).\'/index.php\');, php geschützter bereich nach login bereich, login bereich html code, login bereich knacken post methode, $hostname.($path == \'/\' ? \'\' : $path), geschützter loginbereich code, header(\'http/1.1 303 see other\');, php session für login sicher, passwortgeschützter bereich mit session unsicher, html sicheres login erstellen, php session login sicher, login bereich sessions sicher, xhtml1-strict.dtd passwort entschlüsseln, website sicherer loginbereich, loginbereich prüfen ob angemeldet, php überprüfen login sicher ist, php sicherer login, php_self sicher

Alle Zeitangaben in WEZ +1. Es ist jetzt 18:35 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum