php - evitar - recaptcha v3 example
Bloqueo de spam de comentarios sin usar captcha (18)
1) Agregar información relacionada con la sesión en el formulario Ejemplo:
<input type="hidden" name="sh" value="<?php echo dechex(crc32(session_id())); ?>" />
luego, en la devolución de datos, compruebe si la sesión es válida o no.
2) Solo Javascript . Use Javascript injection en Sumisión. Ejemplo:
<input type="hidden" id="txtKey" name="key" value="" />
<input type="submit" value="Go" onclick="document.getElementById(''txtKey'').value = ''<?php echo dechex(crc32(session_id())) ?>'';" />
3) Tiempo límite por IP, usuario o sesión . esto es bastante sencillo.
4) Nombres de campo aleatorios:
<?php
$fieldkey = dechex(crc32(mt_rand().dechex(crc32(time()))));
$_SESSION[''fieldkey''] = $fieldkey;
?>
<input type="text" name="name<?php echo $fieldkey; ?>" value="" />
<input type="text" name="address<?php echo $fieldkey; ?>" value="" />
Entonces puedes verificarlo en el lado del servidor.
¿Cuáles son algunos métodos no captcha para bloquear el spam en mis comentarios?
Akismet es una buena alternativa, revisan tus publicaciones en busca de spam y funcionan de manera muy eficiente. Solo necesitas cargar su librabrio. http://akismet.com/development/
Akismet tiene una API. Alguien escribió una clase contenedora (BSD liscense) para más detalles en: http://cesars.users.phpclasses.org/browse/package/4401.html
También hay una clase de filtro bayesiano (BSD Liscense también) http://cesars.users.phpclasses.org/browse/package/4236.html
Como mucha gente ya propuso: use un campo de entrada de Honey Pot. Pero hay otras dos cosas que debes hacer. Primero, aleatorice el nombre / identificación del campo de entrada que es el tarro de miel. Almacene el estado de los campos útiles en sesión (así como un token de formulario, usado contra ataques CSRF). Por ejemplo, tiene estos campos para obtener: nombre, correo electrónico, mensaje. En su forma, tendrá "token" que es su token, "jzefkl46" que es el nombre de este formulario, "ofdizhae" para correo electrónico, "45sd4s2" para mensaje y "fgdfg5qsd4" para honey pot. En la sesión de usuario, puede tener algo como
array("forms" => array("your-token-value" => array("jzefkl46" => "name", "ofdizhae" => "email", "45sd4s2" => "message", "fgdfg5qsd4" => honey"));
Solo tiene que volver a asociarlo cuando obtenga los datos de su formulario.
En segundo lugar, dado que el robot tiene muchas posibilidades de evitar su campo de miel (25% de posibilidades), multiplique el número de macetas. Con 10 o 20 de ellos, agregas dificultad a los bots sin tener demasiada sobrecarga en tu html.
En mi blog, tengo una especie de captcha de compromiso: solo uso un captcha si la publicación contiene un enlace. También uso un campo de entrada de honeypot. Hasta ahora, esto ha sido casi 100% efectivo. De vez en cuando habrá un spammer que envía algo a cada formulario que no contiene enlaces (generalmente algo así como "¡buen sitio!"). Solo puedo suponer que estas personas piensan que les enviaré un correo electrónico para averiguar quiénes son (usando la dirección de correo electrónico que solo yo veo).
En mi experiencia, los métodos más efectivos actualmente son los campos de entrada de honeypot que son invisibles para los usuarios a través de CSS (mejor use varios métodos diferentes, como visibilidad: oculta, estableciendo un tamaño de 0 píxeles y posicionamiento absoluto fuera de la ventana del navegador); si se llenan de todos modos, puedes asumir que es un spambot.
Este blog describe un método bastante complejo que he probado yo mismo (con un éxito del 100% hasta el momento), pero sospecho que podrías obtener el mismo resultado omitiendo todo el material con nombres de campos hash y simplemente agregar algunos campos de honeypot simples.
Este es un truco simple para bloquear el robot de spam o el ataque de fuerza bruta sin usar captcha.
Pon esto en tu forma:
<input type="hidden" name="hash" value="<?php echo md5($secret_key.time()).'',''.time(); ?>" />
Pon esto en tu código php
$human_typing_time = 5;/** page load (1s) + submit (1s) + typing time (3s) */
$vars = explode('','', $_POST[''hash'']);
if(md5($secret_key.$vars[1]) != $vars[0] || time() < $var[1] + $human_typing_time){
//bot?
exit();
}
Depende del peso del formulario, puede aumentar o disminuir $ human_typing_time.
Filtros Naive Beyesian, por supuesto:
http://blog.liip.ch/archive/2005/03/30/php-naive-bayesian-filter.html
La mayoría de los bots simplemente completan el formulario completo y se lo envían. Un truco simple que funciona es crear un campo normal que normalmente ocultas con la ayuda de javascript. En el lado del servidor simplemente verifique si este campo se ha llenado. Si es así, entonces es spam de seguro.
Los CAPTCHA regulares ahora son solucionables con spam.
Considere en su lugar "CAPTCHOS de texto" : una pregunta lógica o de conocimiento común, como "¿Qué es 1 + 1?" o "¿De qué color es el caballo blanco de General Custard?" La pregunta puede ser estática (la misma pregunta para cada intento).
(Taken from http://matthewhutchinson.net/2010/4/21/actsastextcaptcha )
Creo que Jeff Atwood incluso usa una validación como esta en su blog. (Corrígeme si estoy equivocado)
Algunos recursos:
- Sitio y servicios de Captcha de texto: http://textcaptcha.com/demo
- Un complemento: http://matthewhutchinson.net/2010/4/21/actsastextcaptcha
- Más información sobre el texto Captcha con código que no funciona: http://www.thesamet.com/blog/2006/12/21/fighting-spam-on-phpbb-forums/
No permitir enlaces. Sin enlaces, el spam es inútil.
[EDITAR] Como punto medio, solo permite enlaces a sitios "buenos" (generalmente los tuyos). Solo hay un puñado de ellos, por lo que puede agregarlos a petición de los usuarios o mantener un comentario hasta que haya verificado el enlace. Cuando esté bien, agrégalo.
Después de un tiempo, puede desactivarlo y rechazar automáticamente los comentarios con enlaces y esperar a que los usuarios se quejen.
Otro enfoque común es hacer una simple pregunta al usuario ("¿está el fuego caliente o frío?", "¿Qué es 2 más 7?", Etc.). Es un poco como un captcha, pero es más accesible para los usuarios con discapacidades visuales que usan lectores de pantalla. Creo que debe haber un complemento de WordPress que haga esto, porque lo veo con mucha frecuencia en los blogs de WordPress.
Reduje aproximadamente el 99% del spam en mi sitio web a través de una simple pregunta matemática como la siguiente:
¿Qué es 2 + 4 [TextBox]
El usuario podrá enviar la pregunta / comentario si responde "6".
¡Funciona para mí y una solución similar funciona para Jeff Atwood de Coding Horror!
También está la teoría de Honey Pot. Me gusta acoplar ollas de miel con otras formas de reducción de correo no deseado para obtener mejores resultados.
junto con el uso de campos de marihuana, podemos prohibir su IP automáticamente (que no funciona para IP dinámicas) y especialmente cualquier enlace publicado por bots.
revisa algunos plugins antispam wp para ejemplos e ideas
hay muchos buenos antispam sin usar captcha.
algunos recomendaría: hashcash, nospamnx, typepad antispam. todos estos utilizando diferentes métodos de bloqueo de spam y los uso todos. hashcash + nospamnx bloquea casi todos los spambot. y typepad antispam bloquean la mayoría de los mensajes de correo no deseado de tipo humano.
estos también son buenos: spambam, wp-spamfree, anti-captcha, mal comportamiento, httpbl, etc.
también con .htaccess simple que bloquea cualquier POS directo de robot que no provenga de su propio sitio (verifique el refere)
o, simplemente externalice su sistema de comentarios para disqus y duerma bien.
Sblam! es un filtro de código abierto similar a Akismet.
Utiliza filtrado bayesiano ingenuo, comprueba la IP del remitente y los enlaces en múltiples listas negras distribuidas, comprueba la corrección de las solicitudes HTTP y utiliza la presencia de JS como pista (pero no como requisito).