Для фильтрации вводимой пользователем информации в формах и форумах предусмотрен системный справочник blacklist.dat. Он представляет собой перечень запрещенных значений, которые не могут присутствовать в определенных полях форм ввода.
Формат таблицы с черным списком очень простой: каждая запись имеет два поля с именами field_name и field_value. Например:
field_name::email::field_value::vandal@mail.ru
field_name::*::field_value::нехорошие слова
field_name::*::field_value::нехорошие\s*слова
В третьей строке приведен пример простейшего регулярного выражения. Вы можете использовать любые регулярные выражения в формате языка Perl для фильтрации нежелательных значений.
Когда такой справочник находится на сайте, то если в поле формы email при отправке будет введено значение vandal@mail.ru - то система проигнорирует данные, а на странице будет выведена какая-то системная, ничего не значащая фраза. Отсутствие диагностических сообщений не даст возможности злоумышленнику осознать свою неудачу, что осложнит ему дальнейшую деятельность. Вторая же строка позволит фильтровать формы, в которых встречается фраза "нехорошие слова" в любом регистре и в любом поле, на что указывает системное значение "*".
Необходимо помнить, что поскольку система сохраняет значение IP адреса пользователя в служебном поле ip любого справочника, пополняемого через Form или Forum, то это дает возможность применять блокирование нежелательных сообщений также и по ip адресу.
Пример уже настроенной сущности и подключенного в админзоне и к форме справочника с "черным списком" можно найти в "пакете для быстрого развертывания сервиса авторизации" в закрытой зоне.
Примечания:
- До версии 4.46 макрос Forum использовал blacklist.dat всегда, а Form - только если в ключе blacklist ему передавалось имя таблицы. Начиная с 4.46 в Form этот ключ упразднен и имя файла с черным списком зафиксировано на blacklist.dat.
- "Звездочка" работает только с версии 4.46, в более ранних релизах требуется прописывать все поля в таблице blacklist.dat по одному, если требуется поиск по всем полям.