BS Loginkontrolle mit Captcha Mod ab PHPF Version 6.01.12
(c) 2008 by Silvermoon (http://www.bs-fusion.de)
---------------------------------------------------------

[DEUTSCHE ANLEITUNG]

Beschreibung dieses Mods:
-------------------------
Dieser Mod beinhaltet 2 Sicherheitsaspekte.

1. Sicherheitsaspekt
--------------------
Um sich einloggen zu knnen, mu ein berprfungscode eingegeben werden. Stimmt dieser nicht, findet keine weitere
Formularauswertung statt.

2. Sicherheitsaspekt
--------------------
In das Cookie "fusion_user" wird ein zustzlicher Eintrag beigefgt, welcher bei der berprfung des Cookies 
entscheidend ist. Es wird der IP-Pool der eigenen IP-Adresse (Bsp: 123.123.), mit einem entwickeltem Cryptverfahren, 
verschlsselt. Wenn jetzt geprft wird, ob das Cookie vorhanden ist, wird auch der verschlsselte Eintrag
mit dem vorhandenen IP-Pool berprft. stimmt dieser nicht, werden die Mitglieder-Cookies gelscht.
Somit ist eine Manipulation des Cookies nahezu ausgeschlossen. Ausserdem werden aus dem Cookie alle Sonderzeichen entfernt.

---------------------------------------------------------------------------------------------------------------

Vor der Installation dieses Mods sind Datensicherungen von der maincore.php, login.php, maintenance.php und der 
user_info_panel.php zu machen.

Fr alle, welche die Standarddateien des PHP-Fusion nutzen ist die Installation schnell erledigt. 

1. ffnen der maincore.php folgenden Eintrag suchen:
$crypt_prefix=md5("Hier einen Sicherheitsstring eingeben"); 

- Den String "Hier einen Sicherheitsstring eingeben" unbedingt in einen eigenen String ndern.
- maincore.php abspeichern

2. Alle Dateien aus dem Paket mit den alten ersetzen.

3. Neues Einloggen nach der Installation erforderlich

4. Fertig 


Fr manuelle nderungen der Dateien ist diese Readme genau durchzulesen und einzuhalten.
========================================================================================

1. maincore.php ffnen


2. Suchen nach: 
---------------

// PHP-Fusion user cookie functions
if (!isset($_COOKIE['fusion_visited'])) {
	$result=dbquery("UPDATE ".$db_prefix."settings SET counter=counter+1");
	setcookie("fusion_visited", "yes", time() + 31536000, "/", "", "0");
}



3. Neue Funktionen einfgen und die neue Loginkontrolle mit der alten ersetzen:
-------------------------------------------------------------------------------

/** start BS login control mod with Captcha  (powered by BS-Fusion) **/
function bs_ipcrypt() {
global $sub_ip2;
$i=1;
$crypt_prefix=md5("Hier_einen_Sicherheitsstring_eingeben");
return md5(sha1(md5(sha1($crypt_prefix.$sub_ip2."."))));
}

function bs_safecookie($cookie_value="") {
$found = array("&","/","!","$","%","\"","'","(",")","{","}","[","]","$","*",'"','\'',"<",">","\\","^","\$");	
$value=str_replace($found,"",$cookie_value);
return $value;
}

if (isset($_POST['login'])) {
	if (check_captcha($_POST['captcha_encode'], $_POST['user_capatcha'])) {
	$user_pass = md5($_POST['user_pass']);
	$user_name = preg_replace(array("/\=/","/\#/","/\sOR\s/"), "", stripinput($_POST['user_name']));
	$result = dbquery("SELECT * FROM ".$db_prefix."users WHERE user_name='$user_name' AND (user_password='".md5($user_pass)."' OR user_password='$user_pass')");
	if (dbrows($result) != 0) {
		$data = dbarray($result);
		if ($data['user_password'] == $user_pass) {
			$result = dbquery("UPDATE ".$db_prefix."users SET user_password='".md5($user_pass)."' WHERE user_id='".$data['user_id']."'");
		}
		$cookie_value = $data['user_id'].".".$user_pass.".".bs_ipcrypt();
		if ($data['user_status'] == 0) {	
			$cookie_exp = isset($_POST['remember_me']) ? time() + 3600*24*30 : time() + 3600*3;
			header("P3P: CP='NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM'");
			setcookie("fusion_user", $cookie_value, $cookie_exp, "/", "", "0");
			redirect(BASEDIR."setuser.php?user=".$data['user_name'], "script");
		} elseif ($data['user_status'] == 1) {
			redirect(BASEDIR."setuser.php?error=1", "script");
		} elseif ($data['user_status'] == 2) {
			redirect(BASEDIR."setuser.php?error=2", "script");
		}
	} else {
		redirect(BASEDIR."setuser.php?error=3");
	}
	}
}

if (isset($_COOKIE['fusion_user'])) {
	$cookie_vars = explode(".", bs_safecookie($_COOKIE['fusion_user']));
	$cookie_1 = isNum($cookie_vars['0']) ? $cookie_vars['0'] : "0";
	$cookie_2 = (preg_match("/^[0-9a-z]{32}$/", $cookie_vars['1']) ? $cookie_vars['1'] : "");
	$cookie_3 = (preg_match("/^[0-9a-z]{32}$/", $cookie_vars['2']) ? $cookie_vars['2'] : "");
	if ($cookie_3 == bs_ipcrypt()) {
	$result = dbquery("SELECT * FROM ".$db_prefix."users WHERE user_id='$cookie_1' AND user_password='".md5($cookie_2)."'");
	unset($cookie_vars,$cookie_1,$cookie_2);
	if (dbrows($result) != 0) {
		$userdata = dbarray($result);
		if ($userdata['user_status'] == 0) {
			if ($userdata['user_theme'] != "Default" && file_exists(THEMES.$userdata['user_theme']."/theme.php")) {
				define("THEME", THEMES.$userdata['user_theme']."/");
			} else {
				define("THEME", THEMES.$settings['theme']."/");
			}
			if ($userdata['user_offset'] <> 0) {
				$settings['timeoffset'] = $settings['timeoffset'] + $userdata['user_offset'];
			}
			if (empty($_COOKIE['fusion_lastvisit'])) {
				setcookie("fusion_lastvisit", $userdata['user_lastvisit'], time() + 3600, "/", "", "0");
				$lastvisited = $userdata['user_lastvisit'];
			} else {
				$lastvisited = $_COOKIE['fusion_lastvisit'];
			}
		} else {
			header("P3P: CP='NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM'");
			setcookie("fusion_user", "", time() - 7200, "/", "", "0");
			setcookie("fusion_lastvisit", "", time() - 7200, "/", "", "0");
			redirect(BASEDIR."index.php", "script");
		}
	} else {
		header("P3P: CP='NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM'");
		setcookie("fusion_user", "", time() - 7200, "/", "", "0");
		setcookie("fusion_lastvisit", "", time() - 7200, "/", "", "0");
		redirect(BASEDIR."index.php", "script");
	}
	} else {
		header("P3P: CP='NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM'");
		setcookie("fusion_user", "", time() - 7200, "/", "", "0");
		setcookie("fusion_lastvisit", "", time() - 7200, "/", "", "0");
		redirect(BASEDIR."index.php", "script");	
	}
} else {
	define("THEME", THEMES.$settings['theme']."/");
	$userdata = "";	$userdata['user_level'] = 0; $userdata['user_rights'] = ""; $userdata['user_groups'] = "";
}
/** End of BS Login control mod with captcha **/ 


5. maincore.php abspeichern


6. login.php ffnen und den alten Quellcode zwischen "else { }" durch den neuen ersetzen

7. maintenance.php ffnen und den alten Quellcode zwischen "if (!iMEMBERS) {}" durch den neuen ersetzen

8. user_info_panel.php ffnen und  den alten Quellcode zwischen "else {}" durch den neuen ersetzen

[NEUER QUELLCODE FR "login.php" und "maintenance.php"]
===================================================

/** start BS login control mod with Captcha  (powered by BS-Fusion) **/	
echo "<div align='center'><br>
<form name='loginform' method='post' action='".FUSION_SELF."'>
<table border='0' cellspacing='0' cellpadding='3'>
<tr>
<td valign='top'>".$locale['061']."<br><input type='text' name='user_name' class='textbox' style='width:100px'></td>
<td valign='top'>".$locale['062']."<br><input type='password' name='user_pass' class='textbox' style='width:100px;'></td>

</tr>
<tr><td>".make_captcha()."</td>
<td> ==&gt; <input type='password' name='user_capatcha' class='textbox' style='width:100px'></td>
</tr>
<tr>
<td valign='bottom' align='right'><input type='checkbox' name='remember_me' value='y' title='".$locale['063']."'></td>
<td><input type='submit' name='login' value='".$locale['064']."' class='button'></td>
</tr></table>
</form>
</div>\n";
/** End of BS Login control mod with captcha **/  


[NEUER QUELLCODE FR "user_info_panel.php"]
===============================================
	
/** start BS login control mod with Captcha  (powered by BS-Fusion) **/	
	echo "<div align='center'>".(isset($loginerror) ? $loginerror : "")."<form name='loginform' method='post' action='".FUSION_SELF."'>".$locale['061']."<br>";
	echo "<input type='text' name='user_name' class='textbox' style='width:100px'><br>".$locale['062']."<br>";
	echo "<input type='password' name='user_pass' class='textbox' style='width:100px' id='textfield'><br>";
	echo "<input type='checkbox' name='remember_me' value='y' title='".$locale['063']."' style='vertical-align:middle;'>".$locale['063']."<br>\n";
echo make_captcha()."<br><input type='password' name='user_capatcha' class='textbox' style='width:100px'><br>
<input type='submit' name='login' value='".$locale['064']."' class='button'><br></form><br>\n";
/** End of BS Login control mod with captcha **/ 

	if ($settings['enable_registration']) {
		echo "".$locale['065']."<br><br>\n";
	}
	echo $locale['066']."
</div>\n";


9. Alle genderten Dateien abspeichern und mit den alten ersetzen.

10. Wenn alles richtig gendert wurde, dann sollte es mit einer neuen Anmeldung beginnen.
