Tutorial: Proteger registro en Wordpress con verificación humana

OsKaR Seguir

Zeta
Verificación en dos pasos activada
Desde
15 Ago 2010
Mensajes
1.551
Bueno, aquí os dejo un sencillo código con el cual vamos a comprobar si los usuarios que se registran en nuestro blog son humanos o no, añadir esto a vuestro functions.php y no volveréis a tener problemas. :)

PHP:
<?php
// campos personalizados registro
add_action('register_form','show_spam_field');
add_action('register_post','check_fields',10,3);

// añadimos campo spam
function show_spam_field(){
?>

<p>
<label>&iquest;Cuanto es 15+2?<br />
<input id="spam" class="input" type="text" tabindex="20" size="25" value="<?php echo $_POST['spam']; ?>" name="spam"/>
</label>
</p>
<?php
}

// mostramos error si no coincide
function check_fields($login, $email, $errors) {
	if ($_POST['spam'] !='17') {
		$errors->add('empty_antispam', "<strong>ERROR</strong>: Introduce bien la pregunta de seguridad");
	}
}

Como veis es bastante sencillo, editar el número o la pregunta por la que vosotros queráis, de esta forma no tendréis que hacer uso de plugins externos y de su odiosas instalaciones. ;)
 

Carlos Arreola

Admin
Sigma
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
Verificado por Binance
¡Excelente comerciante!
Suscripción a IA
Desde
6 Abr 2009
Mensajes
12.272
Tema aprobado, gracias por el aporte.
 

Wytzklaw

Préstamo
Eta
Desde
3 Oct 2012
Mensajes
1.287
¿Me supongo que podrá adaptarse a una forma de contacto reemplazando register_form por contact_form?

Mañana lo pruebo, muchas gracias por dato.

- - - Actualizado - - -

¿Se le pueden añadir más preguntas y que aparezcan arbitrariamente?
 

Cicklow

Admin
Dseda
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Suscripción a IA
Desde
30 May 2011
Mensajes
1.087
que sea mas aleatorio:
PHP:
 <?php
// campos personalizados registro
add_action('register_form','show_spam_field');
add_action('register_post','check_fields',10,3);

//Cambiar el numero 5 por otro numero asi no tienen el mismo que el tutorial!
$SUMANU = 5;
function encriptarcadena($X){
	global $SUMANU;
	$ZZ = "";
	for($i=0;$i<strlen($X);$i++){
		$TT = substr($X,$i,1);
		$ZZ .=(ord($TT) - $SUMANU);
	}
	return $ZZ;
}

function desencriptarcadena($X){
	global $SUMANU;
	$ZZ = "";
	for($i=0;$i<strlen($X);$i+=2){
		$TT = substr($X,$i,2);
		$ZZ .= chr($TT + $SUMANU);
	}
	return $ZZ;
}

// añadimos campo spam
function show_spam_field(){
$A = mt_rand(1,25);
$B = mt_rand(5,30);
?>
<p>
<label>&iquest;Cuanto es <?=$A.'+'.$B;?>?<br />
<input id="spam" class="input" type="text" tabindex="20" size="25" value="" name="spam"/>
<input id="nospam_a" class="input" type="hidden" value="<?=encriptarcadena($A); ?>" name="spamA"/>
<input id="nospam_b" class="input" type="hidden" value="<?=encriptarcadena($B); ?>" name="spamB"/>
</label>
</p>
<?php
}

// mostramos error si no coincide
function check_fields($login, $email, $errors) {
    $RES = (desencriptarcadena($_POST['spamA']) + desencriptarcadena($_POST['spamB']));

    if ($RES != $_POST['spam'] ) {
        $errors->add('empty_antispam', $RES."<strong>ERROR</strong>: Introduce bien la pregunta de seguridad");
    }
}

Lo que hace es sacar números aleatorios para la verificación humana, luego usando unas funciones de encriptacion y desencriptacion verificamos la suma (usamos esas funciones para ocultar de la vista los numeros que usaremos en la verificacion)
 

edizzz

Gamma
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
5 Oct 2012
Mensajes
183
Perfecto, la segunda opción me gusto mucho más, los turoriales de cicklow como siempre me salvan la vida, gracias
 

Misael Alemán

Mi
Redactor
Verificación en dos pasos activada
Verificado por Whatsapp
Desde
22 Jul 2013
Mensajes
3.106
que sea mas aleatorio:
PHP:
 <?php
// campos personalizados registro
add_action('register_form','show_spam_field');
add_action('register_post','check_fields',10,3);

//Cambiar el numero 5 por otro numero asi no tienen el mismo que el tutorial!
$SUMANU = 5;
function encriptarcadena($X){
	global $SUMANU;
	$ZZ = "";
	for($i=0;$i<strlen($X);$i++){
		$TT = substr($X,$i,1);
		$ZZ .=(ord($TT) - $SUMANU);
	}
	return $ZZ;
}

function desencriptarcadena($X){
	global $SUMANU;
	$ZZ = "";
	for($i=0;$i<strlen($X);$i+=2){
		$TT = substr($X,$i,2);
		$ZZ .= chr($TT + $SUMANU);
	}
	return $ZZ;
}

// añadimos campo spam
function show_spam_field(){
$A = mt_rand(1,25);
$B = mt_rand(5,30);
?>
<p>
<label>¿Cuanto es <?=$A.'+'.$B;?>?<br />
<input id="spam" class="input" type="text" tabindex="20" size="25" value="" name="spam"/>
<input id="nospam_a" class="input" type="hidden" value="<?=encriptarcadena($A); ?>" name="spamA"/>
<input id="nospam_b" class="input" type="hidden" value="<?=encriptarcadena($B); ?>" name="spamB"/>
</label>
</p>
<?php
}

// mostramos error si no coincide
function check_fields($login, $email, $errors) {
    $RES = (desencriptarcadena($_POST['spamA']) + desencriptarcadena($_POST['spamB']));

    if ($RES != $_POST['spam'] ) {
        $errors->add('empty_antispam', $RES."<strong>ERROR</strong>: Introduce bien la pregunta de seguridad");
    }
}

Lo que hace es sacar números aleatorios para la verificación humana, luego usando unas funciones de encriptacion y desencriptacion verificamos la suma (usamos esas funciones para ocultar de la vista los numeros que usaremos en la verificacion)

Hay alguna manera de hacer esta verificación en el formulario del login de wordpress?
 

Mikaby

Épsilon
Hospedaje
Verificación en dos pasos activada
Verificado por Binance
Desde
4 Dic 2014
Mensajes
803
[MENTION=9679]cicklow[/MENTION] que manera de llevarte con los códigos! Gracias también al que hizo el aporte!
 

edizzz

Gamma
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
5 Oct 2012
Mensajes
183
Hola de vuelta por aquí con un problema, implante este codigo a mi web, si funciona perfecto si quieren verificarlo Edizzz.com ? Formulario de registro Pero acabo de entrar a mi email y me doy cuenta que continuan registrandose en mi web con email .pl con nombres extraños, ¿consiguen responder las preguntas? porque yo lo probé varias veces y si sumo mal sale el error, usé el script de [MENTION=9679]cicklow[/MENTION]
 
Arriba