javascript - evitar - Prevención/Reducción de Spam-Formulario de contacto?
como evitar el spam en un formulario (13)
Campos ocultos, preguntas tontas (¿qué es 3 + 4?), Etc., no son muy efectivos para bloquear el spam en los formularios, en mi humilde opinión.
Investigué esto hace varios años, y se me ocurrió una solución que llamo "FormSpammerTrap". Utiliza el código JavaScript para ''mirar'' para enfocar / hacer clic en los campos requeridos. Los procesos automatizados, a menos que sean altamente personalizados para un sitio específico (lo que requiere más tiempo del que los propietarios de spambots desean tomar), no pueden ''enfocar / hacer clic'' en un campo obligatorio. (Y hay algunas otras técnicas que uso).
Tengo una solución gratuita en mi sitio www.FormSpammerTrap.com . Y hay un formulario allí que los spambots pueden intentar enviar spam ... y no lo han hecho, por más de 3 años. Le invitamos a probarlo ... es todo de código abierto, para que pueda ver cómo funciona. (Y, si usa el formulario, no cosecho su correo electrónico. Respondo una vez, luego borro su correo electrónico).
Mi técnica es mucho más efectiva para bloquear spambots, en mi humilde opinión. No han podido spambot el formulario de contacto en ese sitio.
** Agregado el 12 de julio de 2018 ** El truco consiste en agregar un evento de hacer clic / enfocar que cambie el parámetro de acción a la página de procesamiento real. De lo contrario, el valor predeterminado que uso es un sitio tipo honeytrap. Creo que es difícil para un spammer simular esos eventos, aunque quizás sea posible. La técnica bloquea una gran cantidad de bot-spammers.
Y aún así, después de un par de años usando la técnica en ese sitio, los bots no enviaron spam a la forma. (Defino un spammer bot que envía múltiples envíos a través del ataque, no solo un envío).
Funciona para mi.
Deseo agregar un formulario de contacto simple a mi sitio web para que los clientes puedan contactarme fácilmente.
<form>
NAME
<input type=''text'' name=''name'' />
EMAIL
<input type=''text'' name=''email'' />
MESSAGE
<textarea name=''message'' />
<input type=''submit'' />
</form>
Este formulario simplemente me enviará un correo electrónico con el mensaje de los clientes.
Pero, también quiero reducir (no, no digo eliminar, pero al menos reducir), SPAM.
He investigado el uso de CAPTCHA pero, en última instancia, no quiero estorbar al cliente al tener que completar información adicional.
Cualquier idea de un buen método simple de prevención / reducción de spam que podría utilizar para mi formulario de contacto.
Encontré una buena idea en esta página:
http://www.evengrounds.com/developers/alternatives-to-captcha
Puede hacer que su botón ENVIAR muestre una página de confirmación , en la que le explique al usuario que tiene que presionar el botón CONFIRMAR para enviar un mensaje. Los Spambots solo suelen enviar la primera forma y omiten el segundo paso.
La única forma (aparte del lado del cliente) que no sea una confirmación de usuario de tipo CAPTCHA sería escribir todo de manera dinámica. Muchos (pero no todos) robots probablemente ignorarían el contenido dinámico. P.ej
document.write("<"+"form>"
+" NAME "
+" <"+"input type=''text'' name=''name'' /> "
+"EMAIL "
+"<"+"input type=''text'' name=''email'' /> "
+"MESSAGE "
+"<"+"textarea name=''message'' /> "
+"<"+"input type=''submit'' /> "
+"<//form> ");
No necesitará reducir el correo no deseado porque los mensajes no se publican en el sitio web. Se publica una gran cantidad de spam en foros y blogs porque llegará a una gran audiencia de espectadores y robots.
Para un formulario de contacto privado, el correo no deseado es ineficaz, por lo que no tendrá que preocuparse por grandes cantidades. Los pocos mensajes de spam que recibirá se pueden filtrar de manera efectiva con un filtro de spam en su bandeja de entrada (por ejemplo, usando gmail o yahoo), especialmente porque los mensajes entrantes son texto sin imágenes.
Puede agregar una pregunta simple, cada persona seria que quiere contactarlo, puede responder fácilmente. Por ejemplo, un campo donde debe ingresar la primera letra del dominio. La mayoría de los bots no entienden la pregunta y no ingresarán nada o algo al azar.
También podría intentar rastrear el tiempo durante el cual el usuario necesita ingresar datos. Si intenta enviar el formulario antes de los 5 segundos antes de escribir la primera palabra, no permita enviarlo. Por lo general, los bots solo analizan el sitio, completan todo y luego lo publican y van al siguiente sitio web.
Puede simplemente registrar IP ($ _SERVER [''REMOTE_ADDR'']) y prohibir la revalidación con este IP durante 1 minuto o, más exactamente, iniciar una sesión, dar un ID de no visitante y prohibir la revalidación por 1 minuto (o más pero bot no me gusta esperar).
Si desea hacer una solución de front-end completamente, he tenido éxito recientemente al dejar el atributo de acción de formulario en blanco y llenarlo mediante una función $ (document) .ready. La mayoría de los spambots usan un navegador que tiene javascript deshabilitado, o están buscando campos ocultos para evitar la detección.
Ejemplo:
Tu html sería:
<form method="POST" action="" id="contact-form">
y en cualquier lugar de esa página puede usar esto para poblarlo.
<script>
$(document).ready(function(){
$("#contact-form").attr("action", "/yourMailScript.cgi");
});
</script>
Un navegador bot sin javascript no obtendrá una acción de formulario, y recibirá un 404 al momento del envío. Cualquier persona con un navegador normal (a menos que tenga JS deshabilitado por razones paranoides) obtendrá el comportamiento normal.
Un truco muy simple que he estado usando con una tasa de éxito sorprendentemente buena es la siguiente: Proporcionar un campo de texto que esté oculto a los usuarios humanos con style="display: none"
, pero con un nombre atractivo como el email
. La mayoría de los bots completarán algo en este campo, pero los humanos no pueden verlo así que no lo harán. En el servidor, solo asegúrese de que el campo esté vacío; de lo contrario, trate el envío como correo no deseado.
Use la cuenta de correo de Google o Yahoo. Tienen buenos filtros anti-SPAM.
Use una API anti-spam como Akismet o Cleantalk. Puede usar los controles tradicionales para obtener bots menos sofisticados antes de presionar la API. Una API antispam es la única forma de detectar spam enviado por un ser humano.
Utiliza la tecnología JS. Al igual que si un usuario entra en su página de contacto, javascript generará una cadena o algo similar que prefiera y colocará la información en un campo de texto oculto. Pero no es la solución real, el bot inteligente puede descifrarlo fácilmente.
Otra forma es, también puede usar la verificación de correo electrónico después del envío del formulario de contacto. Y almacene los datos en su base de datos. Si el cliente verifica la url a través del correo electrónico, la información de contacto se le enviará por correo desde la base de datos.
Y también use la demora para evitar el ataque continuo de un robot. Como sleep()
en código PHP. Esto agregará pocas demoras en su código. De esta forma, puedes reducir los ataques aleatorios, pero este no es el método de prevención.
grep para métodos URI, caracteres urlencoded, o los dos caracteres de marcado HTML, parece funcionar.
#sec {
visibility: hidden;
padding: 0;
margin: 0;
height: 1;
}
<form method="POST" action="www.google.com">
NAME
<input type=''text'' name=''name'' />
<br /> EMAIL
<input type=''text'' name=''email'' />
<br /> MESSAGE
<textarea name=''message'' /></textarea>
<br />
<input type=''text'' name=''security'' id=''sec'' placeholder="Do not enter anything here" />
<input type=''submit'' formaction="" />
</form>
** Aquí, solo un usuario que haga clic en el botón de enviar puede enviar el formulario. el uso de envío automático simplemente redirige el bot a google.com. **
* Además, la ''seguridad'' de entrada es un campo de entrada oculto para los usuarios y visible para ciertos bots, conocido comúnmente como HoneyPot Captcha. En el lado del servidor, simplemente puede omitir todas las solicitudes que llenen el campo ''seguridad''. No todos los bots pueden ser engañados de esta manera, y aquí es donde entra en juego la formaction
atributos *