Но, похоже, спам-боты создают учётные записи со значением в этом выпадающем списке, которое невозможно выбрать. Это почти превращает поле в ловушку для спамеров (honeypot), позволяя определить, какая учётная запись создана не человеком. Однако это может также быть проблемой безопасности?
Это происходит потому, что боты не используют форму регистрации на фронтенде, где есть валидаторы. Такие спам-боты отправляют автоматизированные POST-запросы к конечной точке API регистрации. Также, когда поля необязательные, валидация на бэкенде иногда недостаточно строгая, и значение из payload сохраняется в базу данных.
Я не уверен, в чём заключается основное исправление, но вам, вероятно, также понадобятся дополнительные настройки или инструменты для борьбы со спамом. (Я использую AI-спам-бота на своём публичном форуме, и он работает отлично; у меня тоже есть необязательные поля при регистрации.)
Вы можете найти всех пользователей на своём форуме с помощью Data Explorer — думаю, это сработает, хотя я не тестировал (предполагая, что пользовательское поле называется user_field_1):
SELECT user_id, value
FROM user_custom_fields
WHERE name = 'user_field_1'
AND value NOT IN ('Bro', 'Sis', '')
Если вы недавно изменили это поле с текстового ввода на выпадающий список, это также может объяснить наличие некоторых ботовых аккаунтов с некорректными значениями в этом поле.
@Lilly прав. Здесь недостаточно недоверия на бэкенде.
Поскольку этот вопрос возник, я решил проверить, влияет ли это также на страницу профиля, и нет. Мы правильно экранируем значения, когда пользователи обновляют свой профиль. Это сделало относительно простым копирование этой логики экранирования также на конечную точку регистрации. PR здесь:
Я не думаю, что технически это так. Да, пользователи могут вводить произвольные значения, но перед отображением в любом месте всё равно применяется экранирование (так что вектора XSS нет). И ограничение длины уже правильно применялось в конечной точке регистрации (так что вектора DoS нет).