2013-12-19 9 views
0

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

У меня есть страница веб-сайта C# ASP.net. Там есть форма с кнопкой отправки. весь код находится в коде за страницей.

Мы не получаем спама, отправленного через форму, потому что у меня есть элемент захвата. Тем не менее - спам-боты просматривают страницу, получают имена полей и публикуют прямо на странице.

Я знаю только это, потому что я установил Application_Error, чтобы сообщить о любых ошибках по электронной почте мне (в global.asax).

Я попытался изменить имена моих полей, но они просто подбирают новые поля.

Я положил <httpRuntime requestValidationMode="2.0" /> в web.config.

В моей странице, я EnableEventValidation="False"

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

У меня заканчиваются идеи здесь! Я блокирую IP-диапазоны каждые 10 минут на нашем брандмауэре. Я не могу продолжать это делать!

Спасибо за помощь!

+2

не должно быть ValidateRequest вместо EnableEventValidation на вашей странице? – shriek

ответ

2

Это то, что вы делаете: игнорировать его. Блокировка IP-адресов просто заставит вас бегать по кругу и, в конечном счете, пустая трата времени.

Если спам на самом деле не отправлен, у вас действительно нет проблем. Структура делает именно то, что она должна делать.

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


Если вы действительно хотите просто ошибки, чтобы уйти, то вам нужно сделать следующее:

  1. Набор EnableEventValidation="true"
  2. Набор ValidateRequest="false"

EnableEventValidate говорит .net, чтобы увидеть если сообщение появилось после нажатия на элемент управления, который он отобрал. Это должно помочь предотвратить прямые сообщения.

ValidateRequest сообщает .net, следует ли тестировать входы для html и других «опасных» символов. Отключение этого параметра остановит ваше сообщение об ошибке.


Если вы просто пытаетесь заставить спамеров прекратить поражать ваш сайт: закройте сайт. Поскольку это ТОЛЬКО надежный способ удержать спамера от него.

+1

Согласовано. Вы никогда не сможете полностью остановить спамеров, потому что некоторые из них даже не боты. Я слышал сообщения о фактических «спам-магазинах» в развивающихся странах, где людям платят пенни в день за спам-сайты. Это почти невозможно победить. – SouthShoreAK

1

Вы пробовали honeypot Поле?

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

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

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

FWIW, я использовал этот подход лично с достойным успехом.


Однако, если ASP отвергает представления и вызывает ошибку, это другая проблема. Нужны ли вам законные пользователи для отправки разметки в поле? Если вы этого не сделаете, система действительно делает правильные вещи, защищая ваш сайт. В этом случае я просто проверил бы эту конкретную ошибку в вашем методе Application_Error и проигнорировал бы ее.