Tutorial: Proteger registro en Wordpress con verificación humana

  • Autor Autor OsKaR
  • Fecha de inicio Fecha de inicio
OsKaR

OsKaR

Zeta
Verificación en dos pasos activada
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. 😉
 
Tema aprobado, gracias por el aporte.
 
¿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?
 
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)
 
Perfecto, la segunda opción me gusto mucho más, los turoriales de cicklow como siempre me salvan la vida, gracias
 
A favoritos, seguro en algún momento futuro lo requiero, la cosa luego será encontrarlo entre tanta página guardada en favoritos.
 
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?
 
Que bueno el aporte si señor
 
[MENTION=9679]cicklow[/MENTION] que manera de llevarte con los códigos! Gracias también al que hizo el aporte!
 
buen aporte :encouragement:
 
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]
 
Atrás
Arriba