Модератор форума: Shеriff, Yuri_G |
Сообщество uCoz Общение пользователей Разговоры про uCoz Как бороться со спамом? |
Как бороться со спамом? |
- обычный пользователь нажимает кнопку типа "показать код безопасности", по которой скрипт вставит в форму нужные поля и запросит у сервера новую капчу (эмуляция нажатия кнопки "обновить капчу") - в этом случае после заполнения формы на сервер будет отправлена полная форма с капчей.В общем, скрипт достаточно элементарный - попробую этот вариант на выходных. искренне желаю удачи и успеха, очень надеюсь, что решение наконец то будет найдено |
Ну, кажеться что-то получилось путное!
Напомню смысл идеи борьбы с регистрацией ботов на сайте, предложенной 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> 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> Значения переменных id должны совпадать со значениями из Вашего шаблона. Лучше всего их посмотреть в HTML-коде готовой страницы регистрации с генерацией кода для ввода капчи. Ну вот, в принципе, и все! Есть, правда, одна особенность этого алгоритма - сервер всегда генерит самую сложную капчу! Судя по всему, если сервер не находит в своей временной таблице ключ капчи, который мы передаем ему в параметре k и временный код пользователя, который мы передаем ему в параметре m, то сервер предполагает сброс текущего сеанса и на всякий случай генерит самую сложную форму капчи. Я проверил - у меня прекрасно работает. На ботах проверять желания нет, но я более чем уверен - боты зарегистрироваться не смогут! Если только разработчик ботов не вставит в их код алгоритм распознавания этой защиты - боты хотя и не могут выполнять js-код, но они смогут сами сделать запрос на капчу у сервера, распознать его и вставить код капчи в post-запрос на сервер авторизации с заполненной формой. Сообщение отредактировал sch779 - Суббота, 26 Апр 2014, 03:34:36
|
|
Что-то сделали? Замечательно, испробую в ближайшее время и отпишусь.
Кстати всем предлагаю ознакомиться с моей статьей по теме: Трудности администрирования на 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
|
Вы неточно выполнили пункт 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
|
Скрипт заработал после замены параметра value , значение которого генерируется Моим сайтом.
На всякий случай заменил и другие значения переменных на свои, хотя при первой проверке это ничего не дало 2. Код скрипта пробовал вставлять и прямо в начало шаблона "Форма регистрации локальных пользователей", тоже прекрасно работает 3. Название кнопки "Показать код безопасности" заменил на "Откройте код безопасности", мне кажется так более правильней и логично 4. Думаю капчу с таким вариантом можно установить даже стандартную, хотя и сложная у меня работает как обычно, без генерации только сложных картинок А в целом выражаю огромную благодарность sch779, спасибо Осталось только посмотреть, как это всё будет работать на практике |
|
Я правильно понял - Вы загружаете ajax-ом некоторую страницу сайта, на которую выводится код безопасности, и берете из этой страницы значение параметра "seckey"? "некоторую страницу сайта" я не делал и никаких дополнительных шагов не предпринимал, но без замены значения параметра value скрипт на моем сайте не работает Не сочтите за наглость, а можно попросить Вас сделать тоже самое и для кода безопасности в комментариях, для меня это больная тема. Его шаблон несколько отличается от шаблона формы регистрации локальных пользователей. Сам я побаиваюсь, вдруг где нибудь напартачу, опыта работы с js-скриптом почти нет. Спасибо ?? |
Второй день наслаждаюсь отсутствием регистраций на сайте с локальной авторизацией. Что было сделано? Поле аватар сделано обязательным. И ещё одно поле, в которое надо вписать отсебятину. Без всяких скриптов и замен капчей. Отправляя сообщение о помощи, приводите ссылку на свой сайт. Это не считается рекламой, зато снимает массу вопросов.
|
Второй день наслаждаюсь отсутствием регистраций на сайте с локальной авторизацией. Что было сделано? Поле аватар сделано обязательным. Этим вариантом пользуюсь уже давно и очень успешно, у меня другой больной вопрос - как быть с комментариями Почему то при установке Гостям премодерацию, при добавлении комментария с первого раза система выдает "доступ запрещен". Комментарий добавляется только после перезагрузки страницы |
Прошу прощенья - http://helpcentr.do.am/
|
|
| |||