Fahrtenbuch genial!
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten
Alt 10.07.2002, 23:40   #1
TP-Greis
 
Benutzerbild von Boris
 
Registriert seit: Mar 2001
Ort: Berlin, Germany
Boris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKE

"Mein" Login-System mit PHP, MySQL & Co - ist das "sicher"?


Hi,

ich habe ebenso wie tiger ein soweit tadellos funktionierendes Loginsystem erstellt. Benutzt habe ich PHP4-Sessions, die Zugangsdaten (Log + Pass) sind in einer Datenbank gespeichert. Das Passwort ist zusätzlich mit md5() verschlüsselt.

Rein theoretisch müsste es auch mit abgeschalteten globals funktionieren

Jetzt zur Frage - ich selbst habs nicht geschafft, das System irgendwie zu "umgehen" ... schaut es Euch mal bitte an, seht Ihr in diesem Verfahren ein Sicherheitsproblem?

Das Formular und den HTML-Rest hab ich jetzt einfach mal weggelassen...

Index.php:
PHP-Code:
if ($_POST["submit"])
{
    if (
$_POST["username"] && $_POST["passwort"])
    {
        
$passwort=$_POST["passwort"];
        
$passwort=md5($passwort);
        
        
$check mysql_fetch_array(mysql_query("SELECT user_login FROM user_data WHERE user_login='$username' AND user_pass='$passwort'"));
        if(!empty(
$check))
        {
            
$logged_in=true;
            
session_register("logged_in");
            
            
$sn=session_name();
            
$sid=session_id();
            
header("Location: news/index.php?$sn=$sid");
        }
          else
          {
            
$error="Der Loginname oder das Passwort waren falsch.<br>Bitte versuchen Sie es noch einmal.";
          }
    }
    else
    {
        
$error="Bitte geben Sie den Benutzername und das Passwort ein.";
    }

Nach einem erfolgreichen Login wird in die Session die Variable $logged_in geschrieben. Diese wird nun auf jeder Seite, die geschützt sein soll, so überprüft:

PHP-Code:
if (!$_SESSION['logged_in'])
{
  
header("Location: index.php");

Sprich: ist in der Session die Variable vorhanden, wird die Seite dargestellt. Ist sie es nicht, wird das Loginformular gezeigt (index.php).

Nun, was sagt ihr? Sicher oder Sicherheitslecks ohne Ende?
__________________
My software never has bugs. It just develops random features ...

» DevShack - die Website des freien Webentwicklers Boris
Boris ist offline   Mit Zitat antworten


Alt 10.07.2002, 23:56   #2
Registered User
 
Benutzerbild von Toxical
 
Registriert seit: Dec 2001
Ort: Berlin
Toxical macht alles soweit korrekt
Ich mach es immer genauso..., das einzige was du noch machen könntest, ist anstatt nur logged_in zu übergeben, den name+pass zu übergeben, und dann bei jedem Seitenaufruf, diese neu mit der Datenbank abzugleichen, falls sich eben während einer Besuchsession des Users etwas an seinen Zugangsdaten ändert.

Steigert natürlich den DB-Traffic enorm...

Aber ich find' es im Prinzip sicher genug so, bin aber kein Security Experte
Toxical ist offline   Mit Zitat antworten
Alt 11.07.2002, 10:23   #3
TP-Specialist
 
Benutzerbild von mike
 
Registriert seit: Jan 2002
Ort: TP/Dynamik
mike bringt sich richtig ein
nur bedingt.

vorausgesetzt, du benennst deine übergabevariablen genauso wie die datenbankfelder, oder diese sind mir bekannt, dann ist es relativ einfach via sql-boardmittel dein script auszuhebeln.

gebe ich: %' or user_login like '%' or user_pass like '%

in das feld username ein, hab ich mich schon eingeloggt.

in deinem fall ist es eher unwahrscheinlich, dass jemand deine datenbankfelder errät. hat man aber ein freies script = quellcode, dann ist das durch solch einen befehl relativ einfach sich zugang zu verschaffen - trotz md5.

nochmal einen gegencheck zum übergebenen passwort und dem db-passwort könnte einen zusatzschutz schaffen.


imho ist die sicherste variante, sich einzuloggen, - und daran arbeite ich gerade - ist via db-user.
soll heissen:
jeder user wird als db-user angelegt und ich grante dem user minimale rechte auf die db.

identifikation passiert dann via db-connect. geht diese in ordnung, dann gibt es den user wenn nicht, dann falsches login.
hier dürften solch simple sql-tricks nicht arbeiten.

was haltet ihr davon. hat das schwächen? spricht was dagegen?

lf
__________________
Gehelft? Hier kannst du dich bedanken.

mike
mike ist offline   Mit Zitat antworten
Alt 11.07.2002, 12:43   #4
TP-Greis
 
Benutzerbild von Boris
 
Registriert seit: Mar 2001
Ort: Berlin, Germany
Boris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKE
Sorry, aber das verstehe ich nicht. Wieso soll ich das Passwort nochmal "gegenchecken"? Das Passwort wird doch mit dem in der Datenbank verglichen, passend zum Usernamen, der eingegeben wurde. Selbst wenn einer den Usernamen WEISS, ohne das Passwort kommt er auch nicht weiter.

Der Username allein wird Dich nicht ins System bringen

Mein System funktioniert doch so, wie Du es vorhast. Existiert der User nicht in der DB, kommt man nicht rein. Existiert er, und das Passwort ist nicht richtig, kommt man nicht rein. Erst wenn beides übereinstimmt, kommt man rein.

Sicherheitshalber hab ich Deine Query mal eingetragen (%' or user_login like '%' or user_pass like '%) - es ging nicht
__________________
My software never has bugs. It just develops random features ...

» DevShack - die Website des freien Webentwicklers Boris

Geändert von Adagio (11.07.2002 um 12:48 Uhr).
Boris ist offline   Mit Zitat antworten
Alt 11.07.2002, 14:34   #5
TP-Specialist
 
Benutzerbild von mike
 
Registriert seit: Jan 2002
Ort: TP/Dynamik
mike bringt sich richtig ein
Zitat:
Der Username allein wird Dich nicht ins System bringen
schlimmer noch ich brauch weder username noch passwort!


dein script rettet die variablenübergabe aus dem loginscript.

hier werden die ' gequoted übergeben. das zerbröselt dann den db-string.
ich hatte aus faulheit dein gepostetes script mit dummys gefüttert und die var username direkt im script definiert.

entwarnung also nur, wenn quoting eingeschaltet ist.
das ist aber via magic_quotes_gpc in der php.ini definiert. somit vorher auf den host gucken ob der magic_quotes_gpc =on hat.

Übergabe mit magic_quotes_gpc =on
SELECT user_login FROM user_data WHERE user_login ='%\' or user_login like \'%\' or login_pass like \'%' AND login_pass ='68bd3904233f2eb524f3ca047d9eac04'
geht net.

Böser Sql - String magic_quotes_gpc =off
SELECT user_login FROM user_data WHERE user_login ='%' or user_login like '%' or login_pass like '%' AND login_pass='68bd3904233f2eb524f3ca047d9eac04'
zerbröselt dir dein login.


Zitat:
Mein System funktioniert doch so, wie Du es vorhast. Existiert der User nicht in der DB, kommt man nicht rein. Existiert er, und das Passwort ist nicht richtig, kommt man nicht rein. Erst wenn beides übereinstimmt, kommt man rein.
schon richtig. das machst du mit deinen strikten zuweisungsoperatoren (=) aber:
durch den sql-string overrulst du deine = - zeichen in der query durch 'OR' und es werden alle user egal mit welchen passwörtern ausgegeben.
und ich in den geschützten bereich komm ich in deinem script sobald ich mehr als keinen user gefunden hab.
das ist somit der fall - weil er mir alle user ausgibt.

durch den gegencheck zur übergebenen variable kann ich mir aber nochmal gewissheit schaffen ob auch wirklich nur der user mit dem richtigen passwort reingekommen ist.
is aber eben nur im speziellen fall notwendig, wenn der user ausgehebelt wurde.


lf

p.s. haben wir irgendwo aktualisierungsprobleme mit dem tp?
hatte immer noch den letzten eintrag vom 9:35 oder so in der übersicht
- und JA ich hab reloaded
__________________
Gehelft? Hier kannst du dich bedanken.

mike
mike ist offline   Mit Zitat antworten
Alt 11.07.2002, 14:56   #6
TP-Greis
 
Benutzerbild von Boris
 
Registriert seit: Mar 2001
Ort: Berlin, Germany
Boris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKE
Zitat:
Original geschrieben von Longfang

Übergabe mit magic_quotes_gpc =on
SELECT user_login FROM user_data WHERE user_login ='%\' or user_login like \'%\' or login_pass like \'%' AND login_pass ='68bd3904233f2eb524f3ca047d9eac04'
geht net.

Böser Sql - String magic_quotes_gpc =off
SELECT user_login FROM user_data WHERE user_login ='%' or user_login like '%' or login_pass like '%' AND login_pass='68bd3904233f2eb524f3ca047d9eac04'
zerbröselt dir dein login.
Nun, magic_quotes sind eingeschaltet. Und selbst wenn nicht, dann brauche ich doch nur ein "addslashes()" hinzufügen und das Problem ist gegessen, oder?
__________________
My software never has bugs. It just develops random features ...

» DevShack - die Website des freien Webentwicklers Boris
Boris ist offline   Mit Zitat antworten
Alt 11.07.2002, 15:18   #7
TP-Specialist
 
Benutzerbild von mike
 
Registriert seit: Jan 2002
Ort: TP/Dynamik
mike bringt sich richtig ein
Zitat:
Und selbst wenn nicht, dann brauche ich doch nur ein "addslashes()"

den zufall zur methode machen

aber ansich ja, hast recht.

anderer ansatz:


PHP-Code:
mysql_fetch_array(mysql_query("SELECT user_pass FROM user_data WHERE user_login='$username' AND user_pass='$passwort'"));
       
"));
       
if($check[0]==$passwort)
.... login
else
.... baba 
? was sagst dazu ?

lf
__________________
Gehelft? Hier kannst du dich bedanken.

mike
mike ist offline   Mit Zitat antworten
Alt 11.07.2002, 15:21   #8
TP-Greis
 
Benutzerbild von Boris
 
Registriert seit: Mar 2001
Ort: Berlin, Germany
Boris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKE
Ja, das wäre auch eine Lösung

Hmm, wir könnten doch "das" Loginsystem überhaupt entwickeln und es dem TP als Script überreichen
__________________
My software never has bugs. It just develops random features ...

» DevShack - die Website des freien Webentwicklers Boris
Boris ist offline   Mit Zitat antworten
Alt 11.07.2002, 15:26   #9
TP-Specialist
 
Benutzerbild von mike
 
Registriert seit: Jan 2002
Ort: TP/Dynamik
mike bringt sich richtig ein
gibts doch schon eine pear-klasse dafür.
die wird quasi freihaus mit jeder php-installation mitgeliefert.

aber warum net.... ist doch eh schon fast fertig, oder?


lf
__________________
Gehelft? Hier kannst du dich bedanken.

mike
mike ist offline   Mit Zitat antworten
Alt 11.07.2002, 15:33   #10
TP-Greis
 
Benutzerbild von Boris
 
Registriert seit: Mar 2001
Ort: Berlin, Germany
Boris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKE
"pear-klasse" ... äh, das sagt mir jetzt nix ... kannst Du mir das näher erläutern?

Das schöne an dem Teil ist doch, dass es "selbst" erstellt ist und nix vorgefertigtes ist.
__________________
My software never has bugs. It just develops random features ...

» DevShack - die Website des freien Webentwicklers Boris
Boris ist offline   Mit Zitat antworten
Alt 11.07.2002, 15:49   #11
TP-Specialist
 
Benutzerbild von mike
 
Registriert seit: Jan 2002
Ort: TP/Dynamik
mike bringt sich richtig ein
pear is eine super sache.

pear.php.net

da haben sich entwickler zusammengesetzt und bauen php-standardcode um das radl net immer neu zu erfinden.

main-parts:
db-abstraktion, die ich persönlich schon nutze
html-klassen von tabellengenerator bis formgenerator und menüklasse
mail-klasse für die mail bis mime-mail funktionalität
und wie gesagt auch eine klasse die das login übernimmt.

uvm.

wenn man es schon net verwendet kann man sich immer wieder die eine oder andere inspiration holen.

Zitat:
Das schöne an dem Teil ist doch, dass es "selbst" erstellt ist und nix vorgefertigtes ist.
totaly ack.

lf
__________________
Gehelft? Hier kannst du dich bedanken.

mike
mike ist offline   Mit Zitat antworten
Alt 14.07.2002, 14:28   #12
TP-Insider
 
Benutzerbild von TobiasKa
 
Registriert seit: Feb 2002
Ort: Burgkichen (Austria)
TobiasKa ist auf einem guten Weg
da hat vorhin jemand was von abgeschalteten globals gesagt!
gibts die wohl bald net mehr????

HILFE, dann wär mein ganzes CMS im ARSCH
TobiasKa ist offline   Mit Zitat antworten
Alt 14.07.2002, 16:18   #13
TP-Supporter
 
Benutzerbild von SMURF
 
Registriert seit: Mar 2001
Ort: Coburg / Bayern
SMURF ist auf einem guten Weg
hi,

wäre schon besser wenn du dich langsam daran gewöhnen würdest auf globals zu verzichten. Die meisten Provider haben glaube ich register globals noch auf on gesetzt, um zahlreichen Beschwerdemails vorzubeugen

solltest du Zugriff auf die php.ini haben kannst du die Einstellungen ohnehin vornehmen wie es dir passt. Aber allein aus Sicherheitsgründe ist es ratsam register globals auf off zu setzen.

Gruß
SMURF
SMURF ist offline   Mit Zitat antworten
Alt 14.07.2002, 20:08   #14
TP-Specialist
 
Benutzerbild von mike
 
Registriert seit: Jan 2002
Ort: TP/Dynamik
mike bringt sich richtig ein
ich arbeite mittlerweile auch mit den superglobals.
glaubt man gar net, wie übersichtlich dann so ein script werden kann...

ich find den schritt wichtig und gut.

lf
__________________
Gehelft? Hier kannst du dich bedanken.

mike
mike ist offline   Mit Zitat antworten
Alt 14.07.2002, 20:16   #15
TP-Insider
 
Benutzerbild von TobiasKa
 
Registriert seit: Feb 2002
Ort: Burgkichen (Austria)
TobiasKa ist auf einem guten Weg
Superglobals???
TobiasKa ist offline   Mit Zitat antworten
Antwort

  Aktuelles Thema
  TP Hilfe Forum > Web-Editoren & Coding > Traum-Dynamik
"Mein" Login-System mit PHP, MySQL & Co - ist das "sicher"? "Mein" Login-System mit PHP, MySQL & Co - ist das "sicher"?
« koehtopps phplib | PHP: Anzahl Ordner, Dateien »

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
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


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:54 Uhr.

Powered by: vBulletin Version 3.7 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd. / Search Engine Friendly URLs by vBSEO 3.2.0 ©2008, Crawlability, Inc.
Traum-Projekt.com | Suchen | Archiv | Impressum | Kontakt | | | Nach oben |



1 2 3 4 5 6 7 8 9 10 11 12 13 14