Hallo,
ich komme so langsam weiter mit meinen ersten PHP Gehversuchen und habe eine Anwendung gebaut, in der ich Teilbereiche mit einer Authentifizierung schützen muß. Dabei habe ich eine DB (Postgresql) die eine User Tabelle (auth_user), eine Gruppen Tabelle (auth_group) und eine Verknüpfungstabelle (auth_lookup_user) zwischen den beiden hat. So kann jeder User in beliebigen Gruppen Mitglied sein.
Bisher habe ich folgenden Code geschrieben: login.php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
//Userdb Recordset
$sqlString_mytab = "SELECT * FROM auth_user";
$result_mytab = pg_query($dbconn , $sqlString_mytab) or die('Connection failed (pg_query): ' . pg_last_error());
//per default nicht vertrauenswürdig
$usertrust = false;
//Username
$username = $_POST['username'];
//Pw als md5-hash
$hashpw = hash('md5', $_POST['passwort']);
//DB Schleife
while ($row = pg_fetch_assoc($result_mytab)) {
if($username === $row['user_name'] && $hashpw === $row['user_pwd']){
$usertrust = true;
$userid = $row['userid'];
$username = $row['user_name'];
}
}
// Wenn Bedingung erfüllt Sessions setzen
if ($usertrust) {
//Ermitteln, welche Gruppenzugehörigkeit der USER hat
$sqlString_group_user = "SELECT auth_group.group_name,
auth_group.group_desc,auth_lookup_user.id FROM auth_group
INNER JOIN auth_lookup_user ON auth_group.groupid = auth_lookup_user.groupid
WHERE auth_lookup_user.userid = ".$userid;
$result_group_user = pg_query($dbconn , $sqlString_group_user) or die('Connection failed (pg_query): ' . pg_last_error());
$group_user_array = array();
while ($row_group_user = pg_fetch_assoc($result_group_user)) {
array_push($group_user_array,$row_group_user['group_name']);
}
session_start();
//Sessionvariablen setzen
$_SESSION['clientsession_uid'] = $userid;
$_SESSION['clientsession_un'] = $username;
$_SESSION['clientsession_ug'] = $group_user_array;
}
}
Auf einer geschützten Seiten wird nun immer über eine Funktion geprüft ob die Sessionvariablen "clientsession_uid" und "clientsession_ug" vorhanden sind und eventuell Code ausgegeben der nur für eine bestimmte Gruppe gedacht ist: seitexy.php
if(isset($_SESSION['clientsession_uid']) && isset($_SESSION['clientsession_ug']){
//Seiteninhalt
in_array("gruppe1",$_SESSION['clientsession_ug'],true){
//schreibe geschützten Code für Gruppe1
}
}
Mich würde nun interessieren, ob das so sicher ist, oder obe ich da ein paar böse Schnitzer drin habe. Danke für Euer Feedback Hans