2010-03-04 17 views
18

En este sitio, si hace demasiados clics o publica comentarios demasiado rápido o algo así, se le redirige a la pantalla "¿Es usted un humano?". ¿Alguien sabe cómo hacer algo similar?Cómo implementar la función "¿Eres humano?" De Stack Overflow

+18

Hola gente, esto no pertenece a Meta! Esto se trata de verificar que alguien es humano. Simplemente están usando SO como ejemplo – Earlz

+1

@Earlz: Eso no es lo que decía la pregunta original, especialmente dado el título de la pregunta. –

+2

Este tipo de característica se conoce como molesto. – JonH

Respuesta

3

aquí es un muy buen Captcha control para asp.net que primero de todo lo que necesita

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

continuación, puede utilizar junto con la idea de que trate de encontrar los ataques DOS

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

estar al tanto de un error en este código en la línea if (context.Request.Browser.Crawler) return false ;, debe devolver true o eliminarlo por completo.

y hágala su compinación para los clics o los envíos.

Si un usuario hace demasiados clics en un período de tiempo, o muchos envíos, entonces simplemente abra el control de capthaControl, y si los clics son demasiados, entonces pruebe los dos attact. De esta forma tienes 2 soluciones en una, Dos attact previene, con captcha al mismo tiempo.

He hecho algo parecido a mí mismo, pero he cambiado el código fuente de ambos, mucho para satisfacer mis necesidades.

Un enlace más interesante para un código diferente para el ataque dos.

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

Esperanza ayuda esto.

1

acaba de comprobar el número de golpe/minuto que se obtiene de una IP específica o sesión o lo que sea y decidir cuáles son sus umbral preferido y su buena para ir

+0

Solo asegúrate de que el período de tiempo sea correcto, de lo contrario los usuarios rápidos se sentirán muy molestos y podrías ahuyentar a algunos de los usuarios más útiles. –

+0

O usuarios de una organización que usa un único proxy para acceder a Internet – Kirschstein

3
+0

Es evidente que no sabe de qué se trata esta pregunta. – Omar

+1

Ahora lo hago. Creo. :-) Pero lo más importante, otros parecen hacer y producir respuestas en consecuencia. –

2

En una conjetura ...

Escriba un controlador HTTP que registre las solicitudes y las almacene en sesión.

Cuando entra una nueva solicitud, verifique cuántas solicitudes se almacenan (y caducan las anteriores).

Si la cantidad de solicitudes en los últimos minutos supera un umbral determinado, redirija al usuario.

Si está haciendo esto en formularios web ASP.NET, puede hacer esta comprobación en la página maestra del sitio (o escribir un IHttpHandler).

Si está utilizando un marco MVC, podría escribir un controlador base que realice esta comprobación para cada acción.

Con rieles, puede escribir un filtro before_request.

Con MVC asp.net, se podría escribir un atributo [ActionFilterAttribute]

-2

También me gustaría comprobar el encabezado de agente de usuario de la solicitud - si no se ve como un popular navegador (o está vacío) y luego tirar el "¿eres un humano?" página.

+1

¿Por qué ser cruel con aquellos de nosotros que navegamos con enlaces?!? –

+0

Los enlaces son linx (¿el navegador basado en texto?) Si es así, estoy bastante seguro de que envía un encabezado de agente de usuario adecuado, por lo que no se verán afectados. Estoy hablando de encabezados como GoogleBot, MSNSpider, etc. –

+2

Esta es una muy mala idea, es lo que lleva a cosas como aplicaciones que requieren IE6 porque IE7 no era un navegador válido en ese momento, o lo que PayPal hace si intentas comprar algo usando un navegador móvil. –

10

es casi ciertamente una heurística que intenta "adivinar" que un usuario es algún tipo de proceso automatizado, en lugar de una persona, por ejemplo:

  • Más de solicitudes "x" para hacer la misma cosa en una fila
  • más de las acciones "x" en un período de "y" de tiempo

Normalmente, la "x" y los valores de "y" se formularía a ser los que sería poco probable que un " persona real "para hacer, como:

  • Edición de la misma respuesta 5 veces seguidas
  • downvoting 10 preguntas dentro de 1 minuto

Una vez que tenga su conjunto de reglas, a continuación, puede aplicar un código que les comprueba al comienzo de cada solicitud, ya sea en un método que se llama en Page_Load, algo en su página maestra, algo en la tubería asp.net, ¡eso es lo fácil! ;)

+0

¿Cómo publicó una respuesta en una pregunta migrada? – Earlz

+0

@Earlz, recuperé mi respuesta. Supongo que el proceso de migración lo eliminó. Como no estaba de acuerdo con la migración, y el sitio me dio un enlace de "recuperación", "protesté" contra la migración al anular mi respuesta. – Rob

+0

Eso es casi seguro un error/comportamiento involuntario .. – Earlz

2

Debe tener una sesión para rastrear la actividad del usuario.

En la sesión se puede tener contador para comentar y publicar como:

(pseudo código en lugar de C#, lo siento :)

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"); 

donde son sobre-que-human.htm página podrá tener recaptcha, ya que tienen aquí en StcakOverflow.com

ver también: http://blog.stackoverflow.com/2009/07/are-you-a-human-being/

Cuestiones relacionadas