[COMMENT] /* +-------------------------------------------------------------------------- | Invision Board v1.3 | ======================================== | > Mod_Installer | > Module written by Peter(Pit) | > Peter member at ibforen.de, Pit member at invisionize.com | > email: Peter@ibforen.de | | > Mod_Installer Version Number: 1.3.3 (2011-06-01) | > 2003 - 2011 by Peter | | > This is the CodeChange.php for Mod Secure Login by Peter +-------------------------------------------------------------------------- */ [COMMENT_END] [INTERFACE] 'title' => 'Secure Invisionboard', 'sub_title' => 'Sichert das Board gegen Hack- und Spamversuche ab. Fehlerhafte Logins werden protokolliert und können ausgewertet werden.', 'category' => 'Major Mod', 'compatible' => '1.3', 'version' => '1.3.3', 'author' => 'Peter', 'email' => 'Peter@ibforen.de', 'mod_token' => 'mod_secure', [INTERFACE_END] [HISTORY] [b]Version 1.3.3[/b] [list][*]Kompatibel mit Mod Security&Updates >2.7.0 [*]Geografische Lokalisierung der IP-Adresse erfolgt über den Mod Security&Updates und der domTT-Bibliothek für Tooltipps. [*]Die Angreiferlogs lassen sich nun mittels Filter und Sortierung besser durchsuchen. [*]Direkte Verlinkung der IP-Adresse zum Mod Suspicious Accounts. [/list] [color=red][b]Achtung: Neue Sprachdateien[/b][/color] [b]Version 1.3.2[/b] [list][*]Update zur Vermeidung von Botangriffen auf die Funktion [b]Verlorenes Passwort[/b] Änderungen in Register.php, Funktionen lost_password_start und lost_password_end [/list] [b]Version 1.3.1[/b] [list][*]Unkritisches Update zur besseren Erkennung der IP-Adresse eines Angreifers in ACP-Logs Link zu WHOIS [/list] [b]Version 1.3.0[/b] [list][*]Captcha-Bilder von reCAPTCHA (keys von recaptcha.net notwendig) Mod neu installieren (Änderungen in admin.php und Mod-Dateien) [/list] [b]Version 1.2.4[/b] [list][*]Kompatibel mit Mod Admin Lang Tool mod_secure_ad_func.php austauschen [/list] [b]Version 1.2.3[/b] [list][*]Neuer Service zur Bestimmung der geografischen Herkunft der Angreifer mod_secure_ip2loc.php und mod_secure_ad_func.php [/list] [b]Version 1.2.2[/b] [list][*]Registrierungsversuche von Bots belasten weniger die Datenbank Mod neu installieren (Änderungen in Register.php) [/list] [b]Version 1.2.1[/b] [list][*]Neuer animierter einfacher Captcha (Dicky Kurniawan) Sprachdateien und captcha.php austauschen. Neues Verzeichnis ../mods/secure/captcha/xrvel_captcha aus Archiv erzeugen. Dieses Verzeichnis muss zum Schreiben geöffnet sein (chmod 777) [/list] [b]Version 1.2[/b] [list][*]Neuer Name des Mods [*]Neue animierte und nicht animierte Captchas [*]Verbesserte ACP-Einstellungen Neuinstallation ist notwendig [/list] [b]Version 1.1.6[/b] [list] [*]Bugfix bei Verwendung alphanumerischer Sicherheitscodes (Änderungen in Register.php, Usercp.php und mod_secure_func.php) [/list] [b]Version 1.1.5[/b] [list] [*]Verwendung alphanumerischer Zeichen für Sicherheitscodes [*]Neuer animierter Captcha-Code (Aktivierung siehe captcha.php) (c) by László Zsidi Alle Dateien in sources/mods/secure und Mod-Sprachdateien austauschen. Danach neu installieren [/list] [b]Version 1.1.4.1[/b] [list] [*]Bugfix: Fehler, wenn Bannen eingestellt war. mod_secure_func.php und mod_secure_ad_func.php austauschen [/list] [b]Version 1.1.4[/b] [list] [*]Ansicht bzw. Auswertung der Logdaten verbessert [b]Achtung[/b] Vor einem Update muss die alte Version komplett entfernt werden, aber nicht die Datenbankeinträge (Tabelle ibf_logs). Danach muss der Mod komplett neu installeirt werden. [/list] [b]Version 1.1.3[/b] [list] [*]Captcha-Codes optimiert [b]Achtung[/b] Die Verzeichnisstruktur in sources/mods/secure hat sich geändert! [/list] [b]Version 1.1.2[/b] [list] [*]Captcha-Registrier- und Sicherheitscodes [*]Modifikation der Skin/sx/skin_login.php ist nicht mehr erforderlich [/list] [b]Version 1.1[/b] [list] [*]Bannen der IP-Adresse des möglichen Angreifers [*]Verlagern der Hack Statistik in die Board Logs [*]Bugfix der Nichtanzeige des Zufallscodes [list][*]admin.php, Schritt 1 [*]sources/Admin/admin_pages.php, Schritt 5 [*]Skin/s1/skin_login.php, Schritt 6 [*]Skin/s1/mod_secure_skin.php (Kopieren) [*]sources/mods/secure/mod_secure_func.php (Kopieren) [*]lang/xx/mod_secure_lang.php (Kopieren) [/list] [/list] [b]Version 1.01[/b] [list] [*]Kompatibel mit ipb 1.2 [*]Bugfix bei richtiger Passworteingabe nach Strafzeit Changed Files: [list][*]sources/Admin/admin_pages.php, Schritt 5 [*]sources/mods/secure/mod_secure_func.php (Kopieren) [/list] [/list] [b]Version 1.0[/b] [list] [*]Fehlerhafte Einlogversuche über index.php werden protokolliert [*]Fehlerhafte Einlogversuche über admin.php werden verschärft protokolliert [*]ACP Statistik über Angriffe mit Sortierung nach Account, Attack IP, Zeit, Versuche [/list] [HISTORY_END] [SQL] [QUERY] CREATE TABLE IF NOT EXISTS ibf_logs ( lid bigint(20) NOT NULL auto_increment, member_id int(10) default NULL, attack_ip varchar(255) default NULL, first_time int(10) default 0, trials int(4) default 0, logincode varchar(8) default '', emailed tinyint(1) default NULL, admin tinyint(1) default NULL, PRIMARY KEY (lid)) [QUERY] DELETE FROM ibf_mods WHERE mod_token='mod_secure' [SQL_END] [CODE] [MOD_TOKEN] mod_secure [FNAME] admin.php [STEP] [SEARCH] require ROOT_PATH."conf_global.php"; [INSERT] //-- mod_secure begin if (file_exists(ROOT_PATH."sources/mods/secure/mod_secure_ad_func.php")) { require ROOT_PATH."sources/mods/secure/mod_secure_ad_func.php"; } else { die("Could not call required function from file 'sources/mods/secure/mod_secure_ad_func.php'
Does it exist?"); } //-- mod_secure end [MODE] insert_below [STEP] [SEARCH] // Get a DB connection $DB->connect(); [INSERT] //-- mod_secure begin if ($IN['act'] == 'Login' AND $IN['CODE'] == 'image') $secure_login->lib->show_image(); if ($IN['act'] == 'secure' AND $IN['CODE'] == 'captcha') { require_once(ROOT_PATH."/sources/mods/secure/captcha.php"); $config['bot_antispam'] = $INFO['bot_antispam']; $config['width'] = $INFO['gd_width']; $config['height'] = $INFO['gd_height']; $config['use_alpha'] = $INFO['gd_captcha_alpha']; $config['use_alpha_case'] = $INFO['gd_captcha_alpha_case']; if ($INFO['gd_captcha_color']) $config['color'] = $INFO['gd_captcha_color']; if ($INFO['gd_captcha_bgcolor']) $config['bgcolor'] = $INFO['gd_captcha_bgcolor']; if ($INFO['gd_captcha_anicolor']) $config['anicolor'] = $INFO['gd_captcha_anicolor']; $config['font'] = $INFO['gd_captcha_font']; $config['background_image'] = $INFO['gd_captcha_background']; $config['use_random'] = $INFO['gd_captcha_random']; $config['method'] = $INFO['gd_captcha_method']; $config['random_methods'] = $INFO['gd_captcha_random_methods']; if (isset($IN['bot_antispam'])) $config['bot_antispam'] = $IN['bot_antispam']; if (isset($IN['antispam_recaptcha'])) $config['antispam_recaptcha'] = $IN['antispam_recaptcha']; if (isset($IN['gd_width'])) $config['width'] = $IN['gd_width']; if (isset($IN['gd_height'])) $config['height'] = $IN['gd_height']; if (isset($IN['random'])) $config['use_random'] = $IN['random']; if (isset($IN['method'])) $config['method'] = $IN['method']; if (isset($IN['random_methods'])) $config['random_methods'] = $IN['random_methods']; if (isset($IN['alpha'])) $config['use_alpha'] = $IN['alpha']; if (isset($IN['alpha_case'])) $config['use_alpha_case'] = $IN['alpha_case']; if (isset($IN['color'])) $config['color'] = $IN['color']; if (isset($IN['bgcolor'])) $config['bgcolor'] = $IN['bgcolor']; if (isset($IN['anicolor'])) $config['anicolor'] = $IN['anicolor']; if (isset($IN['font'])) $config['font'] = $IN['font']; if (isset($IN['background'])) $config['background_image'] = $IN['background']; $captcha = new captcha($config); exit(); } //-- mod_secure end [MODE] insert_below [STEP] [SEARCH] $pass = md5( $IN['password'] ); if ($pass != $mem['password']) [INSERT] //-- mod_secure begin if ($ibforums->vars['secure_logging']) { global $secure_login; $secure_login->do_log($mem, TRUE); } //-- mod_secure end [MODE] insert_above [STEP] [SEARCH] function do_login($message="") { [INSERT] /*-- mod_secure exclude begin [MODE] insert_above [STEP] [SEARCH] function do_login($message="") { [INSERT] -- mod_secure exclude end */ //-- mod_secure begin function do_login($message="", $random_number = FALSE, $logid = "") { global $std, $IN, $ADMIN, $INFO, $ibforums, $secure_login; $lang = $std->load_words($lang, 'mod_secure_lang', $INFO['default_language']==""?'en':$INFO['default_language']); if ($INFO['admin_ban_ip']) { $ips = explode( "|", $INFO['admin_ban_ip'] ); foreach ($ips as $ip) { $ip = preg_replace( "/\*/", '.*' , $ip ); if (preg_match( "/$ip/", $IN['IP_ADDRESS'] )) { $ADMIN->error( $lang['secure_banned_info'] ); } } } //-- mod_secure end [MODE] insert_below [STEP] [SEARCH] if ($message != "") { [INSERT] //-- mod_secure begin $temp = $lang[ $message ]; if ($temp != "" ) $message = $temp; $message = preg_replace( "/<#NAME#>/", "{$IN[username]}", $message ); //-- mod_secure end [MODE] insert_below [STEP] [SEARCH] "", ) ); [INSERT] //-- mod_secure begin if ($random_number) { $ADMIN->html .= $secure_login->login_random_number($logid,$lang['code_title'], $lang['code_info']); } $ADMIN->html .= "\n\n\n\n"; //-- mod_secure end [MODE] insert_below [STEP] [SEARCH] $IN['act'] = $IN['act'] == '' ? "idx" : $IN['act']; [INSERT] //-- mod_secure begin if ($IN['act'] == "secure") { global $secure_login; $secure_login->dispatch(); } //-- mod_secure end [MODE] insert_below [FNAME_END] [MOD_TOKEN] mod_secure [FNAME] index.php [STEP] [SEARCH] require ROOT_PATH."sources/".$choice[ $ibforums->input['act'] ].".php"; [INSERT] //-- mod_secure begin if (file_exists(ROOT_PATH."sources/mods/secure/mod_secure_func.php")) { require ROOT_PATH."sources/mods/secure/mod_secure_func.php"; global $secure_login; $secure_login = new mod_secure_lib; } else { die("Could not call required function from file 'sources/mods/secure/mod_secure_func.php'
Does it exist?"); } //-- mod_secure end [MODE] insert_above [FNAME_END] [MOD_TOKEN] mod_secure [FNAME] sources/functions.php [STEP] [SEARCH] /*-------------------------------------------------------------------------*/ // expire_subscription [INSERT] //-- mod_secure begin function md5_xor($a, $b) { for ($i = 0; $i < strlen($a); $i++) { $return .= base_convert((int) base_convert(substr($a, $i, 1), 16, 10) ^ (int) base_convert(substr($b, $i, 1), 16, 10), 10, 16); } return $return; } //-- mod_secure end [MODE] insert_above [STEP] [SEARCH] function show_gd_img($content="") { global $ibforums, $DB; [INSERT] //-- mod_secure begin global $INFO; require_once(ROOT_PATH."sources/mods/secure/captcha.php"); $config['bot_antispam'] = $INFO['bot_antispam']; $config['width'] = $INFO['gd_width']; $config['height'] = $INFO['gd_height']; $config['background_image'] = $INFO['gd_captcha_background']; $config['use_alpha'] = $INFO['gd_captcha_alpha']; $config['use_alpha_case'] = $INFO['gd_captcha_alpha_case']; $config['font'] = $INFO['gd_captcha_font']; if ($INFO['gd_captcha_color']) $config['color'] = $INFO['gd_captcha_color']; if ($INFO['gd_captcha_bgcolor']) $config['bgcolor'] = $INFO['gd_captcha_bgcolor']; if ($INFO['gd_captcha_anicolor']) $config['anicolor'] = $INFO['gd_captcha_anicolor']; $config['background_image'] = $INFO['gd_captcha_background']; $config['use_random'] = $INFO['gd_captcha_random']; $config['method'] = $INFO['gd_captcha_method']; $config['random_methods'] = $INFO['gd_captcha_random_methods']; $config['code'] = $content; $captcha = new captcha($config); exit(); //-- mod_secure end [MODE] insert_below [FNAME_END] [MOD_TOKEN] mod_secure [FNAME] sources/Login.php [STEP] [SEARCH] default: $this->log_in_form($msg); break; [INSERT] //-- mod_secure begin case 'image': global $secure_login; $secure_login->show_image(); break; //-- mod_secure end [MODE] insert_above [STEP] [SEARCH] function log_in_form($message="") { [INSERT] /*-- mod_secure exclude begin [MODE] insert_above [STEP] [SEARCH] function log_in_form($message="") { [INSERT] -- mod_secure exclude end */ //-- mod_secure begin function log_in_form($message="", $random_number = FALSE, $logid = "") { //-- mod_secure end [MODE] insert_below [STEP] [SEARCH] if ($message != "") { [INSERT] /*-- mod_secure exclude begin [MODE] insert_below [STEP] [SEARCH] $message = preg_replace( "/<#NAME#>/", "{$ibforums->input[UserName]}", $message ); $this->output .= $this->login_html->errors($message); } $this->output .= $this->login_html->ShowForm( $ibforums->lang['please_log_in'], $HTTP_REFERER ); [INSERT] -- mod_secure exclude end */ //-- mod_secure begin global $std; $lang = $std->load_words($lang, 'mod_secure_lang', $ibforums->lang_id); if (isset($lang[ $message ])) { $message = $lang[ $message ]; } elseif (isset($ibforums->lang[ $message ])) { $message = $ibforums->lang[ $message ]; } //-- mod_secure end [MODE] insert_above [STEP] [SEARCH] $message = preg_replace( "/<#NAME#>/", "{$ibforums->input[UserName]}", $message ); $this->output .= $this->login_html->errors($message); } $this->output .= $this->login_html->ShowForm( $ibforums->lang['please_log_in'], $HTTP_REFERER ); [INSERT] //-- mod_secure begin if ($random_number) { $match = "`()`is"; $secure_skin = $std->load_template("mod_secure_skin"); if ($ibforums->vars['bot_antispam'] == 'rec' ) { $this->html2 = $std->load_template('mod_secure_skin'); require_once (ROOT_PATH."sources/mods/secure/captcha/recaptcha/recaptchalib.php"); require (ROOT_PATH."sources/mods/secure/captcha/recaptcha/key.php"); if ($reCaptcha_public_key) { $recaptcha = ""; $recaptcha .= recaptcha_get_html($reCaptcha_public_key); } $this->output = preg_replace( $match, "\\1".str_replace("", $recaptcha, $secure_skin->login_random_number_recaptcha($logid,$lang['code_title'],$lang['code_info'])), $this->output ); } else if ($ibforums->vars['bot_antispam'] == 'gd' ) $this->output = preg_replace( $match, "\\1".$secure_skin->login_random_number_gd($logid,$lang['code_title'],$lang['code_info']), $this->output ); else $this->output = preg_replace( $match, "\\1".$secure_skin->login_random_number($logid,$lang['code_title'],$lang['code_info']), $this->output ); } $this->output .= "\n\n\n\n"; //-- mod_secure end [MODE] insert_below [STEP] [SEARCH] if ( $DB->get_num_rows() ) { $member = $DB->fetch_row(); [INSERT] //-- mod_secure begin if ($ibforums->vars['secure_logging']) { global $secure_login; $secure_login->do_log($member, FALSE, $this); } //-- mod_secure end [MODE] insert_below [FNAME_END] [MOD_TOKEN] mod_secure [FNAME] sources/Register.php [STEP] [SEARCH] $this->email = new emailer(); [INSERT] //-- mod_secure begin global $secure_login; if (!isset($secure_login)) { if (file_exists(ROOT_PATH."sources/mods/secure/mod_secure_func.php")) { require_once ROOT_PATH."sources/mods/secure/mod_secure_func.php"; $secure_login = new mod_secure_lib; } else { die("Could not call required function from file 'sources/mods/secure/mod_secure_func.php'
Does it exist?"); } } //-- mod_secure end [MODE] insert_below [STEP] [SEARCH] $reg_code = mt_rand(100000,999999); [INSERT] //-- mod_secure begin // we do not allow bots to validate email addresses. So we will test on 30 seconds flood time $flood_time = time() - 30; $DB->query("SELECT regid FROM ibf_reg_antispam WHERE ip_address='{$ibforums->input['IP_ADDRESS']}' AND ctime > '$flood_time'"); if ($DB->get_num_rows()) $std->Error( array( 'LEVEL' => 1, 'MSG' => 'search_flood', 'EXTRA' => 30) ); if ($ibforums->vars['gd_captcha']) { global $secure_login; $reg_code = $secure_login->get_code(); } //-- mod_secure end [MODE] insert_below [STEP] [SEARCH] if ($ibforums->vars['bot_antispam'] == 'gd') [INSERT] //-- mod_secure begin if ($ibforums->vars['bot_antispam'] == 'rec') { $this->html2 = $std->load_template('mod_secure_skin'); $ibforums->lang = $std->load_words($ibforums->lang, 'mod_secure_lang', $ibforums->lang_id ); require_once (ROOT_PATH."sources/mods/secure/captcha/recaptcha/recaptchalib.php"); require (ROOT_PATH."sources/mods/secure/captcha/recaptcha/key.php"); if ($reCaptcha_public_key) { $recaptcha = ""; $recaptcha .= recaptcha_get_html($reCaptcha_public_key); } $this->output = str_replace( "", str_replace("", $recaptcha, $this->html2->bot_antispam_recaptcha( $regid )), $this->output ); } else //-- mod_secure end [MODE] insert_above [STEP] [SEARCH] if ( trim( intval($ibforums->input['reg_code']) ) != $row['regcode'] ) { $this->lost_password_start('err_reg_code'); [INSERT] //-- mod_secure begin // this regid is used and not usable anymore $DB->query("DELETE FROM ibf_reg_antispam WHERE regid='".trim(addslashes($ibforums->input['regid']))."'"); // we do not allow bots to validate email addresses. So we will test on 30 seconds flood time $flood_time = time() - 30; $DB->query("SELECT regid FROM ibf_reg_antispam WHERE ip_address='{$ibforums->input['IP_ADDRESS']}' AND ctime > '$flood_time'"); if ($DB->get_num_rows()) $std->Error( array( 'LEVEL' => 1, 'MSG' => 'search_flood', 'EXTRA' => 30) ); if ($ibforums->vars['gd_captcha']) { global $secure_login; if ( !$secure_login->test_reg_code($ibforums->input['reg_code'], $row['regcode'])) { $this->lost_password_start('err_reg_code'); return; } } else //-- mod_secure end [MODE] insert_above [STEP] [SEARCH] function create_account() { global $ibforums, $std, $DB, $print, $HTTP_POST_VARS; [INSERT] //-- mod_secure begin if ($ibforums->vars['bot_antispam']) { if ($ibforums->input['regid'] == "") { $this->show_reg_form('err_reg_code'); return; } $DB->query("SELECT * FROM ibf_reg_antispam WHERE regid='".trim(addslashes($ibforums->input['regid']))."'"); if (!$row = $DB->fetch_row()) { $this->show_reg_form('err_reg_code'); return; } if ($ibforums->vars['gd_captcha']) { global $secure_login; if ( !$secure_login->test_reg_code($ibforums->input['reg_code'], $row['regcode'])) { $this->show_reg_form('err_reg_code'); return; } } else if (trim( intval($ibforums->input['reg_code']) ) != $row['regcode']) { $this->show_reg_form('err_reg_code'); return; } $DB->query("DELETE FROM ibf_reg_antispam WHERE regid='".trim(addslashes($ibforums->input['regid']))."'"); } //-- mod_secure end [MODE] insert_below [STEP] [SEARCH] //| Check the reg_code //+-------------------------------------------- [INSERT] //-- mod_secure begin if (false) //-- mod_secure end [MODE] insert_below [FNAME_END] [MOD_TOKEN] mod_secure [FNAME] sources/Usercp.php [STEP] [SEARCH] $reg_code = mt_rand(100000,999999); [INSERT] //-- mod_secure begin if ($ibforums->vars['gd_captcha']) { global $secure_login; if (!isset($secure_login)) { if (file_exists(ROOT_PATH."sources/mods/secure/mod_secure_func.php")) { require_once ROOT_PATH."sources/mods/secure/mod_secure_func.php"; $secure_login = new mod_secure_lib; } else { die("Could not call required function from file 'sources/mods/secure/mod_secure_func.php'
Does it exist?"); } } $reg_code = $secure_login->get_code(); } //-- mod_secure end [MODE] insert_below [STEP] [SEARCH] if ($ibforums->vars['bot_antispam'] == 'gd') [INSERT] //-- mod_secure begin if ($ibforums->vars['bot_antispam'] == 'rec') { $this->html2 = $std->load_template('mod_secure_skin'); $ibforums->lang = $std->load_words($ibforums->lang, 'mod_secure_lang', $ibforums->lang_id ); require_once (ROOT_PATH."sources/mods/secure/captcha/recaptcha/recaptchalib.php"); require (ROOT_PATH."sources/mods/secure/captcha/recaptcha/key.php"); if ($reCaptcha_public_key) { $recaptcha = ""; $recaptcha .= recaptcha_get_html($reCaptcha_public_key); } $this->output = str_replace( "", str_replace("", $recaptcha, $this->html2->email_change_recaptcha( $regid )), $this->output ); } else //-- mod_secure end [MODE] insert_above [STEP] [SEARCH] if ( trim( intval($ibforums->input['reg_code']) ) != $row['regcode'] ) [INSERT] //-- mod_secure begin if ($ibforums->vars['gd_captcha']) { global $secure_login; if (!isset($secure_login)) { if (file_exists(ROOT_PATH."sources/mods/secure/mod_secure_func.php")) { require_once ROOT_PATH."sources/mods/secure/mod_secure_func.php"; $secure_login = new mod_secure_lib; } else { die("Could not call required function from file 'sources/mods/secure/mod_secure_func.php'
Does it exist?"); } } if ( !$secure_login->test_reg_code($ibforums->input['reg_code'], $row['regcode'])) { $this->email_change('err_security_code'); return; } } else //-- mod_secure end [MODE] insert_above [FNAME_END] [MOD_TOKEN] mod_secure [FNAME] sources/Admin/ad_settings.php [STEP] [SEARCH] case 'dosecure': [INSERT] //-- mod_secure begin global $secure_login; $secure_login->save_config(); //-- mod_secure end [MODE] insert_below [STEP] [SEARCH] function secure() { global $IN, $INFO, $DB, $SKIN, $ADMIN, $std, $MEMBER, $GROUP; [INSERT] //-- mod_secure begin global $secure_login; $secure_login->ad_settings($this); //-- mod_secure end /*-- mod_secure exclude begin [MODE] insert_below [STEP] [SEARCH] $SKIN->form_input( "gd_font", isset($INFO['gd_font']) ? $INFO['gd_font'] : getcwd().'/fonts/progbot.ttf' ) ) ); [INSERT] -- mod_secure exclude end */ [MODE] insert_below [FNAME_END] [MOD_TOKEN] mod_secure [FNAME] sources/Admin/admin_functions.php [STEP] [SEARCH] //--------------------------- // Makes good raw form text [INSERT] //-- mod_secure begin function md5_xor($a, $b) { for ($i = 0; $i < strlen($a); $i++) { $return .= base_convert((int) base_convert(substr($a, $i, 1), 16, 10) ^ (int) base_convert(substr($b, $i, 1), 16, 10), 10, 16); } return $return; } //-- mod_secure end [MODE] insert_above [FNAME_END] [MOD_TOKEN] mod_secure [FNAME] sources/Admin/admin_pages.php [STEP] [SEARCH] ?> [INSERT] //-- mod_secure begin $PAGES[11][] = array( 'Hack Attack Logs' ,'act=secure&code=logs'); //-- mod_secure end [MODE] insert_above [FNAME_END] [CODE_END] [COPY] Kopiere alle Dateien im Order upload des Archivs in das Root-Verzeichnis deines Boards und behalte dabei die Struktur bei. [List] [*]sources [arrow] sources ( chmod 777 mods/secure/captcha/xrvel_captcha) [*]lang/en [arrow] lang/en [*]lang/de [arrow] lang/xx (xx = Das Verzeichnis mit den deutschen Sprachdateien) [*]Skin/s1/mod_secure_skin.php [arrow] Skin/sx (in alle Skin-Verzeichnisse kopieren) [/list] [COPY_END] [CUSTOMIZE] Der Sicherheitscode reCAPTCHA ist ein Service von recaptcha.net. Man sich dort zuerst registrieren, um einen public key und einen private key zu erhalten. Erst mit den keys ist der Dienst nutzbar. Die beiden keys bitte in sources/mods/secure/captcha/recaptcha/key.php eintragen. [CUSTOMIZE_END] [COMMENT_MOD] Feedback ist willkommen. [COMMENT_MOD_END] [HISTORY_OLD] [HISTORY_OLD_END]