Страница 1 из 2

хак запрета регистрации из одного IP

Добавлено: 28 окт 2010, 15:30
viktor6
Gorlum
Я не силен в php можеш подправить этот хак для запрета регистрации из одного IP
у меня на другой сборке вот такой стоит для локальной сети
если можно поправь под свою версию

Код: Выделить всё

<?php

/**
 * reg.php
 *
 * @version 1.1
 * @copyright 2008 by Chlorel for XNova
 */

define('INSIDE'  , true);
define('INSTALL' , false);

$ugamela_root_path = './';
include($ugamela_root_path . 'extension.inc');
include($ugamela_root_path . 'common.' . $phpEx);

includeLang('reg');

$wylosuj = rand(100000,9000000); 
$kod = md5($wylosuj);
function sendpassemail($emailaddress, $password) {
	global $lang, $kod;

	$parse['gameurl']  = GAMEURL;
	$parse['password'] = $password;
	$parse['kod']      = $kod;
	$email             = parsetemplate($lang['mail_welcome'], $parse);
	$status            = mymail($emailaddress, $lang['mail_title'], $email);
	return $status;
}

function mymail($to, $title, $body, $from = '') {
	$from = trim($from);

	if (!$from) {
		$from = ADMINEMAIL;
	}

	$rp     = ADMINEMAIL;

	$head   = '';
	$head  .= "Content-Type: text/plain \r\n";
	$head  .= "Date: " . date('r') . " \r\n";
	$head  .= "Return-Path: $rp \r\n";
	$head  .= "From: $from \r\n";
	$head  .= "Sender: $from \r\n";
	$head  .= "Reply-To: $from \r\n";
	$head  .= "Organization: $org \r\n";
	$head  .= "X-Sender: $from \r\n";
	$head  .= "X-Priority: 3 \r\n";
	$body   = str_replace("\r\n", "\n", $body);
	$body   = str_replace("\n", "\r\n", $body);

	return mail($to, $title, $body, $head);
}

if ($_POST) {
	$errors    = 0;
	$errorlist = "";

	$_POST['email'] = strip_tags($_POST['email']);
	if (!is_email($_POST['email'])) {
		$errorlist .= "\"" . $_POST['email'] . "\" " . $lang['error_mail'];
		$errors++;
	}

	session_start(); 
		$girilen = $_REQUEST["captcha"]; 
	if($_SESSION['captcha'] == $girilen){ 
		echo ""; 
	}else{ 
		$errorlist .= $lang['error_captcha']; 
		$errors++;    
	}

	if (!$_POST['planet']) {
		$errorlist .= $lang['error_planet'];
		$errors++;
	}

	if (preg_match("/[^A-z0-9_\-]/", $_POST['hplanet']) == 1) {
		$errorlist .= $lang['error_planetnum'];
		$errors++;
	}

	if (!$_POST['character']) {
		$errorlist .= $lang['error_character'];
		$errors++;
	}

	if (strlen($_POST['passwrd']) < 4) {
		$errorlist .= $lang['error_password'];
		$errors++;
	}

	if (preg_match("/[^A-z0-9_\-]/", $_POST['character']) == 1) {
		$errorlist .= $lang['error_charalpha'];
		$errors++;
	}

	if ($_POST['rgt'] != 'on') {
		$errorlist .= $lang['error_rgt'];
		$errors++;
	}

	// Le meilleur moyen de voir si un nom d'utilisateur est pris c'est d'essayer de l'appeler !!
	$ExistUser = doquery("SELECT `username` FROM {{table}} WHERE `username` = '". mysql_escape_string($_POST['character']) ."' LIMIT 1;", 'users', true);
	if ($ExistUser) {
		$errorlist .= $lang['error_userexist'];
		$errors++;
	}

	// Si l'on verifiait que l'adresse email n'existe pas encore ???
	$ExistMail = doquery("SELECT `email` FROM {{table}} WHERE `email` = '". mysql_escape_string($_POST['email']) ."' LIMIT 1;", 'users', true);
	if ($ExistMail) {
		$errorlist .= $lang['error_emailexist'];
		$errors++;
	}

	if ($_POST['sex'] != ''  &&
		$_POST['sex'] != 'F' &&
		$_POST['sex'] != 'M') {
		$errorlist .= $lang['error_sex'];
		$errors++;
	}

	if ($_POST['langer'] != ''  &&
		$_POST['langer'] != 'ru' &&
		$_POST['langer'] != 'en') {
		$errorlist .= $lang['error_lang'];
		$errors++;
	}

	if ($errors != 0) {
		message ($errorlist, $lang['Register']);
	} else {
		$newpass        = $_POST['passwrd'];
		$UserName       = CheckInputStrings ( $_POST['character'] );
		$UserEmail      = CheckInputStrings ( $_POST['email'] );
		$UserPlanet     = CheckInputStrings ( $_POST['planet'] );

		$md5newpass     = md5($newpass);
		$Killer = $game_config['aktywacjen'];
		$killers = md5($Killer);
		$aktywacja = time()+2678400;
		// Creation de l'utilisateur
		$QryInsertUser  = "INSERT INTO {{table}} SET ";
		$QryInsertUser .= "`username` = '". mysql_escape_string(strip_tags( $UserName )) ."', ";
		$QryInsertUser .= "`email` = '".    mysql_escape_string( $UserEmail )            ."', ";
		$QryInsertUser .= "`email_2` = '".  mysql_escape_string( $UserEmail )            ."', ";
		$QryInsertUser .= "`lang` = '".     mysql_escape_string( $_POST['langer'] )      ."', ";
		$QryInsertUser .= "`sex` = '".      mysql_escape_string( $_POST['sex'] )         ."', ";
		$QryInsertUser .= "`id_planet` = '0', ";
		$QryInsertUser .= "`register_time` = '". time() ."', ";
		$QryInsertUser .= "`password`='". $md5newpass ."', ";
		$QryInsertUser .= "`aktywnosc` = '1', ";
		$QryInsertUser .= "`kod_aktywujacy`='". mysql_escape_string( $kod )              ."', ";
		$QryInsertUser .= "`kiler`='".          mysql_escape_string( $killers )          ."', ";
		$QryInsertUser .= "`time_aktyw`='".     mysql_escape_string( $aktywacja )        ."';";
		doquery( $QryInsertUser, 'users');

		// On cherche le numero d'enregistrement de l'utilisateur fraichement cree
		$NewUser        = doquery("SELECT `id` FROM {{table}} WHERE `username` = '". mysql_escape_string($_POST['character']) ."' LIMIT 1;", 'users', true);
		$iduser         = $NewUser['id'];

		// Recherche d'une place libre !
		$LastSettedGalaxyPos  = $game_config['LastSettedGalaxyPos'];
		$LastSettedSystemPos  = $game_config['LastSettedSystemPos'];
		$LastSettedPlanetPos  = $game_config['LastSettedPlanetPos'];
		while (!isset($newpos_checked)) {
			for ($Galaxy = $LastSettedGalaxyPos; $Galaxy <= MAX_GALAXY_IN_WORLD; $Galaxy++) {
				for ($System = $LastSettedSystemPos; $System <= MAX_SYSTEM_IN_GALAXY; $System++) {
					for ($Posit = $LastSettedPlanetPos; $Posit <= 4; $Posit++) {
						$Planet = round (rand ( 4, 12) );

						switch ($LastSettedPlanetPos) {
							case 1:
								$LastSettedPlanetPos += 1;
								break;
							case 2:
								$LastSettedPlanetPos += 1;
								break;
							case 3:
								if ($LastSettedSystemPos == MAX_SYSTEM_IN_GALAXY) {
									$LastSettedGalaxyPos += 1;
									$LastSettedSystemPos  = 1;
									$LastSettedPlanetPos  = 1;
									break;
								} else {
									$LastSettedPlanetPos  = 1;
								}
								$LastSettedSystemPos += 1;
								break;
						}
						break;
					}
					break;
				}
				break;
			}

			$QrySelectGalaxy  =	"SELECT * ";
			$QrySelectGalaxy .= "FROM {{table}} ";
			$QrySelectGalaxy .= "WHERE ";
			$QrySelectGalaxy .= "`galaxy` = '". $Galaxy ."' AND ";
			$QrySelectGalaxy .= "`system` = '". $System ."' AND ";
			$QrySelectGalaxy .= "`planet` = '". $Planet ."' ";
			$QrySelectGalaxy .= "LIMIT 1;";
			$GalaxyRow = doquery( $QrySelectGalaxy, 'galaxy', true);

			if ($GalaxyRow["id_planet"] == "0") {
				$newpos_checked = true;
			}

			if (!$GalaxyRow) {
				CreateOnePlanetRecord ($Galaxy, $System, $Planet, $NewUser['id'], $UserPlanet, 0, 0, 0, true);
				$newpos_checked = true;
			}
			if ($newpos_checked) {
				doquery("UPDATE {{table}} SET `config_value` = '". $LastSettedGalaxyPos ."' WHERE `config_name` = 'LastSettedGalaxyPos';", 'config');
				doquery("UPDATE {{table}} SET `config_value` = '". $LastSettedSystemPos ."' WHERE `config_name` = 'LastSettedSystemPos';", 'config');
				doquery("UPDATE {{table}} SET `config_value` = '". $LastSettedPlanetPos ."' WHERE `config_name` = 'LastSettedPlanetPos';", 'config');
			}
		}
		// Recherche de la reference de la nouvelle planete (qui est unique normalement !
		$PlanetID = doquery("SELECT `id` FROM {{table}} WHERE `id_owner` = '". $NewUser['id'] ."' LIMIT 1;", 'planets', true);

		// Mise a jour de l'enregistrement utilisateur avec les infos de sa planete mere
		$QryUpdateUser  = "UPDATE {{table}} SET ";
		$QryUpdateUser .= "`id_planet` = '". $PlanetID['id'] ."', ";
		$QryUpdateUser .= "`current_planet` = '". $PlanetID['id'] ."', ";
		$QryUpdateUser .= "`galaxy` = '". $Galaxy ."', ";
		$QryUpdateUser .= "`system` = '". $System ."', ";
		$QryUpdateUser .= "`planet` = '". $Planet ."' ";
		$QryUpdateUser .= "WHERE ";
		$QryUpdateUser .= "`id` = '". $NewUser['id'] ."' ";
		$QryUpdateUser .= "LIMIT 1;";
		doquery( $QryUpdateUser, 'users');

		// Mise a jour du nombre de joueurs inscripts
		doquery("UPDATE {{table}} SET `config_value` = `config_value` + '1' WHERE `config_name` = 'users_amount' LIMIT 1;", 'config');
		doquery("UPDATE {{table}} SET `config_value` = `config_value` + '1' WHERE `config_name` = 'aktywacjen' LIMIT 1;", 'config');

		$Message  = $lang['thanksforregistry'];
		if (sendpassemail($_POST['email'], "$newpass")) {
			$Message .= " (" . htmlentities($_POST["email"]) . ")";
		} else {
			$Message .= " (" . htmlentities($_POST["email"]) . ")";
			$Message .= "<br><br>". $lang['error_mailsend'] ." <b>" . $newpass . "</b>";
		}
		message( $Message, $lang['reg_welldone']);
	}
} else {  
 if (!empty($_SERVER['HTTP_CLIENT_IP'])) 
 { 
   $sip=$_SERVER['HTTP_CLIENT_IP']; 
 } 
 elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) 
 { 
  $sip=$_SERVER['HTTP_X_FORWARDED_FOR']; 
 } 
 else 
 { 
   $sip=$_SERVER['REMOTE_ADDR']; 
 }
$rip=mysql_result(doquery("SELECT username FROM {{table}} WHERE user_lastip='".$sip."'","users"),0,'username');
if(!$rip){ 

 //var_dump($sip);
//die;
 // Afficher le formulaire d'enregistrement  
    $parse               = $lang;  
    $parse['servername'] = $game_config['game_name'];  
    $parse['forum_url'] = $game_config['forum_url'];  
        if ($game_config['OverviewClickBanner'] != '') {  
                $parse['ClickBanner'] = stripslashes( $game_config['OverviewClickBanner'] );  
            }  
    display(parsetemplate(gettemplate('registry_form'), $parse), $lang['registry'], false);  
} 
else {
message('<br>С вашего компьютера c IP '.$sip.' уже зарегистрирован игрок '.$rip.' <br>Возможно это ошибка, сообщите об этом администрации игры!','Ошибка','login.php','3');
} 
    
}  
// -----------------------------------------------------------------------------------------------------------  
// History version  
// 1.0 - Version originelle  
// 1.1 - Menage + rangement + utilisation fonction de creation planete nouvelle generation  
?> 

Re: хак запрета регистрации из одного IP

Добавлено: 28 окт 2010, 15:35
Gorlum
В игру уже встроена защита от взаимодействия аккаунтов с одного IP

Re: хак запрета регистрации из одного IP

Добавлено: 12 авг 2011, 10:19
Edenor
Не могу найти как отключить проверку IP что бы в клубе играть могли (атаки шпионаж и т.д.)?

Re: хак запрета регистрации из одного IP

Добавлено: 12 авг 2011, 14:40
Gorlum
Сейчас такой настройки нет.

Re: хак запрета регистрации из одного IP

Добавлено: 13 авг 2011, 06:53
Edenor
Тогда встречный вопрос а в коде где это можно убрать-отменить?

Re: хак запрета регистрации из одного IP

Добавлено: 13 авг 2011, 10:25
Gorlum
Можно. Отменяй.

Re: хак запрета регистрации из одного IP

Добавлено: 13 авг 2011, 13:36
Edenor
Gorlum писал(а):Можно. Отменяй.
Чуть-чуть по конкретнее!

Re: хак запрета регистрации из одного IP

Добавлено: 13 сен 2011, 01:43
Edenor
Ну и всетаки подскажите как отключить защиту от мультиводства!?

Re: хак запрета регистрации из одного IP

Добавлено: 14 сен 2011, 08:23
Edenor
Спасибо за "помощь" - решил сам!

Re: хак запрета регистрации из одного IP

Добавлено: 14 сен 2011, 11:00
No.say
Edenor писал(а):Спасибо за "помощь" - решил сам!
молодец! :lol: