Подтвердить что ты не робот

Как реализовать переполнение стека "вы человеческая"?

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

4b9b3361

Ответ 1

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

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

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

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

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

и создайте его для кликов или отправит.

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

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

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

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

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

Ответ 2

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

  • Больше, чем "x" запросы сделать то же самое в строке
  • Больше чем "x" действий в "y" период времени

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

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

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

Ответ 4

Угадай...

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

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

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

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

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

С рельсами вы можете написать фильтр before_request.

С помощью asp.net MVC вы можете написать атрибут [ActionFilterAttribute]

Ответ 5

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

В сеансе у вас может быть счетчик комментариев и сообщений вроде:

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

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/

Ответ 6

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

Ответ 7

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