=== Comment Stealth Timer — защита комментариев без капчи ===
Contributors: scarabaeussoft
Donate link: https://scarabaeussoft.ru
Tags: comments, spam protection, antispam, captcha, honeypot, security, comments form
Requires at least: 5.0
Tested up to: 6.7
Requires PHP: 7.4
Stable tag: 1.0.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Эффективная защита комментариев WordPress от спама без капчи. Проверяет, сколько секунд пользователь провёл на странице перед отправкой комментария.  
Идея решения взята с сайта reset.name.

== Описание ==

**Comment Stealth Timer** — лёгкий плагин для WordPress, который защищает форму комментариев от спам-ботов без капчи, reCAPTCHA и сторонних сервисов.

Принцип работы:
- Когда страница с формой комментариев загружается, плагин добавляет **скрытое поле** с временной меткой (timestamp).
- Когда пользователь нажимает «Отправить», скрипт проверяет, сколько секунд прошло с момента загрузки страницы.
- Если прошло меньше заданного времени (например, 30 секунд) или поле подделано — комментарий **отклоняется** с HTTP-кодом 503.
- Для реальных пользователей всё работает как обычно.

Такой подход не раздражает посетителей, не требует регистрации в сторонних сервисах и эффективно отсекает массовый спам.

> 💡 Идея плагина вдохновлена материалом с сайта [reset.name](https://reset.name), где автор впервые описал этот метод защиты комментариев без капчи.

== Возможности ==

* Полная защита комментариев от массового спама без капчи
* Проверка времени, проведённого пользователем на странице
* Автоматическая вставка скрытого поля с меткой времени
* Простая настройка — одна галочка «Плагин активен»
* Возможность задать минимальное время (по умолчанию 30 секунд)
* Настройка HTTP-кода и сообщения при блокировке (503, 403 и др.)
* Опция обхода для модераторов и администраторов
* Возможность принудительно выключить HTML5 / novalidate
* Поддержка **WordPress Multisite** — глобальная активация по сети

== Как это работает ==

1. Плагин добавляет в форму комментариев скрытое поле, например `<input type="text" name="csrf" style="display:none">`.
2. Через JavaScript поле заполняется текущим временем (UNIX timestamp).
3. При отправке комментария плагин проверяет:
   * прошло ли не менее *X* секунд (по умолчанию 30);
   * является ли значение корректной меткой времени;
   * не пустое ли поле.
4. Если проверка не проходит — комментарий блокируется с кодом ответа 503 (или указанным вами).

== Установка ==

1. Скачайте и распакуйте плагин **comment-stealth-timer** в директорию `/wp-content/plugins/`.
2. Активируйте через меню **Плагины → Активировать**  
   *(или «Активировать сетью» для мультисайтов)*.
3. Перейдите в **Настройки → Comment Stealth Timer**.
4. Включите пункт **«Плагин активен»**.
5. При необходимости настройте:
   * Минимальное время (секунд);
   * Имя скрытого поля (по умолчанию `csrf`);
   * Код и сообщение ошибки;
   * Исключение для модераторов;
   * Отключение HTML5 (`novalidate`).
6. Готово — форма комментариев защищена!

Для мультисайтов:
* В **Панели сети → Настройки → Comment Stealth Timer** доступна опция  
  «Принудительно включить на всех сайтах сети».

== Часто задаваемые вопросы ==

= Работает ли плагин без JavaScript? =  
Нет, но это и нужно: большинство ботов не исполняют JavaScript, поэтому не смогут заполнить временную метку.

= Можно ли поменять лимит времени? =  
Да, по умолчанию 30 секунд, но вы можете задать любое значение в настройках.

= Что произойдёт при блокировке комментария? =  
Пользователь увидит сообщение и получит ответ с HTTP-кодом (по умолчанию 503 — Service Unavailable).

= Затрагивает ли плагин другие формы на сайте? =  
Нет, только стандартную форму комментариев WordPress.

= Можно ли включить защиту на всех сайтах мультисети? =  
Да, администратор сети может включить «Принудительно включить на всех сайтах».

= Можно ли отключить для модераторов или авторов? =  
Да, в настройках есть галочка «Пропуск модераторов».

== Технические детали ==

* Добавляемое поле: `<input type="text" name="csrf" style="display:none">`
* JS заполняет его: `document.getElementsByName('csrf')[0].value = Math.floor(Date.now()/1000)`
* Проверка выполняется на хуке `pre_comment_on_post`
* При несоответствии возвращается `wp_die('Service Unavailable', 'Service Unavailable', 503)`
* Поля и код полностью настраиваются через админку
* Код не влияет на другие формы или плагины

== Безопасность и производительность ==

* Не использует внешние сервисы (работает полностью локально)
* Не хранит персональные данные пользователей
* Не замедляет загрузку страницы
* Полностью совместим с кеширующими плагинами

== Источник идеи ==

Основная идея проверки по времени чтения взята из статьи на сайте  
[reset.name](https://reset.name), где автор предложил использовать скрытое поле с временной меткой и проверку задержки отправки комментария.

== Автор ==

**Scarabaeus Soft** — разработка сайтов, чат-ботов и CRM  
🌐 [https://scarabaeussoft.ru](https://scarabaeussoft.ru)

== Лицензия ==

Этот плагин распространяется под лицензией **GPLv2 или более поздней версии**.  
Вы можете свободно использовать, изменять и распространять его при сохранении условий лицензии.
