Перейти к контенту

JS проверка регистрации ботов


Рекомендуемые сообщения

Внимание! По всему тексту в слове javascript сходные по написанию буквы написаны русскими; не пытайтесь тупо копировать код!

 

1.3

 

skin_register.php

 

Сначала вывод предупреждения, что для успешной регистрации требуется джава-скрипт, и создание скрытого поля:

 

Находим код:

<form action="{$ibforums->vars['board_url']}/index.{$ibforums->vars['php_ext']}" method="post" name='REG' onsubmit='return Validate()'>
<input type='hidden' name='act' value='Reg' />
<input type='hidden' name='CODE' value='02' />
<input type='hidden' name='coppa_user' value='{$data['coppa_user']}' />
<b>{$ibforums->lang['reg_header']}</b><br /><br />{$data['TEXT']}
<br />
<br />
<div class="tableborder">

Заменяем на:

<form action="{$ibforums->vars['board_url']}/index.{$ibforums->vars['php_ext']}" method="post" name='REG' onsubmit='return Validate()'>
<input type='hidden' name='act' value='Reg' />
<input type='hidden' name='CODE' value='02' />
<input type='hidden' name='coppa_user' value='{$data['coppa_user']}' />
<input type='hidden' name='check_bot' id='check_bot' value='1' />
<b>{$ibforums->lang['reg_header']}</b><br /><br />{$data['TEXT']}
<br />
<script type="text/jаvаscript">
function valid(){
if(document.getElementById("check_bot")){
document.getElementById("check_bot").value = '0' 
}
}
</script>
<noscript>
<h2 style="color:Red">Обнаружена ошибка!<br>Для регистрации на форуме требуется поддержка джава-скрипт.</h2>
</noscript>
<br />
<div class="tableborder">

 

Итак, у нас появилось скрытое поле с именем check_bot со значением "1", есть функция valid(), преобразующая значение скрытого поля в "0", и есть сообщение, появляющееся, если у пользователя отключен джава-скрипт.

 

В строку

<input type='text' size='32' maxlength='64' value='{$ibforums->input['UserName']}' name='UserName' class='forminput' />

добавляется обработчик события onfocus, получается код:

<input type='text' size='32' maxlength='64' value='{$ibforums->input['UserName']}' name='UserName' class='forminput' onClick='jаvаscript:valid();' onKeyup='jаvаscript:valid();' onChange='jаvаscript:valid();' onFocus='jаvаscript:valid();' />

 

Если используется несколько скинов, повторить для всех (или проверить, что изменен дефолтный скин).

 

Теперь вывод сообщения об ошибке для ботов и для тех, кто решил регистрироваться без джавы.

 

Файл Register.php:

После

	if ($ibforums->input['EmailAddress_two'] != $in_email)
 {
 	$this->show_reg_form('err_email_address_match');
 	return;
}

добавляем:

if ( $ibforums->input['check_bot'] != "0" )  
 {
$this->show_reg_form('err_check_bot');
return; 
 }

 

 

Файл lang_register.php:

В массив добавляем:

'err_check_bot' => "<big>Для регистрации необходима поодержка джава-скрипт браузером.</big>",

 

 

2.1.Х

 

Внешний вид => стандартный стиль => изменить HTML-фрагменты => Register => ShowForm

 

Находим:

<input type="hidden" name="coppa_user" value="{$data['coppa_user']}" />
<div class="borderwrap">

 

Заменяем на:

<input type="hidden" name="coppa_user" value="{$data['coppa_user']}" />
<input type='hidden' name='check_bot' id='check_bot' value='1' />
<script type="text/jаvаscript">
function valid(){
if(document.getElementById("check_bot")){
document.getElementById("check_bot").value = '0' 
}
}
</script>
<noscript>
<h2 style="color:Red">Обнаружена ошибка!<br>Для регистрации на форуме требуется поддержка джава-скрипт.</h2>
</noscript>
<div class="borderwrap">

 

 

Ниже находим:

<input type="text" size="50" maxlength="64" value="{ipb.input['UserName']}" id='reg-name' name="UserName" />

 

Заменяем на:

<input type="text" size="50" maxlength="64" value="{ipb.input['UserName']}" id='reg-name' name="UserName" onClick="jаvаscript:valid();" onKeyup="jаvаscript:valid();" onChange="jаvаscript:valid();" onFocus="jаvаscript:valid();" />

 

 

lang_register.php

 

После кода:

'err_reg_code'	  => "Код регистрации не соответствует отображенному. Сгенерирован новый код регистрации. Повторите попытку.",

 

Добавить:

'err_reg_bot'	  => "Для успешной регистрации требуется поддержка джава-скрипт браузером.",

 

 

register.php

 

Найти:

			if ( trim( intval($this->ipsclass->input['reg_code']) ) != $row['regcode'] )
		{
			$form_errors['general'][] = $this->ipsclass->lang['err_reg_code'];
		}

 

Выше добавить:

			if ( trim( intval($this->ipsclass->input['check_bot']) ) != 0 )
		{
			$form_errors['general'][] = $this->ipsclass->lang['err_reg_bot'];
		}

 

 

 

====================================

17:05:2007:

Исправлена ошибка в файерфоксе.

Изменено пользователем FatCat
Ссылка на комментарий
Поделиться на других сайтах

  • 2 недели спустя...
  • Ответы 62
  • Создана
  • Последний ответ

Лучшие авторы в этой теме

Лучшие авторы в этой теме

2.1.х

админка - внешний вид - изменить HTML фрагменты - skin_register - ShowForm

1.

<form action="{ipb.vars['board_url']}/index.{ipb.vars['php_ext']}" method="post" name="REG" onsubmit="return validate_reg_form(event)">
<input type="hidden" name="act" value="Reg" />
<input type="hidden" name="termsread" value="1" />
<input type="hidden" name="agree_to_terms" value="1" />
<input type="hidden" name="CODE" value="02" />
<input type="hidden" name="coppa_user" value="{$data['coppa_user']}" />
<div class="borderwrap">

-->

<script type="text/jаvаscript">
function valid(){
if(document.getElementById("check_bot")){
document.getElementById("check_bot").value = '0' 
}
}
</script>
<noscript>
<h2 style="color:Red">Обнаружена ошибка!<br>Для регистрации на форуме требуется поддержка джава-скрипт.</h2>
</noscript>
<form action="{ipb.vars['board_url']}/index.{ipb.vars['php_ext']}" method="post" name="REG" onsubmit="return validate_reg_form(event)">
<input type="hidden" name="act" value="Reg" />
<input type="hidden" name="termsread" value="1" />
<input type="hidden" name="agree_to_terms" value="1" />
<input type="hidden" name="CODE" value="02" />
<input type="hidden" name="coppa_user" value="{$data['coppa_user']}" />
<input type='hidden' name='check_bot' value='1' />
<div class="borderwrap">

2.

<input type="text" size="50" maxlength="64" value="{ipb.input['UserName']}" id='reg-name' name="UserName" />

-->

<input type="text" size="50" maxlength="64" value="{ipb.input['UserName']}" id='reg-name' name="UserName" onfocus='jаvаscript:valid()'/>

 

sources/action_public/register.php

ПЕРЕД

		//-----------------------------------------
	// CHECK 2: Any errors (duplicate names, etc)?
	//-----------------------------------------

	if ( count( $form_errors ) )
	{
		$this->show_reg_form( $form_errors );
		return;
	}

добавляем

		if ($this->ipsclass->input['check_bot'] != "0")
	{
		$form_errors['general'][] = $this->ipsclass->lang['reg_error_check_bot'];
	}

 

cache/lange_cache/*/lang_register.php

после

'reg_error_email_taken'	=> "Введенный e-mail уже используется другим пользователем",

добавить

'reg_error_check_bot'	=> "Для регистрации необходима поодержка джава-скрипт браузером.",

 

теперь должно работать

Ссылка на комментарий
Поделиться на других сайтах

только я почему то с выключенным яваскриптом в опере все равно могу зарегестрироваться(

Попробуй. Джаваскрипт уже отключен анонимаусом.

 

 

 

Ну и чем это ботам помешает?

Бот - не человек, а программа.

Бот не загружает страницы на экран, бот анализирует тег <form ... > и по результатам анализа генерирует запрос серверу.

При анализе бот увидит <input type='hidden' name='check_bot' value='1' /> и передаст в запросе значение единичку.

Совсем иное будет у пользователя-человека.

Джаваскрипт отработает при фокусировке поля ввода логина (<input type="text" ... onfocus='jаvаscript:valid()'/>), и заменит значение на нолик.

Ссылка на комментарий
Поделиться на других сайтах

смотри мою инструкцию, может я чего пропустил

Я плохо знаю двушки.

Если с отключенным джаваскриптом происходит регистрация, а не выброс на эррор - значит, скорее всего не в том файле или не в том месте сделана проверка значения скрытого поля.

Ссылка на комментарий
Поделиться на других сайтах

  • 2 месяца спустя...
А если пользователь сам отключил ява скрипт?
Ссылка на комментарий
Поделиться на других сайтах

А если пользователь сам отключил ява скрипт?

Он увидит большое красное предупреждение:

Попробуй. Джаваскрипт уже отключен анонимаусом.
Ссылка на комментарий
Поделиться на других сайтах

Он увидит большое красное предупреждение:

Дык что предупреждение.. Он не сможет даже зарегиться..

Ссылка на комментарий
Поделиться на других сайтах

  • 3 недели спустя...

А не подскажете! Почему-то в Firefox 2.0 не работает - когда вводишь данные - пишет - "Для регистрации необходима поддержка джава-скрипт браузером.", хотя все включено!

В Эксплорере и в Опере работает! Это только у меня или у всех?

 

Спасибо!

Ссылка на комментарий
Поделиться на других сайтах

А не подскажете! Почему-то в Firefox 2.0 не работает - когда вводишь данные - пишет - "Для регистрации необходима поддержка джава-скрипт браузером.", хотя все включено!

На файерфоксе не проверял.

Видимо все же придется мне поставить Firefox и тестить еще и под ним.

 

Блин! Как я ненавижу Нетскейп и всех его последышей!

 

 

 

UPD:

Поставил, проверил.

Проблема в строке:

<input type='text' size='32' maxlength='64' value='' name='UserName' class='forminput' onfocus='java script:valid()' />

Этот тупой браузер не понимает onfocus.

 

ОК, маленькая заплатка для совместимости с файерфоксом:

1.3: skin_register.php

Найти:

<script language='javascript' type="text/javascript">
<!--
function Validate() {
// Check for Empty fields

Ниже добавитьстроку:

valid();

 

 

"Двушки" нет под рукой. Принцип тот же: в функцию проверки заполненности формы регистрации добавить вызов функции valid()...

Ссылка на комментарий
Поделиться на других сайтах

Не, все равно не хочет!

Тоже самое пишет!

Черт!

Сейчас на другом компьютере, опять нет файерфокса под рукой.

 

ОК, давайте пойдем тем путем, которым пошли разработчики ИПБ в топиках: продублируем запросы разными обработчиками.

 

Для "двушек":

<input type="text" size="50" maxlength="64" value="{ipb.input['UserName']}" id='reg-name' name="UserName" />

Заменяем на:

<input type="text" size="50" maxlength="64" value="{ipb.input['UserName']}" id='reg-name' name="UserName" onClick="javascript:valid();" onKeyup="javascript:valid();" onChange="javascript:valid();" onFocus="javascript:valid();" />

Ссылка на комментарий
Поделиться на других сайтах

У меня версия 1.2!

Для 1.х: В строку

<input type='text' size='32' maxlength='64' value='{$ibforums->input['UserName']}' name='UserName' class='forminput' />

добавить 4 обработчика, чтобы получилось:

<input type='text' size='32' maxlength='64' value='{$ibforums->input['UserName']}' name='UserName' class='forminput' onClick="javascript:valid();" onKeyup="javascript:valid();" onChange="javascript:valid();" onFocus="javascript:valid();" />

Ссылка на комментарий
Поделиться на других сайтах

Мои извинения, что так долго разбирался.

Поставил файрфокса на домашнем компьютере и все оттестировал в локалке.

Оказывается, файерфокс не понимал

name="check_bot"

его нужно продублировать

id="check_bot"

 

Сейчас поправлю первый пост.

Ссылка на комментарий
Поделиться на других сайтах

А у Вас все проходит?

Я вроде все поменял, несколько раз попробовал - но все равно не хочет.

Да, после правки кода файерфоксом зарегил новый ник на локальной копии. Установил на форум, там тоже пробно зарегистрировался. Можно проверить на www.vesvalo.net

 

Файерфокс у меня последний, 2.0.3, может в этом дело?

Ссылка на комментарий
Поделиться на других сайтах

Да! Точно! У Вас работает!

Но у меня одно отличие - стоит проверка кода при регистрации.

Только что убрал проверку кода - тоже заработало (УРА!), но хотелось бы чтобы с кодом работало!

Получится?

 

Спасибо!

Ссылка на комментарий
Поделиться на других сайтах

Только что убрал проверку кода - тоже заработало (УРА!), но хотелось бы чтобы с кодом работало!

Получится?

Не пойму, как проверка кода регистрации может влиять на работу джаваскрипта.

 

Хотя... Если два разных объекта будут иметь одинаковый id, джаваскрипт вылетит с ошибкой.

Проверьте, не использует ли код регистрации id="check_bot" или что-то подобное. Если использует - в моей модификации замените везде check_bot на check_botj или как-то еще, чтобы не было дублирования идов.

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.