Zum Inhalt springen

Passwortschutz - PHP/MySQL - Eure Meinung


Empfohlene Beiträge

Hallo,

eure Meinung ist mir wichtig ...

Folgendes ... ich habe einen Login geschrieben auf Basis von PHP und MySQL.

Meine Frage an euch, meint Ihr der Source ist so sicher genug oder müssten noch hier und da Eckpunkte verändert werden?

Hier der Source ...

inc.php


<?php

@session_start();

@mysql_connect("HOST","USER","PASS");
@mysql_select_db("DB");

function check_string($string) {

// erlaubte zeichen a-z,A-Z,0-9,-,_

if((preg_match('/^[a-zA-Z0-9\-\_]+$/',$string))) return true;

return false;

}


function login($benutzername,$kennwort,$modus=1,$cookie_gelesen=1) {

// ############# Konfiguration start #############

// ### Cookies ###

// Name des Cookies
$conf['cookie_name'] = "login_cookie";

// Ablaufzeit des Cookies (1 Monat)
$conf['cookie_zeit'] = time()+3600*24*7*4;

// Inhalt des Cookies (Wird im spaeterem Verlauf festgelegt)
$conf['cookie_inhalt'] = "";

// ### Sonstiges ###

// Modus ( 1 = Session und Cookie setzen / 2 = Session ohne Cookie setzen )
$conf['modus'] = $modus;

// CookieSet ( 1 = Benutzername und Kennwort sind nicht aus einem Cookie entnommen / <1 = Benutzername und Kennwort sind einem Cookie entnommen somit ist das Kennwort schon verschluesselt )
$conf['cookie_gelesen'] = $cookie_gelesen;

// ### Variablen ###

// Benutzername
$vars['benutzername'] = htmlspecialchars(trim($benutzername));

// Kennwort
$vars['kennwort'] = htmlspecialchars(trim($kennwort));

// ############# Konfiguration ende #############

// Ist der Benutzername oder das Kennwort "leer" oder sind ungueltige Zeichen im String dann gib ein false wert zurueck
if(strlen($vars['benutzername']) == 0 OR strlen($vars['kennwort']) == 0 OR !check_string($vars['benutzername']) OR !check_string($vars['kennwort'])) {

return false;

}else {

// Ist das Kennwort NICHT aus einem Cookie dann muss es mit md5 verschluesselt bzw. verhasht werden
if($conf['cookie_gelesen'] == 1) {

$vars['kennwort'] = md5($vars['kennwort']);

}

// SQL Abfrage ob benutzername und kennwort gleich den in der Datenbank sind
$sql = @mysql_query("SELECT benutzer_id FROM tbl_benutzer WHERE benutzername = '".$vars['benutzername']."' AND kennwort = '".$vars['kennwort']."' ");

// Ist die Abfrage erfolgreich dann check den Modus
if(@mysql_num_rows($sql) == 1) {


if($conf['modus'] == 1) {

// Cookie Inhalt wird aus benutzername@kennwort zusammengebaut
$conf['cookie_inhalt'] = $vars['benutzername']."@".$vars['kennwort'];

// Cookie wird gesetzt
@setcookie($conf['cookie_name'],$conf['cookie_inhalt'],$conf['cookie_zeit']);

// Session für den login wird gesetzt
$_SESSION['success'] = true;

return true;

}else {

// Session für den login wird gesetzt
$_SESSION['success'] = true;

return true;

}

}else {

// SQL Abfrage hat nicht geklappt
return false;

}

}

}

[/php]

[b]index.php[/b]

[php]

<?php

// Pruefen ob der Browser Cookies akzeptiert
if(isset($_COOKIE['browser_check'])) {
$browser_check = true;
}elseif($_GET['check'] != 1) {

@setcookie("browser_check","set",time()+3600);
header("Location: index.php?check=1");


}

include("inc.php");

// Wenn $_GET['logout'] gesetzt ist dann loesche $_SESSION['success']
if(isset($_GET['logout'])) {

// Wenn $_COOKIE['login_cookie'] gesetzt ist dann loesche Cookie
if(isset($_COOKIE['login_cookie'])) @setcookie("login_cookie",0,time()-3600);

// Loesche SESSION['success']
unset($_SESSION['success']);

//Leite weiter zur index.php
header("Location: index.php");

}

// Wenn $_COOKIE['login_cookie'] gesetzt ist dann ueberpruefe den Inhalt und fuehre ggf. den auto login aus
if(isset($_COOKIE['login_cookie']) AND !isset($_POST['sender']) AND !isset($_GET['logout'])) {

// Hole den Inhalt aus dem Cookie
$cookie_inhalt = $_COOKIE['login_cookie'];

// Trenne benutzername und kennwort anhand des Trennzeichens @
$cookie_inhalt = explode("@",$cookie_inhalt);

// Gehe mit Cookiedaten in die login funktion
login($cookie_inhalt[0],$cookie_inhalt[1],1,2);

}

// Wenn Sumbit gepostet wurde
if(isset($_POST['sender'])) {

// Wenn Cookie setzen "aktiv"
if($_POST['co'] == 'on') {

if(login($_POST['username'],$_POST['password']) == false) {

echo "Sry da hat was nicht geklappt";

}

}else {

if(login($_POST['username'],$_POST['password'],2,1) == false) {

echo "Sry da hat was nicht geklappt";

}

}

}



?>


<html>
<head>
<title>test</title>
</head>

<body bgcolor="#FFFFFF" topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0" >
<?php

if(isset($_SESSION['success'])) {

echo "drin<br><a href='index.php?logout=true'>Logout</a>";


}else {

?>

<form target="_self" method="post" name="main">
<?php if(!isset($browser_check)) echo "Ihr Browser akzeptiert keine Cookies, daher wird dieses Feld deaktiviert<br><br>"; ?>
User : <input type="text" name="username"><br>
Pass : <input type="text" name="password"><br>
Cookie (ja/nein) : <input type="checkbox" name="co" <?php if(!isset($browser_check)) echo "disabled";?>><br>
<input type="submit" name="sender">

</form>

<?php } ?>

</body>
</html>

Ich danke schon einmal für replys

Gruss Sven

Link zu diesem Kommentar
Auf anderen Seiten teilen


<?php

// ...
// CookieSet ( 1 = Benutzername und Kennwort sind nicht aus einem Cookie entnommen / <1 = Benutzername und Kennwort sind einem Cookie entnommen somit ist das Kennwort schon verschluesselt )
$conf['cookie_gelesen'] = $cookie_gelesen;


[/php]

Du speicherst nicht wirklich ein Kennwort in einem Cookie, oder? Egal ob verschlüsselt oder nicht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

sessionvariablen gehen nicht ?

was machste wenn ein user cookies ausgeschaltet hat ?

Sag mal, hast du dir überhaupt nur ansatzweise den Source angeguckt ? Wenn ja dann frage ich mich, was deine Fragestellung soll ...

Wenn der User Cookies deaktiviert hat, bekommt er gar nicht die möglichkeit das häkchen bei "cookies setzen" zu machen denn "disabled".


<?php
// Pruefen ob der Browser Cookies akzeptiert
if(isset($_COOKIE['browser_check'])) {
$browser_check = true;
}elseif($_GET['check'] != 1) {

@setcookie("browser_check","set",time()+3600);
header("Location: index.php?check=1");

}

?>
<form target="_self" method="post" name="main">
<?php if(!isset($browser_check)) echo "Ihr Browser akzeptiert keine Cookies, daher wird dieses Feld deaktiviert<br><br>"; ?>
User : <input type="text" name="username"><br>
Pass : <input type="text" name="password"><br>
Cookie (ja/nein) : <input type="checkbox" name="co" <?php if(!isset($browser_check)) echo "disabled";?>><br>
<input type="submit" name="sender">

</form>

[/PHP]

Natürlich arbeite ich mit Sessions ... stell dir vor, sogar wenn der User ein Cookie setzt wird der login via Session gemacht denn, der Cookie übernimmt nur EINMAL das einloggen (was ja auch sinn und zweck der sache ist)

so far ...

Link zu diesem Kommentar
Auf anderen Seiten teilen

eure Meinung ist mir wichtig ...

Das freut mich aber :)

PW speichern irgendwo is immer schlecht, weil das kann einfach geklaut werden und damit hat derjenige der es hat dann immer Zugriff... einen Cookie "fälschen" ist ja noch viel einfacher als das PW aus dem Cookie zu klauen.

Ich hab das bei mir so gemacht, dass ich über die Option "Angemeldet bleiben" einen Cookie setze, der aber nciht das PW enthälz sondern einen zufälligen MD5-Hash. Dieser Hash ist in einer extra Tabelle zusammen mit der User-Id gespeichert. Außerdem einem Ablaufdatum (1 Woche). Wenn beim Betreten der Seite keine Session aktiv ist oder der Besucher nicht angemeldet wird dieser Hash in der Tabelle gesucht und das Ablaufdatum geprüft. Wenn alles passt, ist der Benutzer der Benutzer, mit der dortigen ID.

Natürlich ist das auch nicht 100% sicher, aber darüber muss der Benutzer sich eben im klaren sein. Besser als das PW in einem Cookie zu speichern ist es aber IMHO allemal.

Ach ja, das Ablaufdatum wird bei jedem Login neu gesetzt, und wenn der Benutzer Abmelden klickt, wird der Cookie (oder nur der Eintrag in der Tabelle?) gelöscht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

welcher Eintrag in der Tabelle ???

Die Tabelle, die den Hash einem User zuordnet. Und ich hab auch nie gesagt, dass du die schon hast ;)

Natürlich reicht es einfach, den Cookie zu löschen... im Idealfall. Wenn der Cookie aber kompromitiert worden ist, dann nicht mehr. Außerdem läuft bei mir bei jeder Anfrage nach der Hash-UserID Zuordnung eine Funktion, die alte Einträge löscht.

Es ist damit also theoretisch schon möglich, den Hash zu stehlen und sich als User einzuloggen. Sobald der User sich aber abmeldet oder die Woche (in dem Fall) rum ist, braucht man wieder das Passwort, welches nur der User hat.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...