Evitar spam en formularios

Miguel-ito

Buenas.

Tengo una pequeña duda. ¿Hay alguna manera de prevenir en un formulario de contacto que la gente los rellene con datos falsos. EJ; Pepito, 123456789 [email protected]? Hasta ahora lo que a mi se me ha ocurrido es usar un filtro para los emails "basura" y quizá un diccionario para iertas palabras en ciertos campos, pero no se si existe otra manera.

Gracias de antemano.

d3k

Así de primeras, se me ocurre que hay webs donde comprueban si el mail existe o no:
www.verifyemailaddress.org

Podrías pagarles a ellos, crear algo así, pagar para que te lo hagan o buscar si hay algo gratis. Me imagino que no será 100% fiable, pero si por ejemplo sale que no es válido, podrías avisar al usuario, que por un problema para detectar si su correo es válido, le vas a enviar un mail de confirmación.

1 respuesta
MrBigel

#1 Misma idea que #2, o eso, o haces el tema de filtrar ciertas palabras o secuencia de números,ect.

¿O por que no haces un sistema de verificación? Es decir que les llegue un e-mail con "x" código y lo tengan que introducir para completar el registro.

DarkSoldier

#1 entonces jamas voy a poder tener una cuenta con nombre Pepito y esa contraseña? xD envíale un email para confirmar la cuenta

Miguel-ito

Gracias por las respuestas :) me convence lo del emai de confirmaciñon pero no se si podré implementarlo.

1 comentario moderado
6 meses después
willy_chaos

Otra opción sería que tu servidor enviara un email con código al estilo mail de confirmación, mientras, lo que haces es guardar el email en una tabla temporal con el código. Si en 1 semana no ha confirmado el mail, haces delete de ese registro de la db

Y si el usuario confirma, pues lo envías x email y borras de esa tabla temporal.

Obviamente los bots que usan cuentas y tal te seguirán dando por saco, xo eso ya es otro tema.

vincen

Algo basico, pero que no soluciona tu problema al 100%, es comprobar si el dominio existe, que eso si que puedes hacerlo facilmente por codigo.

Soluciona un 50% tu problema.
[email protected] -> invalido
[email protected] valido pero en verdad es invalido..

Traber

Si quieres comprobar la existencia de una dirección de correo, siempre puedes conectarte al MX del dominio y comprobarlo.

Ejemplo con Gmail

Sacar MX de un dominio

nslookup
set q=mx
gmail.com

gmail.com       MX preference = 30, mail exchanger = alt3.gmail-smtp-in.l.google.com
gmail.com       MX preference = 40, mail exchanger = alt4.gmail-smtp-in.l.google.com
gmail.com       MX preference = 5, mail exchanger = gmail-smtp-in.l.google.com
gmail.com       MX preference = 10, mail exchanger = alt1.gmail-smtp-in.l.google.com
gmail.com       MX preference = 20, mail exchanger = alt2.gmail-smtp-in.l.google.com

Comprobar dirección

telnet alt3.gmail-smtp-in.l.google.com 25

EHLO mailtestbot
MAIL FROM:<[email protected]>
RCPT TO:<[email protected]>

Si te da una respuesta como esta es que no existe:

550-5.1.1 The email account that you tried to reach does not exist. Please try
550-5.1.1 double-checking the recipient's email address for typos or
550-5.1.1 unnecessary spaces. Learn more at
550 5.1.1  https://support.google.com/mail/?p=NoSuchUser r82si4549207pfi.192 - gsmtp

En otros servidores te puede dar esta respuesta:

550 5.1.1 <[email protected]> User unknown

El código que interesaría sería el 550 5.1.1, que indica que la cuenta que quieres alcanzar no existe. Con programar un sistema que haga esto de manera automatizada podrías comprobar de manera 99% verídica si una cuenta existe o no.

1 respuesta
RaymaN

#9 eso no funciona con todos los servidores. Yo no lo usaría ni de coña, puede darte falsos positivos o negativos y molestar al usuario más que hacerle un favor.

1 respuesta
Traber

#10 No estoy muy seguro de eso. Ten en cuenta que SMTP es un protocolo estándar y las implementaciones que hacen los servidores suelen ser similares, por ejemplo, el primer mensaje de error es de GMail y el segundo de Zoho Mail (dos proveedores de email que utilizo), los mensajes son diferentes, pero el código es el mismo, 550 5.1.1, que indica que el destinatario no existe.

Si el servidor es incapaz de decirte si un usuario existe o no ya es un problema de implementación del servidor SMTP que se esté usando, que además no solo te va a dar problemas con comprobar si una dirección existe o no, sino que a la hora de entregar los emails también fallaría.

Prueba con esta web que tiene implementado el sistema que digo y verás como no es tan problemático:
http://www.mailtester.com/testmail.php

El diseño de dicha web es una chufa, pero es la que he usado toda la vida porque, hasta la fecha, es la que mejor me ha ido, y creeme, funciona demasiado bien.

Si quieres saber cómo funciona SMTP a todos sus niveles para que esto funcione bien me puedo extender un poco :P

¡Saludos!

1 respuesta
RaymaN

#11 hace poco busqué una opción similar y cada vez que tu propuesta aparecía por stackoverflow recibía bastantes comentarios sobre los riesgos de implementarla por no ser 100% fiable. No creo que sea problema del servidor, sino de protección contra abusos de verificación.

Ya digo que puede funcionar o no, pero no es buena idea usarla porque alguien con un email fuera de lo común podría recibir un falso negativo y desistir en el intento de registro/contacto/etc.

1 respuesta
Traber

#12 Efectivamente hay servidores que tienen la característica de comprobación de destinatario deshabilitada pero normalmente esos servidores son del tipo "sharklasers" y similares, o servidores de proveedores de hosting.

Creo que para comprobar una dirección de correo no hay nada más lógico que preguntar al servidor donde, se supone, debe residir dicha dirección, por eso he propuesto mi respuesta xD. Entiendo que el método puede ser problemático con según qué servidores (con los principales, Hotmail, Gmail, etc, funciona), pero ahora mismo no hay otra forma de comprobar (sin enviar un correo electrónico de confirmación) si existe una cuenta de correo o no.

No obstante, se podría hacer una combinación:

Compruebo si existe el correo:

  • Existe: Envío correo de verificación.
  • No se puede comprobar: Envío correo de verificación.
  • No existe: No registro.

Lo que sí es recomendable siempre es el envío de correos de confirmación tras el registro, lo cual se debería hacer siempre, independientemente de que una dirección de correo exista o no.

Usuarios habituales

  • Traber
  • RaymaN
  • willy_chaos
  • Miguel-ito
  • DarkSoldier
  • MrBigel
  • d3k