From dd0130670fe3cab4c7e2c1ab4f3bf0d2b2d512b0 Mon Sep 17 00:00:00 2001
From: Denny Bortfeldt <denny@bortfeldt.net>
Date: Mon, 27 Jun 2016 18:02:16 -0400
Subject: [PATCH] When uploading a logo which is smaller than the current ispconfig one, then the logo will be on the left side of the header. In my opinion it will look better when it's centered. You could vote about it ;)

---
 interface/lib/classes/auth.inc.php |   95 +++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 83 insertions(+), 12 deletions(-)

diff --git a/interface/lib/classes/auth.inc.php b/interface/lib/classes/auth.inc.php
index 9abb535..4c97757 100644
--- a/interface/lib/classes/auth.inc.php
+++ b/interface/lib/classes/auth.inc.php
@@ -57,7 +57,7 @@
 		global $app, $conf;
 
 		$userid = $app->functions->intval($userid);
-		$client = $app->db->queryOneRecord("SELECT client.limit_client FROM sys_user, client WHERE sys_user.userid = $userid AND sys_user.client_id = client.client_id");
+		$client = $app->db->queryOneRecord("SELECT client.limit_client FROM sys_user, client WHERE sys_user.userid = ? AND sys_user.client_id = client.client_id", $userid);
 		if($client['limit_client'] != 0) {
 			return true;
 		} else {
@@ -73,12 +73,12 @@
 		$groupid = $app->functions->intval($groupid);
 
 		if($userid > 0 && $groupid > 0) {
-			$user = $app->db->queryOneRecord("SELECT * FROM sys_user WHERE userid = $userid");
+			$user = $app->db->queryOneRecord("SELECT * FROM sys_user WHERE userid = ?", $userid);
 			$groups = explode(',', $user['groups']);
 			if(!in_array($groupid, $groups)) $groups[] = $groupid;
 			$groups_string = implode(',', $groups);
-			$sql = "UPDATE sys_user SET groups = '$groups_string' WHERE userid = $userid";
-			$app->db->query($sql);
+			$sql = "UPDATE sys_user SET groups = ? WHERE userid = ?";
+			$app->db->query($sql, $groups_string, $userid);
 			return true;
 		} else {
 			return false;
@@ -95,7 +95,7 @@
 		
 		// simple query cache
 		if($this->client_limits===null)
-			$this->client_limits = $app->db->queryOneRecord("SELECT client.* FROM sys_user, client WHERE sys_user.userid = $userid AND sys_user.client_id = client.client_id");
+			$this->client_limits = $app->db->queryOneRecord("SELECT client.* FROM sys_user, client WHERE sys_user.userid = ? AND sys_user.client_id = client.client_id", $userid);
 
 		// isn't client -> no limit
 		if(!$this->client_limits)
@@ -114,13 +114,13 @@
 		$groupid = $app->functions->intval($groupid);
 
 		if($userid > 0 && $groupid > 0) {
-			$user = $app->db->queryOneRecord("SELECT * FROM sys_user WHERE userid = $userid");
+			$user = $app->db->queryOneRecord("SELECT * FROM sys_user WHERE userid = ?", $userid);
 			$groups = explode(',', $user['groups']);
 			$key = array_search($groupid, $groups);
 			unset($groups[$key]);
 			$groups_string = implode(',', $groups);
-			$sql = "UPDATE sys_user SET groups = '$groups_string' WHERE userid = $userid";
-			$app->db->query($sql);
+			$sql = "UPDATE sys_user SET groups = ? WHERE userid = ?";
+			$app->db->query($sql, $groups_string, $userid);
 			return true;
 		} else {
 			return false;
@@ -129,11 +129,32 @@
 
 	public function check_module_permissions($module) {
 		// Check if the current user has the permissions to access this module
+		$module = trim(preg_replace('@\s+@', '', $module));
 		$user_modules = explode(',',$_SESSION["s"]["user"]["modules"]);
-		if(!in_array($module,$user_modules)) {
-			// echo "LOGIN_REDIRECT:/index.php";
-			header("Location: /index.php");
-			exit;
+		if(strpos($module, ',') !== false){
+			$can_use_module = false;
+			$tmp_modules = explode(',', $module);
+			if(is_array($tmp_modules) && !empty($tmp_modules)){
+				foreach($tmp_modules as $tmp_module){
+					if($tmp_module != ''){
+						if(in_array($tmp_module,$user_modules)) {
+							$can_use_module = true;
+							break;
+						}
+					}
+				}
+			}
+			if(!$can_use_module){
+				// echo "LOGIN_REDIRECT:/index.php";
+				header("Location: /index.php");
+				exit;
+			}
+		} else {
+			if(!in_array($module,$user_modules)) {
+				// echo "LOGIN_REDIRECT:/index.php";
+				header("Location: /index.php");
+				exit;
+			}
 		}
 	}
 	
@@ -201,6 +222,56 @@
 		$salt.="$";
 		return crypt($cleartext_password, $salt);
 	}
+	
+	public function csrf_token_get($form_name) {
+		/* CSRF PROTECTION */
+		// generate csrf protection id and key
+		$_csrf_id = uniqid($form_name . '_'); // form id
+		$_csrf_key = sha1(uniqid(microtime(true), true)); // the key
+		if(!isset($_SESSION['_csrf'])) $_SESSION['_csrf'] = array();
+		if(!isset($_SESSION['_csrf_timeout'])) $_SESSION['_csrf_timeout'] = array();
+		$_SESSION['_csrf'][$_csrf_id] = $_csrf_key;
+		$_SESSION['_csrf_timeout'][$_csrf_id] = time() + 3600; // timeout hash in 1 hour
+		
+		return array('csrf_id' => $_csrf_id,'csrf_key' => $_csrf_key);
+	}
+	
+	public function csrf_token_check() {
+		global $app;
+		
+		if(isset($_POST) && is_array($_POST)) {
+			$_csrf_valid = false;
+			if(isset($_POST['_csrf_id']) && isset($_POST['_csrf_key'])) {
+				$_csrf_id = trim($_POST['_csrf_id']);
+				$_csrf_key = trim($_POST['_csrf_key']);
+				if(isset($_SESSION['_csrf']) && isset($_SESSION['_csrf'][$_csrf_id]) && isset($_SESSION['_csrf_timeout']) && isset($_SESSION['_csrf_timeout'][$_csrf_id])) {
+					if($_SESSION['_csrf'][$_csrf_id] === $_csrf_key && $_SESSION['_csrf_timeout'] >= time()) $_csrf_valid = true;
+				}
+			}
+			if($_csrf_valid !== true) {
+				$app->log('CSRF attempt blocked. Referer: ' . (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : 'unknown'), LOGLEVEL_WARN);
+				$app->error($app->lng('err_csrf_attempt_blocked'));
+			}
+			$_SESSION['_csrf'][$_csrf_id] = null;
+			$_SESSION['_csrf_timeout'][$_csrf_id] = null;
+			unset($_SESSION['_csrf'][$_csrf_id]);
+			unset($_SESSION['_csrf_timeout'][$_csrf_id]);
+			
+			if(isset($_SESSION['_csrf_timeout']) && is_array($_SESSION['_csrf_timeout'])) {
+				$to_unset = array();
+				foreach($_SESSION['_csrf_timeout'] as $_csrf_id => $timeout) {
+					if($timeout < time()) $to_unset[] = $_csrf_id;
+				}
+				foreach($to_unset as $_csrf_id) {
+					$_SESSION['_csrf'][$_csrf_id] = null;
+					$_SESSION['_csrf_timeout'][$_csrf_id] = null;
+					unset($_SESSION['_csrf'][$_csrf_id]);
+					unset($_SESSION['_csrf_timeout'][$_csrf_id]);
+				}
+				unset($to_unset);
+			}
+		}
+	}
 
 }
 

--
Gitblit v1.9.1