Как реализовать функцию Stack Overflow «ты человек»? - PullRequest
18 голосов
/ 04 марта 2010

На этом сайте, если вы делаете слишком много кликов или слишком быстро публикуете комментарии, или что-то в этом роде, вы будете перенаправлены на экран «Вы человек». Кто-нибудь знает, как сделать что-то подобное?

Ответы [ 7 ]

10 голосов
/ 04 марта 2010

Это почти наверняка эвристика, которая пытается «угадать», что пользователь - это какая-то форма автоматизированного процесса, а не человек, например:

  • Более "x" запросов сделать одно и то же подряд
  • Более "x" действий за период "y"

Обычно значения "x" и "y" формулируются так, что для "реального человека" это маловероятно, например:

  • Редактирование одного и того же ответа 5 раз подряд
  • Понижение 10 вопросов в течение 1 минуты

После того как вы получили набор правил, вы можете реализовать некоторый код, который проверяет их в начале каждого запроса, будь то метод, который вызывается в Page_Load, что-то на вашей главной странице, что-то в asp.net. трубопровод, это легко! ;)

3 голосов
/ 18 марта 2010

Вот очень хороший Контроль капчи для asp.net, который прежде всего вам нужен

http://www.codeproject.com/KB/custom-controls/CaptchaControl.aspx

Тогда вы можете использовать его вместе с этой идеей, которая пытается найти Дос атак

http://weblogs.asp.net/omarzabir/archive/2007/10/16/prevent-denial-of-service-dos-attacks-in-your-web-application.aspx

Остерегайтесь ошибки в этом коде в строке, если (context.Request.Browser.Crawler) возвращает false; она должна возвращать true или полностью удалить ее.

и сделайте это своей компоновкой за клики или отправку.

Если пользователь делает слишком много кликов за определенный промежуток времени или много отправляет, тогда вы просто открываете capthaControl, и если кликов слишком много, тогда срабатывает DOS-атака. Таким образом, у вас есть 2 решения в одном, Dos attact предотвращать, с капчей одновременно.

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

Еще одна интересная ссылка для другого кода для DOS-атаки.

http://madskristensen.net/post/Block-DoS-attacks-easily-in-ASPNET.aspx

Надеюсь, это поможет вам.

3 голосов
/ 04 марта 2010
2 голосов
/ 18 марта 2010

У вас должен быть сеанс для отслеживания активности пользователя.

В сессии вы можете иметь счетчик для комментирования и публикации, например:

(псевдокод вместо C #, извините:)

if (post_event) {

    posts_during_1_minute_interval++;

    if (time_now-reference_time > 1_minute) {
    reference_time = time_now;
    posts_during_1_minute_interval=0;
    }
}
...
if (posts_during_1_minute_interval > 10) redirect("/are-you-human.htm");

где на странице are-you-human.htm вы можете иметь recaptcha , как здесь, на StcakOverflow.com

см. Также: http://blog.stackoverflow.com/2009/07/are-you-a-human-being/

2 голосов
/ 04 марта 2010

На догадку ...

Напишите обработчик HTTP, который записывает запросы и сохраняет их в сеансе.

Когда поступает новый запрос, проверьте, сколько запросов сохранено (и истекают старые).

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

Если вы делаете это в веб-формах ASP.NET, вы можете выполнить эту проверку на главной странице сайта (или написать IHttpHandler).

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

С помощью направляющих можно написать фильтр before_request.

Используя asp.net MVC, вы можете написать [ActionFilterAttribute] атрибут

1 голос
/ 04 марта 2010

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

0 голосов
/ 04 марта 2010

Я бы также проверил заголовок пользовательского агента запроса - если он не похож на популярный браузер (или пустой), тогда выведите «вы человек?» стр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...