Предотвратить спам в форме с помощью сеанса

Я уже прочитал большинство вопросов о методах предотвращения спама в форме, но ни один из них, похоже, не предлагает использовать сеанс браузера.

У нас есть форма, которая отправляет электронное письмо на указанный адрес электронной почты, и нам не понравилась идея использовать «капчи» или Javascript, поскольку мы хотели, чтобы путь пользователя был простым и доступным для тех, у кого нет Javascript.

Мы хотели бы использовать объект сеанса, чтобы предотвратить спам в форме. Наше веб-приложение разработано на Weblogic Server 10 с использованием Struts.

Решение состоит в том, что когда форма загружается, она устанавливает переменную в объекте сеанса. После того, как вы нажмете «Отправить», мы проверим, есть ли сеанс для переменной. Без переменной, перенаправление на форму. Переменная существует, отправьте электронное письмо.

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

Большое спасибо, Джонатан


person Jonathan    schedule 05.05.2009    source источник


Ответы (4)


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

Например, форму можно легко загрузить и отправить с сохранением файлов cookie с помощью инструмента командной строки, такого как cURL. Затем это можно многократно запускать из сценария.

person Jacob Mattison    schedule 05.05.2009

Объекты сеанса могут, в зависимости от реализации, быть относительно тяжелыми с точки зрения использования ресурсов, а также несколько медленными. Кроме того, спамеры, если они понимают, как вы их блокируете, могут просто начинать новый сеанс каждый раз, когда они попадают в форму, не отправляя обратно cookie сеанса.

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

person cdeszaq    schedule 05.05.2009

Спасибо за ответ cdeszaq, но я не уверен, что вы неправильно поняли мой вопрос.

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

Если спамер не отправляет обратно файл cookie сеанса, он не сможет рассылать спам в моей форме, поскольку он не перешел на страницу моей формы, которая создает правильный сеанс.

Я согласен с тем, что использование объекта сеанса создаст дополнительный ресурс. Наша реализация просто (с использованием JSP) вызовет session.setAttribute("formLoaded", true);, а в моем действии Struts я просто буду использовать session.getAttribute("formLoaded"); для проверки.

person Jonathan    schedule 05.05.2009
comment
Верно, тогда ту же систему можно использовать с настройкой загрузки двух страниц для спама ... нажмите форму, чтобы получить сеанс, а затем отправить спам. Повторите это, и у вас будет простой способ рассыпать спам по этому методу. - person cdeszaq; 05.05.2009

Интересно, может ли это сработать:

  1. Каждый раз, когда вы визуализируете страницу / форму, создайте случайный фрагмент текста
  2. Поместите этот текст в сеанс
  3. Включите этот текст как скрытое поле в форму
  4. Пользователь отправляет форму
  5. Действие сравнивает скрытый текст со значением в сеансе - если есть совпадение, отправьте электронное письмо

Поскольку хакер не сможет ввести в сеанс случайное значение, он не сможет рассылать спам. Правильно?

person Glen    schedule 05.05.2009
comment
Они могли просто отправить форму, заполнив спам по своему усмотрению и включив все скрытые значения полей. - person cdeszaq; 05.05.2009
comment
Я думал, что исходная проблема заключалась в следующем: программа для рассылки спама могла выполнить действие без использования формы. В моем сценарии это невозможно; форма должна быть отображена первой, а правильная случайная строка должна быть помещена в последующую отправку действия. Упомянутый вами подход с загрузкой двух страниц обойдет это, если эта случайная строка будет удалена со страницы формы. Но, возможно, этого было бы достаточно, как и метода оранжевой капчи для первоначального задающего вопрос. - person Glen; 05.05.2009
comment
Если проблема заключается в отправке без использования формы, то исходное решение постера (полагающееся на файл cookie сеанса) будет работать, как и ваше. Я не знаю, насколько распространено программное обеспечение для рассылки спама (я предполагаю, что такое бывает), чтобы сначала загрузить форму, но, учитывая, что это было бы тривиально реализовать, я бы предположил, что решение, которое зависит от НЕ загрузки первая форма не будет очень полезной. (Оранжевая капча работает, потому что спамеру придется нацелить программу на конкретный сайт. В этом случае в этом нет необходимости.) - person Jacob Mattison; 05.05.2009