Небольшой виджет сбоку на блоге показывал, сколько человек читают сайт в реальном времени, и позволял оставить короткое сообщение для всех присутствующих. Никакой истории, аккаунтов и профилей — сообщение появлялось и через пару секунд исчезало. Эту безобидную деталь использовали против автора, чтобы очернить его и добиться цензуры статьи.
Он написал статью о том, почему не рекомендует Tailwind CSS, и поделился ею на Hacker News. Через несколько минут поле для сообщений заполнилось оскорблениями и провокациями, кто-то даже пытался выдать себя за автора.
Сайт устроен так: это SPA, сервер рендерит HTML и отправляет в браузер через WebSockets, а автор использует собственный фреймворк Django LiveView. Поскольку каждый посетитель держит открытое соединение, число подключений известно автоматически, а для передачи сообщений используется тот же канал. Стоят простые ограничения: максимум символов, автоудаление через несколько секунд и минимальный интервал между сообщениями.
Волна атак длилась целый день. Сообщения были разные: от откровенного расизма и смертельных угроз некому президенту до спама и попыток подсунуть ссылки. Злоумышленники засоряли экран длинными строками из # и @, особенно на мобильных, а также притворялись автором. Пытались внедрить JavaScript — но сервер экранирует HTML перед отправкой, поэтому <script> доходил до читателей как обычный текст. Были и просто сообщения с презрением к блогу.
Автор добавил фильтр неподобающих слов и сильно сократил максимальную длину сообщения. Но главной мерой стало терпение: не отвечать троллям, ведь они ждут реакции. Он усвоил: каждый ввод нужно считать враждебным, пока не доказано обратное. Модерация в реальном времени — не то же самое, что проверка комментариев: здесь нет времени на раздумья, автоматический фильтр должен срабатывать за миллисекунды. А эфемерность сообщений — плюс: без истории и профилей у троллей меньше стимула стараться.
Несмотря на всё, автор не жалеет о виджете. Большинство посетителей пишут приветствия, и видеть, как десятки незнакомцев одновременно читают страницу, всё ещё немного волшебно. Он также предлагает подписаться на рассылку — отправить письмо на newsletter@andros.dev с темой SUBSCRIBE.