Багрепорт - Регистрация 2+ акков по одному инвайту

Столкнулся с багом (а для некоторых и уязвимостью).
Вообщем, при регистрации аккаунтов в поле для приглашения вбиваем инвайт и у нас открывается форма. не регистрируемся.

в другом браузере делаем тоже самое. заполняем формы — сначала в одном потом в другом, получаем 2 аккаунта по одному инвайту.

Как решить?

14 комментариев

avatar
При регистрации произвести повторную проверку инвайта, или перенести.
avatar
На словах это хорошо звучит, а что на деле?
avatar
Этот комментарий я пишу для вывода в «Прямой эфир», чтобы предупредить владельцев закрытых сайтов.
avatar
trac.lsdev.ru/svn/livestreet/trunk/classes/actions/ActionRegistration.class.php

	protected function CheckInviteRegister() {
		if ($this->Session_Get('invite_code')) {
			return true;
		}
		return false;
	}


Функция требует тщательной проверки.А вообще можно сделать несколькими способами.
avatar
protected function EventIndex()

интереснее, там вроде нет дырок…
avatar
А разве код инвайта не проверяет при отправке формы?
avatar
а вот проверьте
avatar
Да, действительно…

Правится заменой:
/**
 * Если юзер зарегистрировался по приглашению то обновляем инвайт
 */
if (Config::Get('general.reg.invite') and $oInvite=$this->User_GetInviteByCode($this->GetInviteRegister())) {
	$oInvite->setUserToId($oUser->getId());
	$oInvite->setDateUsed(date("Y-m-d H:i:s"));
	$oInvite->setUsed(1);
	$this->User_UpdateInvite($oInvite);
}


на
if (Config::Get('general.reg.invite')) {
	if ($oInvite=$this->User_GetInviteByCode($this->GetInviteRegister())) {
		$oInvite->setUserToId($oUser->getId());
		$oInvite->setDateUsed(date("Y-m-d H:i:s"));
		$oInvite->setUsed(1);
		$this->User_UpdateInvite($oInvite);
	} else {
		$this->Message_AddError($this->Lang_Get('registration_invite_code_error'),$this->Lang_Get('error'));				
		return;
	}
}
avatar
А нет… Пользователь создается раньше этой проверки

Тогда надо в EventIndex добавить перед проверкой логина:
/**
 * Проверка инвайта
 */
if (Config::Get('general.reg.invite')) {
	if (!$oInvite=$this->User_GetInviteByCode($this->GetInviteRegister())) {
		$this->Message_AddError($this->Lang_Get('registration_invite_code_error'),$this->Lang_Get('error'));				
		return Router::Action('error');
	}
}
avatar
нифига, все равно
avatar
Только что пробовал с последним кодом — второй пользователь не регистрируется.
avatar

if (isPost('submit_register')) {
			//Проверяем  входные данные
			$bError=false;
			
			/**
            * Проверка инвайта
            */
      if (Config::Get('general.reg.invite')) {
	  if (!$oInvite=$this->User_GetInviteByCode($this->GetInviteRegister())) {
		$this->Message_AddError($this->Lang_Get('registration_invite_code_error'),$this->Lang_Get('error'));				
		return Router::Action('error');
	}
}
			/**
			 * Проверка логина
			 */
			if (!$this->User_CheckLogin(getRequest('login'))) {
				$this->Message_AddError($this->Lang_Get('registration_login_error'),$this->Lang_Get('error'));
				$bError=true;
			}

вот так?
avatar
Да
avatar
все инвайты уходят в невалид, пользователь регистрируется, а вроде и не регистрируется, в админке есть, в новых юзерах нет
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.