Модератор форума: Shеriff, Yuri_G  
Как бороться со спамом?
dukie
Репутация: 0

Сообщение # 406 | 04:37:30
Цитата sch779 ()
- обычный пользователь нажимает кнопку типа "показать код безопасности", по которой скрипт вставит в форму нужные поля и запросит у сервера новую капчу (эмуляция нажатия кнопки "обновить капчу") - в этом случае после заполнения формы на сервер будет отправлена полная форма с капчей.В общем, скрипт достаточно элементарный - попробую этот вариант на выходных.

искренне желаю удачи и успеха,
очень надеюсь, что решение наконец то будет найдено
sch779
Сообщений: 703
Репутация: 348

Сообщение # 407 | 03:20:45
Ну, кажеться что-то получилось путное!
Напомню смысл идеи борьбы с регистрацией ботов на сайте, предложенной lupus и несколько доработанной мною в ходе дискуссии с автором:
- убираем из формы регистрации код вставки капчи и заменяем его обычной кнопкой типа "Показать код безопасности"
- бот, ничего не зная про эту кнопку, просто заполняет все поля формы и отправляет ее на сервер. Т.к., в коде формы нет капчи, то бот отсылает форму без капчи, но сервер авторизации ожидает получить код капчи и, не найдя его в присланной форме, отбивает такую регистрацию
- обычный человек, желая зарегистрироваться на сайте, после заполнения всех полей формы жмет на кнопку "Получить код безопасности".
При этом срабатывает небольшой js-скрипт, который вместо этой кнопки вставляет в форму стандартный блок ввода капчи.
Пользователь заполняет поле кода капчи и отправляет форму на сервер авторизации. Т.к., в этой форме уже есть код капчи и, надеемся, он правильный, то сервер нормально регистрирует этого пользователя.

Итак, привожу доработки, которые необходимо выполнить в шаблонах, что бы работал вышеописанный алгоритм.
Сразу скажу - у меня на сайте включены локальные пользователи, поэтому некоторые элементы формы могут отличаться от таких же элементов в форме для глобальных пользователей. Но, тут главное - js-код.

1. Открываем шаблон "Форма регистрации локальных пользователей" и находим в нем код $SECURITY_CODE_FL$.
Этот код генерит в готовой странице элементы ввода/замены капчи. В моем шаблоне он находится в строке таблицы <tr id="siM60">...</tr>.
Если Ваша форма регистрации построена на таблице, то и у Вас будет подобный HTML-код.

2. Вместо этого кода вставляете код:
Код
<tr id="siM60"><td colspan="2" align="center">
<input type="button" onclick="showSecKey();" value="Показать код безопасности" />
</td></tr>
!Обратите внимание - убираем только эту строку таблицы формы и оставляем строку с кодом <hr...>, который рисует горизонтальную линию (если в Вашей форме она есть)!

3. В начало шаблона, с первой строки, вставляете код:
Код
<script type="text/javascript">
function showSecKey()
{
   $("tr#siM60").html('<td class="manTd1" id="siM61">Код <font color="red" class="manStar">*</font>:</td><td class="manTd2" id="siM62"><input id="fCode" type="text" name="code" size="7" maxlength="6"><input type="hidden" name="seckey" value="6121427701266321782"><img alt="" style="margin:0;padding:0;border:0;cursor:pointer;" id="secImg" align="absmiddle" src="/secure/?k=6121427701266321782;m=usreg39251236;tm=1398462182" onclick="this.src=\'/secure/?k=6121427701266321782;m=usreg39251236;tm=\'+Math.random();" title="Обновить код безопасности"><img alt="" src="http://s39.ucoz.net/img/ma/refresh.gif" border="0" align="absmiddle" style="cursor:pointer;" onclick="document.getElementById(\'secImg\').src=\'/secure/?k=6121427701266321782;m=usreg39251236;tm=\'+Math.random();" title="Обновить код безопасности"></td>');
};
</script>
Значения переменных k, m и tm в этом коде могут быть, в принципе, любые.
Значения переменных id должны совпадать со значениями из Вашего шаблона. Лучше всего их посмотреть в HTML-коде готовой страницы регистрации с генерацией кода для ввода капчи.
Ну вот, в принципе, и все!

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

Я проверил - у меня прекрасно работает.
На ботах проверять желания нет, но я более чем уверен - боты зарегистрироваться не смогут!
Если только разработчик ботов не вставит в их код алгоритм распознавания этой защиты - боты хотя и не могут выполнять js-код, но они смогут сами сделать запрос на капчу у сервера, распознать его и вставить код капчи в post-запрос на сервер авторизации с заполненной формой.
Сообщение отредактировал sch779 - Суббота, 26 Апр 2014, 03:34:36
dukie
Репутация: 0

Сообщение # 408 | 14:54:02
Сделано всё красиво, всё открывает, но при "регистрации" выдает - "Неправильный код безопасности"
проверял в двух браузерах IE8 и Мозила

Цитата sch779 ()
Есть, правда, одна особенность этого алгоритма - сервер всегда генерит самую сложную капчу!

этого я не заметил, всё как обычно
sorry
lupus
Сообщений: 7
Репутация: 1

Сообщение # 409 | 00:06:27
Что-то сделали? Замечательно, испробую в ближайшее время и отпишусь.

Кстати всем предлагаю ознакомиться с моей статьей по теме:
Трудности администрирования на ucoz
http://hermitlair.ucoz.com/blog/2014-04-26-423

Добавлено (26 Апр 2014, 23:48:47)
---------------------------------------------
Не срабатывает. Неверный ключ безопасности какой не вводи. Что-то упустил я?

У меня по $SECURITY_CODE_FL$ код генерится такой:

***<br> <input id="fCode" name="code" onkeyup="try{checkSecure();}catch(e){}" size="7" maxlength="6" type="text"><input name="seckey" value="719758890" type="hidden"><img alt="" style="margin:0;padding:0;border:0;cursor:pointer;" id="secImg" src="/secure/?k=719758890;m=usreg32085480;tm=1398541202" onclick="this.src='/secure/?k=719758890;m=usreg32085480;tm='+Math.random();" title="Обновить код безопасности" align="absmiddle"><img alt="" src="http://s32.ucoz.net/img/ma/refresh.gif" style="cursor:pointer;" onclick="document.getElementById('secImg').src='/secure/?k=719758890;m=usreg32085480;tm='+Math.random();" title="Обновить код безопасности" align="absmiddle" border="0">. <br> ***

Добавлено (27 Апр 2014, 00:06:27)
---------------------------------------------
Я пробовал заменять все значения на свои из примера выше, не помогло. Попробовал просто фрагмент заменить своим, тоже. Кнопка не срабатывает, капча не показывается. Возможно где закралась простая ошибка пунктуации, привожу свой вариант, посмотрите пожалуйста:

<?if($SECURITY_CODE_FL$)?>
<tr id="siM60"><td id="siM61" class="manTd1">$SECURITY_CODE_SIGN$</td><td id="siM62" class="manTd2">
<input type="button" onclick="showSecKey();" value="Показать код безопасности" />
</td><td></td></tr>
<?endif?>

<script type="text/javascript">
function showSecKey()
{$("tr#siM60").html('<td class="manTd1" id="siM61">Код <font color="red" class="manStar">*</font>:</td><td class="manTd2" id="siM62">
<input id="fCode" name="code" onkeyup="try{checkSecure();}catch(e){}" size="7" maxlength="6" type="text"><input name="seckey" value="719758890" type="hidden"> <img alt="" style="margin:0;padding:0;border:0;cursor:pointer;" id="secImg" src="/secure/?k=719758890;m=usreg32085480;tm=1398541202" onclick="this.src='/secure/?k=719758890;m=usreg32085480;tm='+Math.random();" title="Обновить код безопасности" align="absmiddle"> <img alt="" src="http://s32.ucoz.net/img/ma/refresh.gif" style="cursor:pointer;" onclick="document.getElementById('secImg').src='/secure/?k=719758890;m=usreg32085480;tm='+Math.random();" title="Обновить код безопасности" align="absmiddle" border="0">
</td>');};
</script>

Сообщение отредактировал lupus - Воскресенье, 27 Апр 2014, 00:07:36
sch779
Сообщений: 703
Репутация: 348

Сообщение # 410 | 06:37:46
Цитата lupus ()
Возможно где закралась простая ошибка пунктуации
Вы неточно выполнили пункт 2 - вместо Вашего HTML-кода нужно просто вставить код:
Код
<?if($SECURITY_CODE_FL$)?>   
<tr id="siM60"><td colspan="2" align="center">   
<input type="button" onclick="showSecKey();" value="Показать код безопасности" />   
</td></tr>   
<?endif?>

Кроме этого, Вы неточно выполнили пункт 3 - js-код надо вставить в самом начале этого шаблона, до HTML-кода формирования страницы регистрации.
Ну и, наконец, Вы не совсем точно воспроизвели js-код - упустили обратные слеши перед внутренними одинарными скобками.
Сообщение отредактировал sch779 - Воскресенье, 27 Апр 2014, 06:38:19
dukie
Репутация: 0

Сообщение # 411 | 17:44:57
Скрипт заработал после замены параметра value , значение которого генерируется Моим сайтом.
На всякий случай заменил и другие значения переменных на свои, хотя при первой проверке это ничего не дало

2. Код скрипта пробовал вставлять и прямо в начало шаблона "Форма регистрации локальных пользователей", тоже прекрасно работает

3. Название кнопки "Показать код безопасности" заменил на "Откройте код безопасности", мне кажется так более правильней и логично

4. Думаю капчу с таким вариантом можно установить даже стандартную, хотя и сложная у меня работает как обычно, без генерации только сложных картинок

А в целом выражаю огромную благодарность sch779, спасибо
Осталось только посмотреть, как это всё будет работать на практике
sch779
Сообщений: 703
Репутация: 348

Сообщение # 412 | 00:12:16
Цитата dukie ()
Скрипт заработал после замены параметра value , значение которого генерируется Моим сайтом.
Я правильно понял - Вы загружаете ajax-ом некоторую страницу сайта, на которую выводится код безопасности, и берете из этой страницы значение параметра "seckey"?
dukie
Репутация: 0

Сообщение # 413 | 14:53:23
Цитата sch779 ()
Я правильно понял - Вы загружаете ajax-ом некоторую страницу сайта, на которую выводится код безопасности, и берете из этой страницы значение параметра "seckey"?

"некоторую страницу сайта" я не делал и никаких дополнительных шагов не предпринимал, но без замены значения параметра value скрипт на моем сайте не работает

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

??
Selena
Сообщений: 15657
Репутация: 1100

Сообщение # 414 | 15:07:07
Цитата sch779 ()
смысл идеи борьбы с регистрацией ботов на сайте

Второй день наслаждаюсь отсутствием регистраций на сайте с локальной авторизацией. Что было сделано? Поле аватар сделано обязательным. И ещё одно поле, в которое надо вписать отсебятину. Без всяких скриптов и замен капчей.

Отправляя сообщение о помощи, приводите ссылку на свой сайт. Это не считается рекламой, зато снимает массу вопросов.
dukie
Репутация: 0

Сообщение # 415 | 16:09:55
Цитата Selena ()
Второй день наслаждаюсь отсутствием регистраций на сайте с локальной авторизацией. Что было сделано? Поле аватар сделано обязательным.

Этим вариантом пользуюсь уже давно и очень успешно,
у меня другой больной вопрос - как быть с комментариями

Почему то при установке Гостям премодерацию, при добавлении комментария с первого раза система выдает "доступ запрещен".
Комментарий добавляется только после перезагрузки страницы huh
Selena
Сообщений: 15657
Репутация: 1100

Сообщение # 416 | 16:14:35
dukie, это странно. Скрипты сторонние стоят?

Отправляя сообщение о помощи, приводите ссылку на свой сайт. Это не считается рекламой, зато снимает массу вопросов.
dukie
Репутация: 0

Сообщение # 417 | 17:23:16
Кроме скрипта кнопок социальных сетей всё родное, но они у меня стоят очень давно и никаких багов не было
Selena
Сообщений: 15657
Репутация: 1100

Сообщение # 418 | 17:27:02
dukie, ссылку на сайт давали?

Отправляя сообщение о помощи, приводите ссылку на свой сайт. Это не считается рекламой, зато снимает массу вопросов.
dukie
Репутация: 0

Сообщение # 419 | 17:43:47
Прошу прощенья - http://helpcentr.do.am/
webanet
Сообщений: 24067
Репутация: 4985

Сообщение # 420 | 18:34:09
dukie, все работает отлично

Прикрепления: 1570241.jpg (42.1 Kb)

ТУТ можно оставить своё мнение по любому вопросу
https://webanetlabs.net/
Поиск: