remove password off nope new funciona formulario ejemplo disable chrome html-form spam

html-form - password - formulario html ejemplo



¿Cómo evitar que los robots llenen automáticamente un formulario? (27)

  1. Utilizo un método donde hay un cuadro de texto oculto. Since bots parse the website they probably fill it. Then I check it if it is empty if it is not website returns back.

  2. Add email verification. The user receives an email and he needs to click a link. Otherwise discard the post in some time.

Intento encontrar un mecanismo antispam suficiente para evitar entradas generadas automáticamente. He leído que técnicas como captcha, 1 + 1 =? las cosas funcionan bien, pero también presentan un paso adicional que impide el uso rápido y gratuito de la aplicación (no estoy buscando algo así, por favor).

Intenté configurar algunos campos ocultos en todos mis formularios, con display: none; Sin embargo, estoy seguro de que se puede configurar un script para rastrear ese identificador de campo de formulario y simplemente no llenarlo.

¿Implementas / conoces un buen método anti autómatas de relleno de formularios? ¿Hay algo que se pueda hacer sin problemas con HTML y / o procesamiento del lado del servidor, y ser (casi) a prueba de balas? (sin JS como uno simplemente podría desactivarlo).

Estoy tratando de no confiar en las sesiones para esto (es decir, contar cuántas veces se hace clic en un botón para evitar sobrecargas).


¿Qué hay de crear un cuadro de entrada de campo de texto del mismo color que el fondo que debe permanecer en blanco. Esto sorteará el problema de una pantalla de lectura de bots: ninguno


Con la aparición de navegadores sin cabeza (como phantomjs) que pueden emular cualquier cosa, no se puede suponer que:

  • los bots de spam no usan javascript,
  • puedes rastrear eventos de mouse para detectar bot,
  • no verán que un campo está visualmente oculto,
  • no esperarán un tiempo determinado antes de enviar.

Si eso solía ser verdad, ya no es verdad.

Si no quieres una solución fácil de usar, solo dales un hermoso botón de enviar "soy un spammer" :

<input type="submit" name="ignore" value="I am a spammer!" /> <input type="image" name="accept" value="submit.png" alt="I am not a spammer" />

Por supuesto, puede jugar con dos botones de input[type=image] imagen input[type=image] , cambiando el orden después de cada carga, las alternativas de texto, el contenido de las imágenes (y su tamaño) o el name de los botones; que requerirá un poco de trabajo del servidor.

<input type="image" name="random125454548" value="random125454548.png" alt="I perfectly understand that clicking on this link will send the e-mail to the expected person" /> <input type="image" name="random125452548" value="random125452548.png" alt="I really want to cancel the submission of this form" />

Por motivos de accesibilidad, debe colocar una alternativa textual correcta, pero creo que una frase larga es mejor para los lectores de pantallas que como un bot.


De hecho, me parece que un campo simple de Honey Pot funciona bien. La mayoría de los bots completan cada campo de formulario que ven, con la esperanza de evitar los validadores de campo requeridos.

http://haacked.com/archive/2007/09/11/honeypot-captcha.aspx

Si crea un cuadro de texto, ocultelo en javascript, luego verifique que el valor esté en blanco en el servidor, esto elimina el 99% de los robots que existen, y no causa ninguna frustración al 99% de los usuarios. El 1% restante que tiene javascript deshabilitado seguirá viendo el cuadro de texto, pero puede agregar un mensaje como "Deje este campo en blanco" para esos casos (si realmente le importan).

(Además, señalando que si haces style = "display: none" en el campo, entonces es demasiado fácil para un robot ver eso y descartar el campo, por lo que prefiero el método javascript).


En mi experiencia, si el formulario es solo un formulario de "contacto", no necesita medidas especiales. El spam se filtra decentemente por los servicios de webmail (puede hacer un seguimiento de las solicitudes de formulario vía scripts de servidor para ver qué es lo que efectivamente llega a su correo electrónico, por supuesto, supongo que tiene un buen servicio de correo web: D)

Por cierto, estoy tratando de no confiar en las sesiones para esto (por ejemplo, contar cuántas veces se hace clic en un botón para evitar sobrecargas).

No creo que eso sea bueno, de hecho, lo que quiero lograr es recibir correos electrónicos de los usuarios que realizan alguna acción particular porque esos son los usuarios que me interesan (por ejemplo, los usuarios que miraron la página "CV" y utilizaron el contacto adecuado). formar). Entonces, si el usuario hace algo que yo quiero, empiezo a rastrear su sesión y a establecer una cookie (siempre configuro una cookie de sesión, pero cuando no comienzo una sesión, solo se trata de una cookie falsa para creer que el usuario tiene una sesión). Si el usuario hace algo no deseado, no me molesto en mantener una sesión para él, así que no hay sobrecarga, etc.

También sería bueno para mí que los servicios de publicidad ofrezcan algún tipo de API (tal vez ya exista) para ver si el usuario "miró el anuncio", es probable que los usuarios que miran anuncios sean usuarios reales, pero si no lo son muy bien, al menos obtienes 1 vista de todos modos, así que no pierdes nada. (y confía en mí, los controles de anuncios son más sofisticados que cualquier cosa que puedas hacer sola)


En realidad, la trampa con pantalla: ninguna funciona como un amuleto. Ayuda a mover la declaración de CSS a un archivo que contiene cualquier hoja de estilo global, lo que obligaría a los robots de spam a cargar esos también (una declaración de style = "display: none;" directa podría ser interpretada por un bot de spam, como podría declaración de estilo local dentro del documento mismo).

Esto, combinado con otras contramedidas, debería hacer que los robots de spam no puedan descargar sus trastos (tengo un libro de visitas asegurado con una variedad de medidas, y hasta el momento se han enamorado de mis trampas principales; otros están listos para disparar).

Lo que estoy usando es una combinación de campos de formularios falsos (también descritos como campos no válidos en caso de que se use un navegador que no maneja CSS en general o visualización: ninguno en particular), verificaciones de cordura (es decir, el formato de la entrada válido?), sellado de tiempo (presentaciones demasiado rápidas y lentas), MySQL (para implementar listas negras basadas en correo electrónico y direcciones IP, así como filtros de inundación), DNSBL (por ejemplo, SBL + XBL de Spamhaus), análisis de texto ( por ejemplo, palabras que son una fuerte indicación de correo no deseado) y correos electrónicos de verificación (para determinar si la dirección de correo electrónico proporcionada es válida o no).

Una nota sobre correos de verificación: este paso es completamente opcional, pero cuando uno elige implementarlo, este proceso debe ser tan fácil de usar como sea posible (es decir, debe reducirse a hacer clic en un enlace contenido en el correo electrónico). ) y hacer que la dirección de correo electrónico en cuestión se incluya en la lista blanca durante un cierto período de tiempo, de modo que se eviten las verificaciones posteriores en caso de que el usuario desee realizar publicaciones adicionales.


Es solo una idea, id lo usé en mi aplicación y funciona bien

puede crear una cookie en el movimiento del mouse con javascript o jquery y en la verificación del lado del servidor si existe cookie, porque solo los humanos tienen mouse, cookie puede ser creada solo por ellos, la cookie puede ser una marca de tiempo o un token que se puede validar


Estoy pensando en muchas cosas aquí:

  1. usando JS (aunque no lo desee) para rastrear el movimiento del mouse, presionar una tecla, hacer clic con el mouse
  2. obtener la URL de referencia (que en este caso debe ser una del mismo dominio) ... el usuario normal debe navegar por el sitio web antes de llegar al formulario de contacto: PHP: ¿Cómo obtener la URL de referencia?
  3. usando una variable $ _SESSION para adquirir el IP y verificar el formulario enviado en contra de esa lista de IP
  4. Complete un campo de texto con un texto ficticio que puede verificar en el lado del servidor si se sobrescribió
  5. Compruebe la versión del navegador: http://chrisschuld.com/projects/browser-php-detecting-a-users-browser-from-php.html ... Está claro que un bot no usará un navegador sino solo un script .
  6. Use AJAX para enviar los campos uno por uno y verifique la diferencia de tiempo entre presentaciones
  7. Use una página falsa antes / después del formulario, solo para enviar otra entrada

Hay un tutorial sobre esto en el sitio de JQuery. Aunque es JQuery, la idea es independiente del marco.

Si JavaScript no está disponible, es posible que deba recurrir al enfoque de tipo CAPTCHA.


La manera más fácil que encontré para hacer esto es poner un campo con un valor y pedirle al usuario que elimine el texto en este campo. ya que los bots solo los llenan. si el campo no está vacío, significa que el usuario no es humano y no se publicará. es el mismo propósito de un código de captcha.


La mejor solución que he encontrado para evitar que los bots te envíen spam es utilizar una pregunta o campo muy trivial en tu formulario.

Intenta agregar un campo como estos:

  • Copia "hola" en la caja a un lado
  • 1 + 1 =?
  • Copie el nombre del sitio web en el cuadro

Estos trucos requieren que el usuario entienda lo que se debe ingresar en la forma, lo que hace que sea mucho más difícil ser el objetivo del relleno masivo de formularios bot.

EDITAR

La parte posterior de este método, como indicó en su pregunta, es el paso adicional para que el usuario valide su formulario. Pero, en mi opinión, es mucho más simple que un captcha y la sobrecarga al llenar el formulario no es más de 5 segundos, lo que parece aceptable desde el punto de vista del usuario.


Lo que hice fue utilizar un campo oculto y poner la marca de tiempo en él y luego compararlo con la marca de tiempo en el servidor usando PHP.

Si fue más rápido que 15 segundos (depende de cuán grandes o pequeñas sean tus formas) eso fue un bot.

Espero que esto ayude


Me sorprende que nadie haya mencionado este método todavía:

  • En su página, incluya una imagen pequeña y oculta.
  • Coloque una cookie al servir esta imagen.
  • Al procesar el envío del formulario, verifique la cookie.


Pros:

  • conveniente para el usuario y desarrollador
  • parece ser confiable
  • sin JavaScript

Contras:

  • agrega una solicitud HTTP
  • requiere que las cookies estén habilitadas en el cliente


Por ejemplo, este método es utilizado por el plugin de WordPress Cookies para comentarios .


Muchos de esos bots de spam son solo scripts del lado del servidor que merodean por la web. Puede combatir muchos de ellos mediante el uso de javascript para manipular la solicitud de formulario antes de su envío (es decir, establecer un campo adicional basado en alguna variable de cliente). Esta no es una solución completa y puede generar muchos problemas (p. Ej., Usuarios sin javascript, en dispositivos móviles, etc.), pero puede ser parte de su plan de ataque.

Aquí hay un ejemplo trivial ...

<script> function checkForm() { // When a user submits the form, the secretField''s value is changed $(''input[name=secretField]'').val(''goodValueEqualsGoodClient''); return true; } </script> <form id="cheese" onsubmit="checkForm"> <input type="text" name="burger"> <!-- Check that this value isn''t the default value in your php script --> <input type="hidden" name="secretField" value="badValueEqualsBadClient"> <input type="submit"> </form>

En algún lugar de tu script php ...

<?php if ($_REQUEST[''secretField''] != ''goodValueEqualsGoodClient'') { die(''you are a bad client, go away pls.''); } ?>

Además, los captchas son geniales y realmente la mejor defensa contra el spam.


Otra opción en lugar de hacer letras al azar y números como lo hacen muchos sitios web es hacer imágenes aleatorias de objetos reconocibles. Luego, pida al usuario que escriba qué color es algo en la imagen o qué es el objeto en sí.

Con todo, cada solución tendrá sus ventajas y desventajas. Tendrás que encontrar una mediana feliz entre demasiado difícil para que los usuarios pasen el mecanismo antispam y la cantidad de bots de spam que pueden atravesar.


Tengo un enfoque simple para detener a los spammers, que es 100% efectivo, al menos en mi experiencia, y evita el uso de reCAPTCHA y enfoques similares. Pasé de cerca de 100 spams por día en uno de los formularios html de mi sitio a cero durante los últimos 5 años una vez que implementé este enfoque.

Funciona aprovechando las capacidades ALIAS de correo electrónico de la mayoría de los scripts de manejo de formularios html (yo uso FormMail.pl), junto con un "código" de envío de gráficos, que se crea fácilmente en los programas de gráficos más simples. Uno de esos gráficos incluye el código M19P17nH y el mensaje "Por favor ingrese el código a la izquierda".

Este ejemplo particular usa una secuencia aleatoria de letras y números, pero tiendo a usar versiones no inglesas de palabras familiares para mis visitantes (por ejemplo, "pnofrtay"). Tenga en cuenta que la solicitud del campo de formulario está integrada en el gráfico, en lugar de aparecer en el formulario. Por lo tanto, para un robot, ese campo de forma no presenta ninguna pista sobre su propósito.

El único truco real aquí es asegurarse de que su formulario html asigna este código a la variable "destinatario". Luego, en su programa de correo, asegúrese de que cada código que use esté configurado como un alias de correo electrónico, que apunta a las direcciones de correo electrónico que quiera usar. Como no hay ningún aviso de ningún tipo en el formulario para que un robot lo lea ni direcciones de correo electrónico, no tiene idea de qué incluir en el campo del formulario en blanco. Si no pone nada en el campo de formulario o nada, excepto los códigos aceptables, el envío del formulario falla con un error de "destinatario incorrecto". Puede usar un gráfico diferente en diferentes formularios, aunque no es realmente necesario en mi experiencia.

Por supuesto, un ser humano puede resolver este problema en un instante, sin todos los problemas asociados con reCAPTCHA y esquemas similares, más elegantes. Si un spammer humano responde al error del destinatario y programa el código de imagen en el robot, puede cambiarlo fácilmente, una vez que se da cuenta de que el robot ha sido codificado para responder. En cinco años de utilizar este enfoque, nunca he recibido correo no deseado de ninguno de los formularios en los que lo uso ni he recibido quejas de ningún usuario humano de los formularios. Estoy seguro de que esto podría ser superado con la capacidad de OCR en el robot, pero nunca he tenido éxito en ninguno de mis sitios que usan formularios html. También utilicé "trampas de spam" (código html oculto "come hither", que apunta a mis políticas anti-spam) con buenos resultados, pero solo tuvieron un 90% de efectividad.


Una forma fácil de implementar, pero no a prueba de tontos (especialmente en ataques "específicos") de solución anti-spam, es el seguimiento del tiempo entre el envío de formulario y la carga de página.

Bots solicita una página, analiza la página y envía el formulario. Esto es rápido

Los humanos escriben una URL, cargan la página, esperan antes de que la página esté completamente cargada, se desplazan hacia abajo, leen el contenido, deciden si desean comentar / completar el formulario, requieren tiempo para completar el formulario y enviar.

La diferencia en el tiempo puede ser sutil; y cómo rastrear este tiempo sin cookies requiere alguna forma de base de datos del lado del servidor. Esto puede ser un impacto en el rendimiento.
También necesita ajustar el tiempo de umbral.


Una forma muy efectiva de eliminar prácticamente el spam es tener un campo de texto que contenga texto, como "Eliminar este texto para enviar el formulario". y ese texto debe ser eliminado para poder enviar el formulario.

Tras la validación del formulario, si el campo de texto contiene el texto original, o cualquier texto al azar para ese asunto, no envíe el formulario. Los bots pueden leer los nombres de los formularios y rellenar automáticamente los campos Nombre y Correo electrónico, pero no saben si deben eliminar el texto de un determinado campo para poder enviarlos.

Implementé este método en nuestro sitio web corporativo y eliminé totalmente el correo no deseado que recibíamos a diario. ¡Realmente funciona!


Una forma muy simple es proporcionar algunos campos como <textarea style="display:none;" name="input"></textarea> <textarea style="display:none;" name="input"></textarea> y descarta todas las respuestas que tienen esto completado.

Otro enfoque es generar la forma completa (o solo los nombres de campo) usando Javascript; pocos bots pueden ejecutarlo.

De todos modos, no hará mucho contra los "bots" en vivo de Taiwán o India, que reciben un pago de $ 0.03 por cada enlace publicado, y se ganan la vida de esa manera.


Utilice 1) formulario con tokens 2) Compruebe el formulario para formar el retraso con la dirección IP 3) Bloquear IP (opcional)


¿Qué pasa si el Bot no encuentra ningún form ?

3 ejemplos:

1. Inserta tu formulario usando AJAX

si está de acuerdo con que los usuarios tengan JS deshabilitado y no puedan ver / enviar un formulario ... Siempre puede notificarlos usando <noscript><p class="error">ERROR: The form could not be loaded. Please, re-enable JavaScript in your browser to fully enjoy our services.</p></noscript> <noscript><p class="error">ERROR: The form could not be loaded. Please, re-enable JavaScript in your browser to fully enjoy our services.</p></noscript> . Que,

  1. Cree un form.html y coloque su form dentro de un elemento <div id="formContainer"> .
  2. Que dentro de la página donde necesita llamar a ese formulario utilice un <div id="dynamicForm"></div> vacío y este jQuery:

$("#dynamicForm").load("form.html #formContainer");

2. Construye tu formulario completamente usando JS

// THE FORM var $form = $("<form/>", { appendTo : $("#formContainer"), class : "myForm", submit : AJAXSubmitForm }); // EMAIL INPUT $("<input/>",{ name : "Email", // Needed for serialization placeholder : "Your Email", appendTo : $form, on : { // Yes, the jQuery''s on() Method input : function() { console.log( this.value ); } } }); // MESSAGE TEXTAREA $("<textarea/>",{ name : "Message", // Needed for serialization placeholder : "Your message", appendTo : $form }); // SUBMIT BUTTON $("<input/>",{ type : "submit", value : "Send", name : "submit", appendTo : $form }); function AJAXSubmitForm(event) { event.preventDefault(); // Prevent Default Form Submission // do AJAX instead: var serializedData = $(this).serialize(); alert( serializedData ); $.ajax({ url: ''/mail.php'', type: "POST", data: serializedData, success: function (data) { // log the data sent back from PHP console.log( data ); } }); }

.myForm input, .myForm textarea{ font: 14px/1 sans-serif; box-sizing: border-box; display:block; width:100%; padding: 8px; margin-bottom:12px; } .myForm textarea{ resize: vertical; min-height: 120px; }

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="formContainer"></div>

3. entrada de cebo Bot

bots gusta ( realmente me gusta) elementos de entrada descarados como:

<input type="text" name="email" id="email" placeholder="Your email" autocomplete="nope" tabindex="-1" />

estarán felices de ingresar algún valor como lo hacen [email protected]

que (después de usar el HTML anterior), usando CSS, haga lo siguiente:

input[name=email]{ /* bait input */ /* don''t use display:none or visibility:hidden cause that will not fool the bot */ position:absolute; left:-2000px; }

ahora que su entrada no es visible para el usuario, ¡espere en PHP que su $_POST["email"] esté vacío (sin ningún valor)! De lo contrario, no envíe el formulario.

Ahora, todo lo que necesitas hacer es crear otra entrada como <input name="sender" type="text" placeholder="Your email"> after (!) La entrada "bot-bait" para la dirección de correo electrónico del usuario real.

Expresiones de gratitud:

Developer.Mozilla - Desactivación de autocompletar formulario
- Ignorar Tabindex



I''ve added a time check to my forms. The forms will not be submitted if filled in less than 3 seconds and this was working great for me especially for the long forms. Here''s the form check function that I call on the submit button

function formCheck(){ var timeStart; var timediff; $("input").bind(''click keyup'', function () { timeStart = new Date().getTime(); }); timediff= Math.round((new Date().getTime() - timeStart)/1000); if(timediff < 3) { //throw a warning or don''t submit the form } else submit(); // some submit function }


Just my five cents worth. If the object of this is to stop 99% of robots which sounds pretty good, and if 99% of robots can''t run Java-script the best solution that beats all is simply to not use a form that has an action of submit with a post URL.

Si el formulario se controla a través de java-script y el script java recopila los datos del formulario y luego los envía a través de una solicitud HTTP, ningún robot puede enviar el formulario. Dado que el botón Enviar usaría Java-script para ejecutar el código que envía el formulario.


Robots cannot execute JavaScript so you do something like injecting some kind of hidden element into the page with JavaScript and then detecting it''s presence prior to form submission but beware because some of your users will also have JavaScript disabled

Otherwise I think you will be forced to use a form of client proof of "humanness"


With increasingly sophisticated spam bots and techniques like automated browsers, it will become harder to determine the source of spam. But whether posted by software, a human, or both, spam is spam because of its content. I think the best solution is to run the posted content through an anti-spam API like Cleantalk or Akismet. It''s relatively cheap and effective and doesn''t hassle the user. You can check form submission times and the other traditional checks for less sophisticated bots before hitting the API.


You can try to cheat spam-robots adding the correct action atribute after Javascript validation. so if the robot block javascript they never submit correctly the form.

HTML

<form id="form01" action="false-action.php"> //your inputs <button>SUBMIT</button> </form>

JAVASCRIPT

$(''#form01 button'').click(function(){ //your Validations and if everything is ok: $(''#form01'').attr(''action'', ''correct-action.php'').on("load",function(){ document.getElementById(''form01'').submit() }); })

I add a "callback" after .attr() to prevent errors