Предотвратить спам формы с сеансом - PullRequest
2 голосов
/ 05 мая 2009

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

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

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

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

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

Большое спасибо, Jonathan

Ответы [ 4 ]

1 голос
/ 05 мая 2009

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

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

0 голосов
/ 05 мая 2009

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

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

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

0 голосов
/ 05 мая 2009

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

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

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

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

0 голосов
/ 05 мая 2009

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

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

...