Tutorial: Proteger registro no Wordpress com verificação humana

  • Autor Autor OsKaR
  • Data de início Data de início
Tradução em andamento: em alguns minutos este tópico estará em português. Por enquanto, o conteúdo está no original em espanhol. Ver original
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. 😉
 
Foi útil? Participe da conversa

Com sua conta grátis você pode responder, mandar mensagem privada ao autor e comprar com Saldo retido: o pagamento é liberado quando você recebe o combinado.

Leva 30 segundos · você volta a este tópico ao terminar
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]
 
Voltar
Topo