Любая контактная форма притягивает спам. Обычное решение — CAPTCHA крупного провайдера. Она отнимает у посетителей время, часто устанавливает cookies и загружает скрипты с серверов за рубежом — по законодательству Грузии это может быть передачей данных, требующей разрешения (подробнее).
Мы защищаем наши формы иначе: с помощью ALTCHA, метода proof-of-work, на собственном сервере.
Вычислительная задача вместо головоломки
При загрузке формы браузер получает небольшую вычислительную задачу и решает её в фоне, пока посетитель заполняет форму. Никому не нужно выбирать светофоры или вводить искажённые буквы. Для одного сообщения затраты ничтожны; тот, кто рассылает тысячи сообщений, платит их тысячи раз. Проверка решения почти не нагружает сервер.
Наш сервис ALTCHA
На основе открытого формата ALTCHA мы создали собственный сервис и опубликовали его с открытым исходным кодом. Он защищает любое количество сайтов одновременно и управляется через небольшой веб-интерфейс:
- Подписанные задачи: каждая задача подписана (HMAC), привязана к сайту, для которого выдана, и действует ровно один раз — в том числе после перезапусков.
- Формы без бэкенда: сервис отправляет проверенную заявку по почте получателю сайта, поэтому статическому сайту не нужен собственный серверный код.
- Подписки на рассылку: проверенные подписки попадают в список рассылки в Notifuse, который отправляет письмо для подтверждения (double opt-in).
- Собственный бэкенд: приложения со своим бэкендом проверяют решение через интерфейс сервиса.
- Многоуровневая защита: ограничение частоты запросов для каждого клиента и сайта, поле-ловушка (honeypot) и строгая проверка того, откуда пришёл запрос.
- Конфиденциальность: без cookies, без состояния в браузере, без загрузки файлов.
- Эксплуатация: статистика в веб-интерфейсе, метрики Prometheus, проверка работоспособности и все данные в одном файле SQLite.
Виджет тоже поставляет сам сервис — на английском или со всеми его 68 языками.
Две строки на странице
<script type="module" src="https://altcha.example.com/widget.js"></script>
<form action="https://altcha.example.com/submit" method="post">
<input name="email" type="email" required>
<textarea name="message" required></textarea>
<altcha-widget challenge="https://altcha.example.com/challenge"></altcha-widget>
<button type="submit">Send</button>
</form>
Никакой сборки и никаких пакетов: те же строки работают в написанном вручную HTML, в Astro и в Angular.
В работе
Контактные формы и подписки на рассылку на esn.ge, epicsoft.one и на наших страницах продажи доменов работают через этот сервис.
Исходный код — на GitLab и GitHub, образ — на Docker Hub, по лицензии MIT. Проект не связан с проектом ALTCHA; он использует его виджет и библиотеку под лицензией MIT.
Будем рады настроить сервис и для вашего сайта.