php - tecnicas - se metieron a robar a mi casa que puedo hacer
¿Cómo protejo mi foro contra el spam? (14)
Tengo un foro en un sitio web que domino, que recibe una dosis diaria de pron spam. Actualmente elimino el correo no deseado y bloqueo el IP. Pero esto no funciona muy bien. La lista de direcciones IP bloqueadas está creciendo rápidamente, pero también lo está la cantidad de mensajes no deseados en el foro.
El foro es completamente mi propio código. Está construido en PHP y MySQL.
¿Cuáles son algunas formas concretas de detener el correo no deseado?
Editar Lo que olvidé mencionar es que el foro debe estar abierto para que los usuarios no registrados publiquen. Un poco como un comentario de blog
Captcha es definitivamente el método más fácil: prueba KittenAuth si quieres algo a prueba de bots (aunque esta vez obtuve pandas)
En mi experiencia, las mejores defensas fáciles provienen de simplemente hacer algo "no estándar". Si hace que su sitio no sea estándar, esto hace que cualquier correo no deseado automático tenga que estar codificado específicamente para su sitio, lo que (sin ofender) probablemente no valga la pena. Tenga en cuenta que si el spam proviene de spammers humanos, realmente no hay nada que pueda hacer que tampoco detenga los carteles legítimos. Entonces, el objetivo es encontrar una solución que elimine cualquier publicación "estándar", es decir, "complete todo el formulario y envíe el envío".
Un par de ejemplos que vienen a la mente de cosas que podrías probar:
- Tenga un campo de formulario oculto con un nombre que suena como algo que un spammer quisiera completar, como "sitio web" o "página de inicio" o algo por el estilo. Si el campo de formulario se completa, deseche el mensaje en lugar de publicarlo, ya que se trata de un bot que completa automáticamente el formulario completo, incluso campos invisibles.
- No tiene que usar un captcha "real", sino incluso algo simple como "Ingrese la siguiente palabra al revés: <palabra al azar al revés>" o "¿Cuál es el nombre de dominio de este sitio web?". Es fácil de hacer para un humano, pero requeriría un robot bastante complejo para averiguar qué rellenar.
En una aplicación de libro de visitas que escribí, implementé dos funciones que evitan la mayor parte del spam:
No permita que POST sea la primera solicitud en una sesión
Requerir un HTTP Refer (r) er válido al publicar
Incluya un CAPTCHA que siempre sea "naranja".
Los spams pueden ser por bots o humanos: los bots son más propensos.
Para detener los bots, ingrese un campo oculto poblado por Javascript: hay un 99.5% de posibilidades de que un bot estándar y estúpido que no está personalizado para su sitio no lo complete.
Si no lo completan correctamente, déles un mensaje de que se requiere Javascript o algo, y deles la oportunidad de publicar de otra manera (por ejemplo, con un captcha o registro). De esta manera, los usuarios anónimos que no son robots pueden (en su mayoría) seguir publicando sin problemas, y la mayoría de los spambots (que no se han adaptado a su sitio específico) no lo harán.
No se moleste en poner en lista negra las direcciones IP o usar listas negras de terceros, que generarán falsos positivos. Casi todos los bots usan las mismas direcciones IP que (algunos) usuarios legítimos.
Otro truco es poner en un campo de texto con un nombre de sonido plausible, que se hace difícil de ver con CSS: cualquiera que llene este campo con cualquier cosa se considera un bot.
No hay una respuesta única, ya que el Spam es realmente una cuestión de economía: cuánto le vale a alguien poner sus cosas en la web. Ahí, sin embargo, algunas soluciones que parecen bastante buenas
- Recaptcha
- Use CCS para crear un campo invisible que completen los robots
- Cree un campo oculto específico del tiempo en su formulario para que el robot no pueda usar la misma forma una y otra vez.
No permita que nadie publique hasta que responda a un correo electrónico enviado a su dirección de correo electrónico registrada. Verá muchos foros y listas de correo que generan una dirección de correo electrónico única o url web que se envía a la dirección de correo electrónico del nuevo usuario y deben responder al correo electrónico o hacer clic en el enlace para finalizar su registro.
Puedes usar un captcha, hay algunos buenos scripts como PHPCaptcha o usar un servicio de control de spam, como Akismet , tienen una API de PHP .
Una forma de saber qué funciona es usar JavaScript antes de enviar el formulario. Por ejemplo, para cambiar el método de GET a POST. ;) Los Spambots son pésimos en la ejecución de JavaScript. Por supuesto, esto también significa que las personas que no tengan Javascript no podrán usar su sitio ... si usted se preocupa por ellos, eso sí. ;) (Nota: yo no)
Quiero decir que en la mayoría de los casos, un CAPTCHA es suficiente para evitar SPAMers. Pero use uno fuerte, como http://www.captcha.net/ .
Recuerde que los SPAMers no quieren dedicar mucho tiempo a tratar con un sitio en particular (excepto sitios de mucho tráfico), sino que usan una herramienta para publicar anuncios publicitarios en muchos sitios. Así que haz que tu FORMA sea un poco inusual (por ejemplo, dale al usuario una imagen que dice ''1.5 + 2.4 ='' ''y deja que los usuarios respondan; esto bloqueará la mayoría de las herramientas de correo no deseado :))
Soluciones avanzadas:
- Akismet
- Defensio
- Sblam! (clon de código abierto del anterior)
Puedes probar tu suerte con una forma no estándar:
- campos que deben permanecer vacíos ocultos con CSS
- campos con nombres engañosos, por ejemplo,
<input name=email>
para algo que no es un correo electrónico.
Para mí CAPTCHA es como renunciar a los spammers y permitirles dañar tu foro de todos modos, excepto que en lugar de dañar el spam, obtienes usabilidad y daño de accesibilidad.
Algo que he encontrado que es sorprendentemente efectivo: no permitir comentarios que contengan demasiadas URL (más que, por ejemplo, 5). Desde que hice eso, no recibí ningún comentario spam.
Editar: Desde que escribí lo anterior, tuve spam recurrente de comentarios con solo un enlace. Ahora agregué algunos campos de honeypot y hace unos meses que no recibo el correo no deseado.
Lo más fácil que he hecho para detener a los spammers con (hasta ahora) consistencia del 100% es validar el texto que se envió. Si usa la función php strstr () para buscar "a href" o incluso un http o www que no se puede hacer clic, puede enrutar el spammer en otro lugar. De hecho, tengo un script y luego escribo en mi archivo .htaccess para denegar la dirección IP ofensiva. No estoy seguro de si hay otro tipo de spam que preocuparse, pero los enlaces son todo lo que he visto hasta ahora.
Es posible que desee ver esta pregunta , que tiene varias respuestas que describen cómo podría implementar un captcha no intrusivo.
Otra cosa a considerar es requerir tiempo entre las publicaciones para evitar el envío masivo de spam.