Как проверить в модели / контроллере, содержит ли ввод формы HTML (спам)? Regex? - PullRequest
1 голос
/ 16 октября 2011

Мое приложение получает около 1000 записей спама в день. Контент нигде не связан, поэтому работа ботов совершенно бесполезна.

Но это портит наши метрики и порождает тонны ошибок кодирования (бот отправляет китайские иероглифы).

Поля - это простые текстовые поля и поля ввода.

Я бы хотел запретить любому пользователю, который вводит html в поле и отправляет его.

Я могу легко справиться с запретом (выйти из системы, положить логическое значение в таблицу пользователей).

Но я не уверен, как проверить, содержат ли параметры html и где самое чистое место для проверки это ... (до фильтра? Проверка модели?).

Ответы [ 2 ]

1 голос
/ 16 октября 2011

вы всегда можете использовать регулярное выражение для фильтрации html из ввода , например, удалите что-нибудь между <и>.

input_string.gsub(/<.*>/m, '')   # make sure to use multi-line mode for the RegExp

или проверьте, соответствует ли это: (если вы хотите определить, был ли HTML во входных данных)

input_string =~ /<.*>/m

Вы могли бы поместить это в контроллер , чтобы он очищал ввод сразу после его публикации, или вы могли бы поместить это в проверку, чтобы он не сохранялся при сохранении. Возможно, лучше в контроллер.

Но это только покажет вас - например, эти боты могут продолжать публиковать формы ... которые расходуют ресурсы на вашем конце ..

Вот почему я бы также рекомендовал использовать re-captcha от Google , который действительно легко добавить в Rails.

С помощью капчи вы будете уверены, что только люди могут публиковать на вашем сайте.

http://www.google.com/recaptcha

Вы можете посмотреть пример кода для интеграции ReCaptcha в проект Rails здесь:

https://github.com/tilo/mail_form_example_with_recaptcha

0 голосов
/ 16 октября 2011

Если нет причин для <или <code>&lt;, просто проверьте угловые скобки.Если является законной причиной, это будет немного более раздражающим, но, вероятно, все еще ограничено проверкой угловых скобок и любых тегов, которые вы пытаетесь избежать.

...