Add input validation to Register page
							parent
							
								
									c49a52e116
								
							
						
					
					
						commit
						e5dd07305a
					
				|  | @ -1,159 +1,132 @@ | |||
| <?php | ||||
| 	if(!isset($_REQUEST['code'])) | ||||
| 		die("MISSING INVITE CODE!"); | ||||
| 
 | ||||
| 	$statementInviteCode = $RUNTIME['PDO']->prepare("SELECT * FROM InviteCodes WHERE InviteCode = ? LIMIT 1"); | ||||
| 	$statementInviteCode->execute([@$_REQUEST['code']]);  | ||||
| 
 | ||||
| 	if($statementInviteCode->rowCount() != 0) | ||||
| 	function displayPage(string $message) | ||||
| 	{ | ||||
| 		$RUNTIME['REGISTER']['Name']	=	null; | ||||
| 		$RUNTIME['REGISTER']['PASS']	=	null; | ||||
| 		$RUNTIME['REGISTER']['EMAIL']	=	null; | ||||
| 		$RUNTIME['REGISTER']['AVATAR']	=	null; | ||||
| 		$RUNTIME['REGISTER']['TOS']		=	false; | ||||
| 	 | ||||
| 		if(isset($_REQUEST['tos']) || @$_REQUEST['tos'] != "") | ||||
| 		{ | ||||
| 			$RUNTIME['REGISTER']['TOS'] = true; | ||||
| 		} | ||||
| 
 | ||||
| 	    if(isset($_REQUEST['username']) || @$_REQUEST['username'] != "") | ||||
| 		{ | ||||
| 			$name = trim($_REQUEST['username']); | ||||
| 
 | ||||
| 			if($name != "") | ||||
| 			{ | ||||
| 				$nameParts = explode(" ", $name); | ||||
| 
 | ||||
| 				if(count($nameParts) == 1) | ||||
| 				{ | ||||
| 					$name .= " Resident"; | ||||
| 					$nameParts = explode(" ", $name); | ||||
| 				} | ||||
| 					 | ||||
| 				if(count($nameParts) <= 2) | ||||
| 				{ | ||||
| 					$statementAvatarName = $RUNTIME['PDO']->prepare("SELECT * FROM UserAccounts WHERE FirstName = :FirstName AND LastName = :LastName LIMIT 1"); | ||||
| 					$statementAvatarName->execute(['FirstName' => $nameParts[0], 'LastName' => $nameParts[1]]);  | ||||
| 
 | ||||
| 					if($statementAvatarName->rowCount() == 0) | ||||
| 					{ | ||||
| 						$RUNTIME['REGISTER']['Name']	=	$name; | ||||
| 					} | ||||
| 				}		 | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		if(isset($_REQUEST['password']) || @$_REQUEST['password'] != "") | ||||
| 		{ | ||||
| 			$pass = trim($_REQUEST['password']); | ||||
| 
 | ||||
| 			if($pass != "") | ||||
| 			{ | ||||
| 				$RUNTIME['REGISTER']['PASS']	=	$pass;	 | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		if(isset($_REQUEST['email']) || @$_REQUEST['email'] != "") | ||||
| 		{ | ||||
| 			$email = trim($_REQUEST['email']); | ||||
| 
 | ||||
| 			if($email != "") | ||||
| 			{ | ||||
| 				$RUNTIME['REGISTER']['EMAIL']	=	$email;	 | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		if(isset($_REQUEST['avatar']) || @$_REQUEST['avatar'] != "") | ||||
| 		{ | ||||
| 			$avatar = trim($_REQUEST['avatar']); | ||||
| 
 | ||||
| 			if($avatar != "") | ||||
| 			{ | ||||
| 				if(isset($RUNTIME['DEFAULTAVATAR'][$avatar]['UUID'])) | ||||
| 				{ | ||||
| 					$RUNTIME['REGISTER']['AVATAR']	=	$avatar; | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		$HTML = new HTML(); | ||||
| 		$HTML->setHTMLTitle("Registrieren"); | ||||
| 		$HTML->importHTML("style/login/register.html"); | ||||
| 
 | ||||
| 		if(isset($_REQUEST['doRegister']) || @$_REQUEST['doRegister'] != "") | ||||
| 		{ | ||||
| 			if($RUNTIME['REGISTER']['TOS'] == true) | ||||
| 			{ | ||||
| 				if($RUNTIME['REGISTER']['AVATAR'] != null && $RUNTIME['REGISTER']['EMAIL'] != null && $RUNTIME['REGISTER']['PASS'] != null && $RUNTIME['REGISTER']['Name'] != null && $RUNTIME['REGISTER']['TOS'] == true) | ||||
| 				{ | ||||
| 					$avatarUUID = $RUNTIME['OPENSIM']->gen_uuid(); | ||||
| 					$passwordSalt = md5($avatarUUID.time()); | ||||
| 					$passwordHash = md5(md5($RUNTIME['REGISTER']['PASS']).":".$passwordSalt); | ||||
| 					$avatarNameParts = explode(" ", $RUNTIME['REGISTER']['Name']); | ||||
| 	 | ||||
| 					$statementAuth = $RUNTIME['PDO']->prepare('INSERT INTO `auth` (`UUID`, `passwordHash`, `passwordSalt`, `webLoginKey`, `accountType`) VALUES (:UUID, :HASHVALUE, :SALTVALUE, :WEBKEY, :ACCTYPE)');  | ||||
| 					$statementAuth->execute(['UUID' => $avatarUUID, 'HASHVALUE' => $passwordHash, 'SALTVALUE' => $passwordSalt, 'WEBKEY' => "00000000-0000-0000-0000-000000000000", 'ACCTYPE' => "UserAccount"]); | ||||
| 	 | ||||
| 					$statementAccounts = $RUNTIME['PDO']->prepare('INSERT INTO `UserAccounts` (`PrincipalID`, `ScopeID`, `FirstName`, `LastName`, `Email`, `ServiceURLs`, `Created`, `UserLevel`, `UserFlags`, `UserTitle`, `active`) VALUES (:PrincipalID, :ScopeID, :FirstName, :LastName, :Email, :ServiceURLs, :Created, :UserLevel, :UserFlags, :UserTitle, :active )');  | ||||
| 					$statementAccounts->execute(['PrincipalID' => $avatarUUID, 'ScopeID' => "00000000-0000-0000-0000-000000000000", 'FirstName' => $avatarNameParts[0], 'LastName' => $avatarNameParts[1], 'Email' => $RUNTIME['REGISTER']['EMAIL'], 'ServiceURLs' => "HomeURI= GatekeeperURI= InventoryServerURI= AssetServerURI= ", 'Created' => time(), 'UserLevel' => 0, 'UserFlags' => 0, 'UserTitle' => "", 'active' => 1]); | ||||
| 	 | ||||
| 					$statementProfile = $RUNTIME['PDO']->prepare('INSERT INTO `userprofile` (`useruuid`, `profilePartner`, `profileImage`, `profileFirstImage`) VALUES (:useruuid, :profilePartner, :profileImage, :profileFirstImage)');  | ||||
| 					$statementProfile->execute(['useruuid' => $avatarUUID, 'profilePartner' => "00000000-0000-0000-0000-000000000000", 'profileImage' => "00000000-0000-0000-0000-000000000000", 'profileFirstImage' => "00000000-0000-0000-0000-000000000000"]); | ||||
| 	 | ||||
| 					$Inventory 				= array('Calling Cards' => 2, 'Objects' => 6, 'Landmarks' => 3, 'Clothing' => 5, 'Gestures' => 21, 'Body Parts' => 13, 'Textures' =>  0, 'Scripts' => 10, 'Photo Album' => 15, 'Lost And Found' => 16, 'Trash' => 14, 'Notecards' =>  7, 'My Inventory' =>  8, 'Sounds' =>  1, 'Animations' => 20); | ||||
| 					$InventoryRootFolder 	= $RUNTIME['OPENSIM']->gen_uuid(); | ||||
| 	 | ||||
| 					foreach ($Inventory as $FolderName => $InventoryType) | ||||
| 					{ | ||||
| 						$FolderUUID = $RUNTIME['OPENSIM']->gen_uuid(); | ||||
| 	 | ||||
| 						if ($InventoryType == 8) | ||||
| 						{ | ||||
| 							$FolderUUID = $InventoryRootFolder; | ||||
| 							$FolderParent = "00000000-0000-0000-0000-000000000000"; | ||||
| 						}else{ | ||||
| 							$FolderParent = $InventoryRootFolder; | ||||
| 						} | ||||
| 	 | ||||
| 						$statementInventoryFolder = $RUNTIME['PDO']->prepare('INSERT INTO `inventoryfolders` (`folderName`, `type`, `version`, `folderID`, `agentID`, `parentFolderID`) VALUES (:folderName, :folderTyp, :folderVersion, :folderID, :agentID, :parentFolderID)');  | ||||
| 						$statementInventoryFolder->execute(['agentID' => $avatarUUID, 'folderName' => $FolderName, 'folderTyp' => $InventoryType, 'folderVersion' => 1, 'folderID' => $FolderUUID, 'parentFolderID' => $FolderParent]); | ||||
| 					} | ||||
| 	 | ||||
| 					$statementInviteDeleter = $RUNTIME['PDO']->prepare('DELETE FROM InviteCodes WHERE InviteCode = :code');  | ||||
| 					$statementInviteDeleter->execute(['code' => $_REQUEST['code']]); | ||||
| 	 | ||||
| 					$_SESSION['USERNAME'] = trim($RUNTIME['REGISTER']['Name']); | ||||
| 					$_SESSION['FIRSTNAME'] = trim($avatarNameParts[0]); | ||||
| 					$_SESSION['LASTNAME'] = trim($avatarNameParts[1]); | ||||
| 					$_SESSION['EMAIL'] = trim($RUNTIME['REGISTER']['EMAIL']); | ||||
| 					$_SESSION['PASSWORD'] = $passwordHash; | ||||
| 					$_SESSION['SALT'] = $passwordSalt; | ||||
| 					$_SESSION['UUID'] = $avatarUUID; | ||||
| 					$_SESSION['LEVEL'] = 0; | ||||
| 					$_SESSION['DISPLAYNAME'] = strtoupper(trim($RUNTIME['REGISTER']['Name'])); | ||||
| 					$_SESSION['LOGIN'] = 'true'; | ||||
| 					include "./pages/dashboard.php"; | ||||
| 					die(); | ||||
| 				}else{ | ||||
| 					$HTML->ReplaceLayoutInhalt("%%MESSAGE%%", "Ups da stimmt was nicht. Versuche es bitte noch mal.");  | ||||
| 				} | ||||
| 			}else{ | ||||
| 				$HTML->ReplaceLayoutInhalt("%%MESSAGE%%", "Du musst die Nutzungsbedingungen lesen und Akzeptieren.");  | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 
 | ||||
| 		$HTML->ReplaceLayoutInhalt("%%MESSAGE%%", "");  | ||||
| 		$HTML->ReplaceLayoutInhalt("%%MESSAGE%%", $message); | ||||
| 		$HTML->ReplaceLayoutInhalt("%%tosURL%%", $RUNTIME['TOOLS']['TOS'] );  | ||||
| 		$HTML->ReplaceLayoutInhalt("%%INVCODE%%", $_REQUEST['code']);  | ||||
| 	 | ||||
| 		$HTML->build(); | ||||
| 		echo $HTML->ausgabe(); | ||||
| 		die(); | ||||
| 	} | ||||
| 
 | ||||
| 	}else{ | ||||
| 	if(!isset($_REQUEST['code'])) | ||||
| 		die("MISSING INVITE CODE!"); | ||||
| 
 | ||||
| 	if(strlen($_REQUEST['code']) != 32 || !preg_match('[a-f0-9]+', $_REQUEST['code'])) { | ||||
| 		die("INVALID INVITE CODE!"); | ||||
| 	} | ||||
| 
 | ||||
| 	if(!isset($_REQUEST['doRegister'])) | ||||
| 	{ | ||||
| 		displayPage(""); | ||||
| 	} | ||||
| 
 | ||||
| 	include_once('classen/FormValidator.php'); | ||||
| 
 | ||||
| 	$validator = new FormValidator(array( | ||||
| 		'tos' => array('required' => true, 'equals' => true), | ||||
| 		'username' => array('required' => true, 'regex' => '[^\\\/<>\s]{1,64}( [^\\\/<>\s]{1,64})?'), | ||||
| 		'password' => array('required' => true, 'regex' => '.{1,1000}'), | ||||
| 		'email' => array('required' => true, 'regex' => '\S{1,64}@\S{1,250}.\S{2,64}'), | ||||
| 		'avatar' => array('required' => true) | ||||
| 	)); | ||||
| 
 | ||||
| 	if(!$validator->isValid()) { | ||||
| 		if(!isset($_REQUEST['tos']) || $_REQUEST['tos'] !== true) { | ||||
| 			displayPage("Du musst die Nutzungsbedingungen lesen und Akzeptieren."); | ||||
| 		} | ||||
| 		else { | ||||
| 			displayPage("Ups da stimmt was nicht. Versuche es bitte noch mal."); | ||||
| 		} | ||||
| 
 | ||||
| 		die(); | ||||
| 	} | ||||
| 
 | ||||
| 	$statementInviteCode = $RUNTIME['PDO']->prepare("SELECT * FROM InviteCodes WHERE InviteCode = ? LIMIT 1"); | ||||
| 	$statementInviteCode->execute([$_REQUEST['code']]); | ||||
| 
 | ||||
| 	if($statementInviteCode->rowCount() == 0) { | ||||
| 		die("INVALID INVITE CODE!"); | ||||
| 	} | ||||
| 
 | ||||
| 	$RUNTIME['REGISTER']['Name']	=	null; | ||||
| 	$RUNTIME['REGISTER']['PASS']	=	null; | ||||
| 	$RUNTIME['REGISTER']['EMAIL']	=	null; | ||||
| 	$RUNTIME['REGISTER']['AVATAR']	=	null; | ||||
| 	$RUNTIME['REGISTER']['TOS']		=	true; | ||||
| 	$name = trim($_REQUEST['username']); | ||||
| 	if($name != "") | ||||
| 	{ | ||||
| 		$nameParts = explode(" ", $name); | ||||
| 		if(count($nameParts) == 1) | ||||
| 		{ | ||||
| 			$name .= " Resident"; | ||||
| 			$nameParts = explode(" ", $name); | ||||
| 		} | ||||
| 			 | ||||
| 		$statementAvatarName = $RUNTIME['PDO']->prepare("SELECT * FROM UserAccounts WHERE FirstName = :FirstName AND LastName = :LastName LIMIT 1"); | ||||
| 		$statementAvatarName->execute(['FirstName' => $nameParts[0], 'LastName' => $nameParts[1]]);  | ||||
| 		if($statementAvatarName->rowCount() == 0) | ||||
| 		{ | ||||
| 			$RUNTIME['REGISTER']['Name']	=	$name; | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			displayPage("Der gewählte Name ist bereits vergeben."); | ||||
| 		} | ||||
| 	} | ||||
| 	$RUNTIME['REGISTER']['PASS'] = trim($_REQUEST['password']); | ||||
| 	$RUNTIME['REGISTER']['EMAIL']	=	trim($_REQUEST['email']);	 | ||||
| 	if(isset($RUNTIME['DEFAULTAVATAR'][$avatar]['UUID'])) | ||||
| 	{ | ||||
| 		$RUNTIME['REGISTER']['AVATAR']	=	trim($_REQUEST['avatar']); | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		displayPage("Der gewählte Standardavatar existiert nicht."); | ||||
| 	} | ||||
| 	$avatarUUID = $RUNTIME['OPENSIM']->gen_uuid(); | ||||
| 	$passwordSalt = md5($avatarUUID.time()); | ||||
| 	$passwordHash = md5(md5($RUNTIME['REGISTER']['PASS']).":".$passwordSalt); | ||||
| 	$avatarNameParts = explode(" ", $RUNTIME['REGISTER']['Name']); | ||||
| 	$statementAuth = $RUNTIME['PDO']->prepare('INSERT INTO `auth` (`UUID`, `passwordHash`, `passwordSalt`, `webLoginKey`, `accountType`) VALUES (:UUID, :HASHVALUE, :SALTVALUE, :WEBKEY, :ACCTYPE)');  | ||||
| 	$statementAuth->execute(['UUID' => $avatarUUID, 'HASHVALUE' => $passwordHash, 'SALTVALUE' => $passwordSalt, 'WEBKEY' => "00000000-0000-0000-0000-000000000000", 'ACCTYPE' => "UserAccount"]); | ||||
| 	$statementAccounts = $RUNTIME['PDO']->prepare('INSERT INTO `UserAccounts` (`PrincipalID`, `ScopeID`, `FirstName`, `LastName`, `Email`, `ServiceURLs`, `Created`, `UserLevel`, `UserFlags`, `UserTitle`, `active`) VALUES (:PrincipalID, :ScopeID, :FirstName, :LastName, :Email, :ServiceURLs, :Created, :UserLevel, :UserFlags, :UserTitle, :active )');  | ||||
| 	$statementAccounts->execute(['PrincipalID' => $avatarUUID, 'ScopeID' => "00000000-0000-0000-0000-000000000000", 'FirstName' => $avatarNameParts[0], 'LastName' => $avatarNameParts[1], 'Email' => $RUNTIME['REGISTER']['EMAIL'], 'ServiceURLs' => "HomeURI= GatekeeperURI= InventoryServerURI= AssetServerURI= ", 'Created' => time(), 'UserLevel' => 0, 'UserFlags' => 0, 'UserTitle' => "", 'active' => 1]); | ||||
| 	$statementProfile = $RUNTIME['PDO']->prepare('INSERT INTO `userprofile` (`useruuid`, `profilePartner`, `profileImage`, `profileFirstImage`) VALUES (:useruuid, :profilePartner, :profileImage, :profileFirstImage)');  | ||||
| 	$statementProfile->execute(['useruuid' => $avatarUUID, 'profilePartner' => "00000000-0000-0000-0000-000000000000", 'profileImage' => "00000000-0000-0000-0000-000000000000", 'profileFirstImage' => "00000000-0000-0000-0000-000000000000"]); | ||||
| 	$Inventory 				= array('Calling Cards' => 2, 'Objects' => 6, 'Landmarks' => 3, 'Clothing' => 5, 'Gestures' => 21, 'Body Parts' => 13, 'Textures' =>  0, 'Scripts' => 10, 'Photo Album' => 15, 'Lost And Found' => 16, 'Trash' => 14, 'Notecards' =>  7, 'My Inventory' =>  8, 'Sounds' =>  1, 'Animations' => 20); | ||||
| 	$InventoryRootFolder 	= $RUNTIME['OPENSIM']->gen_uuid(); | ||||
| 	foreach ($Inventory as $FolderName => $InventoryType) | ||||
| 	{ | ||||
| 		$FolderUUID = $RUNTIME['OPENSIM']->gen_uuid(); | ||||
| 		if ($InventoryType == 8) | ||||
| 		{ | ||||
| 			$FolderUUID = $InventoryRootFolder; | ||||
| 			$FolderParent = "00000000-0000-0000-0000-000000000000"; | ||||
| 		}else{ | ||||
| 			$FolderParent = $InventoryRootFolder; | ||||
| 		} | ||||
| 		$statementInventoryFolder = $RUNTIME['PDO']->prepare('INSERT INTO `inventoryfolders` (`folderName`, `type`, `version`, `folderID`, `agentID`, `parentFolderID`) VALUES (:folderName, :folderTyp, :folderVersion, :folderID, :agentID, :parentFolderID)');  | ||||
| 		$statementInventoryFolder->execute(['agentID' => $avatarUUID, 'folderName' => $FolderName, 'folderTyp' => $InventoryType, 'folderVersion' => 1, 'folderID' => $FolderUUID, 'parentFolderID' => $FolderParent]); | ||||
| 	} | ||||
| 	$statementInviteDeleter = $RUNTIME['PDO']->prepare('DELETE FROM InviteCodes WHERE InviteCode = :code');  | ||||
| 	$statementInviteDeleter->execute(['code' => $_REQUEST['code']]); | ||||
| 	$_SESSION['USERNAME'] = trim($RUNTIME['REGISTER']['Name']); | ||||
| 	$_SESSION['FIRSTNAME'] = trim($avatarNameParts[0]); | ||||
| 	$_SESSION['LASTNAME'] = trim($avatarNameParts[1]); | ||||
| 	$_SESSION['EMAIL'] = trim($RUNTIME['REGISTER']['EMAIL']); | ||||
| 	$_SESSION['PASSWORD'] = $passwordHash; | ||||
| 	$_SESSION['SALT'] = $passwordSalt; | ||||
| 	$_SESSION['UUID'] = $avatarUUID; | ||||
| 	$_SESSION['LEVEL'] = 0; | ||||
| 	$_SESSION['DISPLAYNAME'] = strtoupper(trim($RUNTIME['REGISTER']['Name'])); | ||||
| 	$_SESSION['LOGIN'] = 'true'; | ||||
| 	include "./pages/dashboard.php"; | ||||
| 	die(); | ||||
| ?>
 | ||||
		Loading…
	
		Reference in New Issue
	
	 Anonymous Contributor
						Anonymous Contributor