хак запрета регистрации из одного IP
Добавлено: 28 окт 2010, 15:30
Gorlum
Я не силен в php можеш подправить этот хак для запрета регистрации из одного IP
у меня на другой сборке вот такой стоит для локальной сети
если можно поправь под свою версию
Я не силен в 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
?>