thoomaas
Goto Top

PHP - LDAP l Usergruppen auslesen, vergleichen, zulassen

Hallo alle zusammen! face-smile

Ich habe mal wieder ein Problem mit meinem PHP Script..

Vielleicht kann mir wer helfen. Ich bin dabei mein PHP Seite über eine LDAP-Anmeldung abzusichern. Derzeit stehen die User einzeln in der Datenbank (20) und im AD (Windows Server 2008 R2) sind über 2000 User. Das wird mir dann zu viel Arbeit das einzeln zu pflegen und außerdem will sich nicht jeder mehrere Passwörter merken.

Die Verbindung zum Server klappt einwandfrei! Ich habe schon vieles gelesen und probiert, wie ich nun testen kann ob der eingegebene Username zum Passwort im AD übereinstimmt und zusätzlich in einer Gruppe ist! Denn pro Gruppe sollen in Zukunft andere Inhalte angezeigt werden.

ACHTUNG: Wie schon in 2 Beiträgen zuvor angemerkt, es wird immer noch nicht gegen SQL-Injections gesichert! Kommt aber vor Online-Schaltung.

Hier der Code der Anmeldeseite:
<?php
	session_start();
	include ('config.php');  
	include ('ldap.php');  
?>
<html>
 <head>
 <title>Protokol | Portal -- Login</title>
 </head>
 <body>
	<div id="navigation2">  
		<div class="logo-login"><img src="img/logo_small.png"></div>  
	</div>
	<?php 
		include("authenticate.php");  
		// check to see if user is logging out
		if(isset($_GET['out'])) {  
			// destroy session
			session_unset();
			$_SESSION = array();
			unset($_SESSION['user'],$_SESSION['access']);  
			session_destroy();
		}
		// check to see if login form has been submitted
		if(isset($_POST['userLogin'])){  
			// run information through authenticator
			if(authenticate($_POST['userLogin'],$_POST['userPassword']))  
			{
				// authentication passed
				header("Location: protokoll.php");  
				die();
			} else {
				// authentication failed
				$error = 1;
			}
		}	 
		
		/*
		$username = $_POST["username"];  
		$passwort = md5($_POST["password"]);  
		$abfrage = "SELECT username, passwort FROM login WHERE username LIKE '$username' LIMIT 1";  
		$ergebnis = mysql_query($abfrage); 
		$row = mysql_fetch_object($ergebnis);
		
		if($row->passwort == $passwort) {
			$_SESSION["username"] = $username; 
			echo "<p><div class='login'>Login als ".$_SESSION["username"]." erfolgreich. <br> Sie werden <a href=\'".$referrer."protokoll.php\'>weitergeleitet</a>.</div>"; 
			echo "<meta http-equiv='refresh' content='0; url=protokoll.php'>"; 
		}else{
			echo "Bitte Username und Passwort richtig eingeben!"; 
		}*/
	?> 
	<div id="content">  
		<div class="card">  
			<div class="login">  
				<form action="index.php" method="post">			  
					Username<br>
					<input type="text" id="eingabe" size="24" maxlength="50" name="userLogin"><br><br>  
					Passwort<br>
					<input type="password" id="eingabe" size="24" maxlength="50" name="userPassword"><br>  
					<p>
					<input type="submit" class="button" name="send" value="Login">  
					<p>
				</form>
			</div>
		</div>
	</div>
		<?php
			include('footer.php');  
		?>
	<!--
	<div id="footer">  
		&copy; by HannIT
	</div>
	-->
 </body>
 </html>

Der Code von "ldap.php":
<?php
#LDAP VARIABLEN
	$ldap_host = "ldap://subdomain.domain.de";  
	$ldap_port = "389";  
	$domain = "subdomain.domain.de";  
	$base_dn = "OU=Gruppen,OU=HannIT,DC=subdomain,DC=domain,DC=de";  
	$ldap_user = "xyz";  
	$ldap_pw = "xyz";  
	$usr_dmn = $ldap_user."@".$domain;  
	$ad_con = ldap_connect($ldap_host) or die("Couldn't connect to AD!");  
    
#LDAP OPTIONEN
	ldap_set_option($ad, LDAP_OPT_PROTOCOL_VERSION, 3);
	ldap_set_option($ad, LDAP_OPT_REFERRALS, 0);
	
#LDAP VERBINDUNG
	@ldap_bind($ad_con, $usr_dmn, $ldap_pw) or die("Couldn't connect to AD!");  

#LDAP GRUPPEN
	$Team1 = "";  
	$Team2 = "";  
	$Team3 = "";  
	$Team4 = "";  
	$Team5 = "";  
        $Team...= "";  
         ... (to be continued)
?>

Der Code von "config.php":
<?php
# SETTINGS
	error_reporting(1);

# DATENBANKVERBINDUNG AUFBAUEN
	$_SESSION["username"] = $username;  
	$servername = "localhost";  
	$username = "xyz";  
	$password = "xyz";  
	$dbname = "xyz";  
	$link = mysql_connect($servername, $username, $password);
	mysql_connect($servername, $username, $password) or die ("Verbindung fehlgeschlagen!");  
	mysql_select_db ($dbname);
	mysql_query("SET NAMES 'utf8'");  
	
#LOGOUT FUNKTION
	/*$logoutAction = $_SERVER['PHP_SELF']."?doLogout=true"; 
	if ((isset($_SERVER['QUERY_STRING'])) && ($_SERVER['QUERY_STRING'] != "")){ 
	  $logoutAction .="&". htmlentities($_SERVER['QUERY_STRING']); 
	}
	if ((isset($_GET['doLogout'])) &&($_GET['doLogout']=="true")){ 
	  $_SESSION['MM_Username'] = NULL; 
	  $_SESSION['MM_UserGroup'] = NULL; 
	  $_SESSION['PrevUrl'] = NULL; 
	  unset($_SESSION['MM_Username']); 
	  unset($_SESSION['MM_UserGroup']); 
	  unset($_SESSION['PrevUrl']); 
		  
	$logoutGoTo = "index.php"; 
	  if ($logoutGoTo) {
		header("Location: $logoutGoTo"); 
		exit;
	  }
	}*/

#DATEIEN EINBINDEN
	echo "<meta name='viewport' content='width=device-width, initial-scale=1.0'>";  
	echo "<link rel='stylesheet' href='style.css'/>";  
	#echo "<link rel='stylesheet' href='css/style-headkorr.css' media='only screen and (max-device-width:1199px)''>"; 
	#echo "<link rel='stylesheet' href='css/tablet.css' media='only screen and (max-device-width:999px)'>"; 
	#echo "<link rel='stylesheet' href='css/phone.css' media='only screen and (max-device-width:767px)'>"; 
	echo "<script type='text/javascript' src='plugins/ckeditor/ckeditor.js'></script>";  
	
	echo "<script src='http://code.jquery.com/jquery-1.9.1.min.js'></script>";  
    echo "<script src='http://code.jquery.com/ui/1.10.3/jquery-ui.js'></script>";  
	echo "<script src='plugins/hamburger/hamburger.js'></script>";  
	
# ALLGEMEINE VARIABLEN
	$searchrows = "rows='1'";  
?>


Dann soll auf die Seite "protokoll.php" weitergeleitet werden. Auf allen Unterseiten soll nun gecheckt werden ob der User 1. eingeloggt ist und 2. ob er die nötige Gruppe hat zum Anzeigen. Das kann man ja per Variable lösen, die in der Session weitergeschickt wird.

Ich hoffe ihr könnte mir weiterhelfen...Meine Logik ist derzeit am Ende! face-sad

Webserver: IIS auf Windows Server 2012 R2

Gruß
Thoomaas

Content-Key: 284451

Url: https://administrator.de/contentid/284451

Printed on: April 25, 2024 at 10:04 o'clock

Member: Thoomaas
Thoomaas Oct 02, 2015 at 09:50:22 (UTC)
Goto Top
Wie man sieht ist in der index.php noch ein Teil eines alten Versuchs drin...

Und die Datenbankabfragen für die Anmeldung aus MySQL heraus sind ja auch noch drin...

Gruß
Thoomaas
Mitglied: 122990
122990 Oct 02, 2015 at 09:50:31 (UTC)
Goto Top
PHP LDAP Login

Gruß grexit
Member: Thoomaas
Thoomaas Oct 05, 2015 at 05:54:50 (UTC)
Goto Top
Hat wirklich keiner eine Idee? face-sad
Member: Larmina
Larmina Oct 19, 2015 at 11:22:15 (UTC)
Goto Top
Hi,
das hier müsste eigentlich das sein was du suchst:

https://www.tutorials.de/threads/ldap-benutzergruppenabfrage.336506/

LG Larmina