Evitar que los robots maliciosos publiquen spam

15

Recuerdo un sitio cerrado debido al mal uso y me pregunto si los bots tienen una parte de él. Si el bot está PUBLICANDO algo en mi sitio, ¿de qué maneras puedo combatirlo? Estaba pensando en configurar algunas cookies y cambiar las cookies a través de JavaScript + marca de tiempo y firmar (por lo que las cookies de ayer no se pueden usar hoy y la próxima semana).

Estoy seguro de que la mayoría de las personas / bots simplemente usarían otro sitio en lugar de habilitar JavaScript en su bot.

¿Que más puedo hacer? Estoy pensando en el límite diario de POST y en un honeypot para bots genéricos que solo publican spam al azar.

John Conde
fuente

Respuestas:

13

Podrías hacer varias cosas, incluyendo:

  1. Poner un campo falso que solo los bots verán. Luego, si ese campo se envía con el resto del formulario, puede ignorarlo (y prohibirlo si lo desea). También puedes atrapar a los robots malos que siguen un enlace oculto .

  2. Use un CAPTCHA como reCAPTCHA

  3. Use un campo que requiera que el usuario responda una pregunta como qué es 5 + 3. Cualquier ser humano puede responderla, pero un bot no sabrá qué hacer, ya que es un campo que se llena automáticamente en función de los nombres de campo. Por lo tanto, ese campo será incorrecto o faltante, en cuyo caso el envío será rechazado.

  4. Use un token y póngalo en una sesión y también agréguelo al formulario. Si el token no se envía con el formulario o no coincide, entonces está automatizado y puede ignorarse.

  5. Busque envíos repetidos desde la misma dirección IP. Si su formulario no recibe demasiadas solicitudes, pero de repente es probable que esté siendo golpeado por un bot y debería considerar bloquear temporalmente la dirección IP.

  6. Usa Askimet . Es excelente para identificar el spam.

John Conde
fuente
55
+1: e, idealmente, implementará una combinación de las sugerencias enumeradas anteriormente de una manera fácil de usar (por ejemplo, si un usuario tiene Javascript deshabilitado y, por lo tanto, falla la autenticación basada en Javascript, presente al usuario un CAPTCHA)
danlefree
6

John Conde describe muchos buenos enfoques. El problema al elegir una técnica anti-bot / anti-spam es equilibrar la efectividad y la conveniencia. Sería realmente incómodo tener que completar un CAPTCHA cada vez que desee publicar un comentario o mensaje, pero si solo requiere un CAPTCHA al registrarse, a veces eso no disuade a los spammers.

Algunas de las técnicas pasivas son una buena alternativa, ya que no requieren ninguna acción humana. El problema es que los bots se están volviendo cada vez más sofisticados, y si los bots pueden resolver CAPTCHA, entonces ciertamente pueden procesar JS y CSS. Por lo tanto, deberá ejercer un poco de ingenio, como usar CSS menos obvio para ocultar sus campos de trampa de bot.

Pero en función de su pregunta, creo que probablemente se dé cuenta de que el objetivo no es crear un sitio a prueba de bots, sino simplemente crear un elemento de disuasión suficiente para que los usuarios de bot simplemente elijan otros objetivos más fáciles. Entonces, lo que se requiere aquí variará de un sitio a otro, y probablemente requerirá algunas pruebas de prueba y error. Primero probaría las técnicas menos molestas.

Por último, otra forma de eliminar el correo no deseado de su sitio es utilizar la moderación entre pares para eliminar cualquier comentario enviado por bot o spam enviado manualmente que se deslice.

Lèse majesté
fuente
¿Puedes explicar la idea de moderación entre pares? ¿Eso implica que los usuarios normales obtengan derechos de moderador o cómo debo imaginarlo?
0xC0000022L
@STATUS_ACCESS_DENIED: perdón por la respuesta tardía, pero la moderación entre pares es básicamente algo así como digg, slashdot, stackexchange, etc. donde los usuarios pueden moderar el contenido en el sitio dando algún tipo de retroalimentación positiva o negativa. Por lo tanto, puede automatizar el sistema de modo que, cuando suficientes usuarios den comentarios negativos sobre un contenido, se oculte o marque automáticamente para su revisión. En sitios como StackExchange, los usuarios también pueden marcar comentarios / respuestas como correo no deseado, lo que llama la atención de los administradores. Esto reduce el trabajo que los administradores pagados tienen que hacer.
Lèse majesté
Gracias. Esto, por supuesto, solo funcionaría en sitios de alto tráfico donde se pueda molestar a suficientes usuarios para dar su opinión;)
0xC0000022L
1

Como John Conde mencionó en su # 1) y usted mencionó, honeypot puede funcionar muy bien para la mayoría de los casos y la mayoría de los sitios web. Si alguna vez lo hace un bot, puede hacer uno de los otros métodos que John también mencionó. Pero, sinceramente, si su sitio tiene un tráfico bajo o promedio, esto debería ser el truco.

Ejemplo, uno de mis favoritos:

<form action="/process-form">
<input name="email" placeholder="Enter Your Email">
<input name="email_address" placeholder="Enter Your Email" style="display:none;">
<input type="submit" value="Submit"></form>

Ahora, cuando se envía el formulario, un porcentaje extremadamente alto de bots completará "email" y "email_address", pero los humanos solo completarán el que ven, "email" y no "email_address". Entonces, en su código `/ process-form 'solo tiene que verificar si email_address (no) está vacío para la verificación.

Simple y efectivo.

Anthony Hatzopoulos
fuente