100% Универсальная защита от спама

Список разделов phpBBex 1.x (поддерживается) Мастерская 1.x

Описание: Только готовые решения! Статьи, заметки, моды и другие полезности для phpBBex 1.x и phpBB 3.0.x.
Модератор: Поддержка

Сообщение #1 Alexandr_ » 12.12.2013, 14:51

Из разряда, простых народных методов.

В рамках своей разработки, включил данный функционал (идея моя) который можно применить на любом сайте. Он прост до безобразия!
Пока не вижу подводных камней.

Собственно как это работает:

Как видно из кода, идет проверка реферер key.
В Конфиговский файл своего сайта или форума нужно добавить:
Код: Выделить всё
<?php
define('SITEURL', 'http://mysite.ru/'); // Используйте переменную своего движка
define('SALT', 'соль'); // Статическая соль
?>

файл генерации Ref ключа: key-gen.php
Код: Выделить всё
<?php
$date = date("Ymd:Hi"); // Динамическая соль
$ip = $_SERVER["REMOTE_ADDR"]; // IP Клиента (необязательно, можно и убрать из кода переменную $ip)
$user_key = md5(SALT.$ip.$date); // Хешируем (сам ключ)
//echo $user_key;
header('Location: '.SITEURL."ref.php?key=".$user_key); // Генерацию REFERER-KEY можно сделать js-криптом, таким образом будет проверка у клиента JS= ON|OFF
?>


файл с сылками на регистрацию авторизацию и тд: ref.php
Код: Выделить всё
<?php 
echo "Пишем ссылки";
?>
Можно также создать кучу фантомных сабмитов с фальшь ключами и "display:none" но в этом не будет необходимости так как у пользователя будет до минуты что бы перейти по ссылке с генерированным ключем.


Файл самой авторизации и регистрации: login.php где и будет проходить конечная проверка
Код: Выделить всё
<?php
$date = date("Ymd:Hi");
$ip = $_SERVER["REMOTE_ADDR"];
$user_key = md5(SALT.$ip.$date);
header('Content-Type: text/html; charset=utf-8');
if(eregi($user_key, $_SERVER['HTTP_REFERER']) == false)
die('Неудача, попробуйте <a title="Попробовать ещё раз!" href="/key-gen.php">еще раз</a>!');
?>

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

Код можно упростить до функции. Кому как будет нужно или удобно.

Ваши мнения?
Последний раз редактировалось Alexandr_ 12.12.2013, 15:46, всего редактировалось 2 раз(а).
Alexandr_
Автор темы
Репутация: 5
С нами: 10 лет 5 месяцев

Сообщение #2 factotum » 12.12.2013, 15:09

Alexandr_:Ваши мнения?
ничего нового. боты давно не проблема. человеко зайдет.
Модель с кнопкой "Это спам" работает на 100%. Даже если в спам попадает несколько сообщений стандартного для форума формата - не вижу проблем. Значит полезность их такая.
factotum
Откуда: Люксембург
Репутация: 234
С нами: 11 лет 11 месяцев

Сообщение #3 Alexandr_ » 12.12.2013, 15:21

Я не писал что это единственный способ. Это простой универсальный и максимально эффективный способ. То что боты не пройдут это 100%. Просто и красиво, без лишнего геморроя. Девло в том что и боты разные бывают и куки принимают и скрипты поддерживают да и ломясь на /login.php создают ненужный трафик. Мой вариант решает все проблемы сразу. И нет необходимости в капчах.

А вот про людей спамеров это уже другая история. В рамках своего проекта я эту проблему решил. Но, так как этот подход не универсален, описывать его не буду.

Суть моего решения в том что новый пользователь ограничен в правах. И не может создавать темы. Для этого пользователю нужно добавить не менее 2 отзывов, причем статус отзывов должен быть "опубликован" У данной группы проверяется первые 2 комментария после получает возможность создавать свои темы. При чем после публикации своих комментариев пользователь не информирован что его комент на модерации. Он свой коммент видит а другие пользователи нет (кроме модера).

Там много чего сделано всё описывать нет смысла...
Alexandr_
Автор темы
Репутация: 5
С нами: 10 лет 5 месяцев

Сообщение #4 factotum » 12.12.2013, 15:41

Alexandr_:боты разные бывают и куки принимают и скрипты поддерживают да и ломясь на /login.php
ботов не потрошил. Может подскажите, как боты могут заполнять поля и подтверждать формы без JS?
factotum
Откуда: Люксембург
Репутация: 234
С нами: 11 лет 11 месяцев

Сообщение #5 Alexandr_ » 12.12.2013, 15:50

На phpbbex никак, но боты могут поддерживать js, собственно гуглбот это умеет. И для того чтобы отправить post запрос js ненужен. Другой вопрос, капче нужна js.
Alexandr_
Автор темы
Репутация: 5
С нами: 10 лет 5 месяцев

Сообщение #6 factotum » 12.12.2013, 16:01

Alexandr_:И для того чтобы отправить post запрос js ненужен
т.е. бот может работать на php, c++ или любом другом языке?
factotum
Откуда: Люксембург
Репутация: 234
С нами: 11 лет 11 месяцев

Сообщение #7 Sumanai » 12.12.2013, 17:24

Alexandr_:Время действия ключа до 1 минуты.

Точнее в течении текущей минуты. То есть если юзер запросил форму в х минут 59 секунд, она ещё до отправки станет устаревшей.

Добавлено спустя 56 секунд:
factotum:т.е. бот может работать на php, c++ или любом другом языке?

Само собой, так чаще всего и делают. Использовать реальный браузер слишком затратно, обычно просто посылают запросы напрямую, иногда даже не скачивая страницы.
Sumanai M
Аватара
Репутация: 1677
С нами: 11 лет 2 месяца

Сообщение #8 VEG » 12.12.2013, 20:39

Решние не защитит от спама 100%. Если убрать капчу, то наоборот, вы облегчите задачу заспамливания вашего форума в разы. Поиск страницы регистрации с ключом в URL — не такая уж и большая проблема. Как дополнительная степень защиты от спама — годится. Ровно до тех пор, пока это не станет популярным, и спаммеры не адаптируют свой софт под это.
VEG M
Администратор
Аватара
Откуда: Finland
Репутация: 1653
С нами: 11 лет 11 месяцев

Сообщение #9 Alexandr_ » 12.12.2013, 23:06

Sumanai:Точнее в течении текущей минуты.
Именно так, это приравнивается к неудаче, и пользователю сразу предложено кликнуть по ссылке и обновить таймер.

VEG:Решние не защитит от спама 100%
Как именно спамеры пройдут этот фокус? Чисто теоретически можно ...

Обратиться к скрипту на прямую не получиться, каким образом на сервер будут отправлены данные?

Я уточню: Это лишь идея, у меня это реализовано на собственном сайте не phpbb. На phpbb нужно делать еще несколько правок. Иначе будут проблемы с получением подтверждения по почте. Выходом, и много ещё мелочей.

Друзья я просто делюсь идеями. :wink:
Alexandr_
Автор темы
Репутация: 5
С нами: 10 лет 5 месяцев

Сообщение #10 Sumanai » 12.12.2013, 23:13

Alexandr_:Именно так, это приравнивается к неудаче, и пользователю сразу предложено кликнуть по ссылке и обновить таймер.

Я бы свалил с такого ресурса после первого же подобного провала. Это ошибка, так быть не должно.
Sumanai M
Аватара
Репутация: 1677
С нами: 11 лет 2 месяца

Сообщение #11 Alexandr_ » 12.12.2013, 23:24

Ну эта процедура незаметная, весь процесс авторизации или регистрации это пару кликов мышой и ввод логина и почты. Причем неудачу можно обозвать просто " С генерировать ключ" вот и всё... Это гораздо лучше чем заходить на страницу правил потом на страницу авторизации вводить дикую капчу подтверждать по почте. Да и у многих популярных ресурсов капчь бывает больше 1. И тут дело не в том свалил бы или нет, есть сайты за авторизацию на которых люди платят за инвайты, или авторизация настолько важна что им честно всё равно сколько преград стоит перед заветной авторизацией регистрацией.
Alexandr_
Автор темы
Репутация: 5
С нами: 10 лет 5 месяцев

Сообщение #12 Sumanai » 13.12.2013, 00:03

Alexandr_:Причем неудачу можно обозвать просто " С генерировать ключ" вот и всё...

Просто эта "неудача" будет часто встречаться у вполне легитимных пользователей. Думаю, быстрее 4 секунд мало кто на две кнопки в незнакомой форме нажмёт, так что у 7% пользователей будет выводится ошибка при правильных действиях.
Тогда уж проще поле ввода, и рядом текст "введите число 4", а на сервере сверять с числом 3. Ни один бот не пройдёт, я гарантирую!

Alexandr_:есть сайты за авторизацию на которых люди платят за инвайты, или авторизация настолько важна что им честно всё равно сколько преград стоит перед заветной авторизацией регистрацией.

Ага. Только тогда ваш метод никак не тянет на универсальный.
Sumanai M
Аватара
Репутация: 1677
С нами: 11 лет 2 месяца

Сообщение #13 VEG » 13.12.2013, 11:15

Alexandr_:Как именно спамеры пройдут этот фокус? Чисто теоретически можно ...
Загружаем страницу, ищем регуляркой все теги <a>, находим тег с текстом «Регистрация» или находим ссылку, начинающуюся с login.php и содержащую искомый ключ. Работы на пару минут. Как я писал, в phpBBex уже в формах есть подобный ключ, без которого формы считаются невалидными. Причём этот ключ устанавливается кодом на JavaScript.

Alexandr_:Причем неудачу можно обозвать просто " С генерировать ключ" вот и всё...
Дарю вам бесплатную идею. Нужно проверять не один ключ, а все ключи за последние, допустим, 30 минут. В итоге ключ будет меняться каждую минуту, но у пользователей не будет проблем, связанных с этим, если они успеют зарегистрироваться за 30 минут :)

Alexandr_:if(eregi($user_key, $_SERVER['HTTP_REFERER']) == false)
И кто вас научил использовать eregi для проверки вхождения подстроки в строку? :( Лучше так не делайте, для этого следует использовать strpos.
VEG M
Администратор
Аватара
Откуда: Finland
Репутация: 1653
С нами: 11 лет 11 месяцев

Сообщение #14 Sumanai » 13.12.2013, 15:19

VEG:И кто вас научил использовать eregi

Тем более он объявлен устаревшим.
Sumanai M
Аватара
Репутация: 1677
С нами: 11 лет 2 месяца

Сообщение #15 Alexandr_ » 15.12.2013, 03:00

VEG:Загружаем страницу, ищем регуляркой все теги <a>, находим тег с текстом «Регистрация» или находим ссылку, начинающуюся с login.php и содержащую искомый ключ. Работы на пару минут. Как я писал, в phpBBex уже в формах есть подобный ключ, без которого формы считаются невалидными. Причём этот ключ устанавливается кодом на JavaScript.

А если этих тегов а будет много, как я описал в теме указать множество фантомных ссылок с=классом в котором указано display:none;
Ту схему что описали вы очень легко обойти. Даже можно упростить, проверять не REFERER а REQUEST_URI просто добавить в конце /login.php?aut=login &key

При переходе на страницу принятия правил нужно нажать на Правильную ссылку принимаю

Я ещё раз повторяю эта идея, проверка ключа задумана как универсальное средство и не зависит от cms. Для тех кто принципиально не хочет ставить капчу

Вникать тут нужно в проверку ключа в урл. А какой функцией будет вестись проверка не имеет значение.

Альтернатива этому методу это подмена полей.

В любом случае это тот метод рабочий на всё 100 процентов.
Alexandr_
Автор темы
Репутация: 5
С нами: 10 лет 5 месяцев

Сообщение #16 VEG » 15.12.2013, 10:53

Alexandr_:А если этих тегов а будет много, как я описал в теме указать множество фантомных ссылок с=классом в котором указано display:none;
И в чём проблема это проверить? Можно легко опираться на относительное положение ссылки. Как бы вы не написали, вычислить положение ссылки — задача в разы проще, чем распознать капчу.

Alexandr_:Ту схему что описали вы очень легко обойти.
Какую схему? Как? Ничего не понял.

Alexandr_:В любом случае это тот метод рабочий на всё 100 процентов.
Да не защитит этот метод на 100% от спама, не нужно иллюзий. Даже рандомные названия полей — не проблема, если робота адаптируют под ваш сайт. Всегда будет за что зацепиться. В крайнем случае можно вертеть заспамливаемый форум в полноценном браузере, проверяя, какие поля видимые, где они нарисовались, и заполнять их в зависимости от этого. К счастью, пока что это слишком дорого, и так почти не делают. Поэтому простейшая проверка на JS уже сейчас «обламывает» по 400-500 регистраций спам-ботов на одном только сайте phpbbex.com ежедневно.
VEG M
Администратор
Аватара
Откуда: Finland
Репутация: 1653
С нами: 11 лет 11 месяцев

Сообщение #17 Alexandr_ » 16.12.2013, 18:41

Вы правы, от спама это не спасет. Решил не морочить себе голову, пака пака повесил капчу ((
Alexandr_
Автор темы
Репутация: 5
С нами: 10 лет 5 месяцев


Вернуться в Мастерская 1.x



cron