Spämmikäyttäjien torjuminen WordPressissä

WordPress-sivustoille, joille rekisteröityminen on avointa, tulee helposti paljon spämmirekisteröitymisiä. Ongelman ratkaisemiseen on erilaisia vaihtoehtoja. Itse ratkaisin sen Relevanssin sivuilla estämällä suorat rekisteröitymiset, sivustolle pääsee rekisteröitymään vain maksamalla lisenssin, mutta Lautapelioppaaseen piti keksiä jotain muuta. Päädyin yksinkertaiseen captcha-ratkaisuun:

Lautapelioppaan rekisteröitymislomake, jossa on käyttäjätunnus- ja sähköpostiosoitekenttien lisäksi ylimääräinen kenttä, johon pitää kirjoittaa "lautapeli". Lisäksi logo on vaihdettu ja lomakkeelle on lisätty tietoa rekisteriselosteesta.

Tämä yksinkertainen ratkaisu ajaa asian ja on blokannut spämmikäyttäjät sataprosenttisesti vaivaamatta liikaa oikeita käyttäjiä.

Koodipuolella tämä näyttää tältä:

<?php

add_action( 'login_enqueue_scripts', 'lautapeliopas_logo' );
add_filter( 'login_headerurl', 'lautapeliopas_logo_url' );
add_filter( 'login_headertext', 'lautapeliopas_logo_title' );
add_filter( 'registration_errors', 'lautapeliopas_rekisterointi_tarkistus', 10, 3 );
add_action( 'register_form', 'lautapeliopas_reg_field' );

/**
 * Jos sanakentässä ei ole oikeaa sanaa, lisää virheilmoituksen.
 * Jos `registration_errors` palauttaa virheitä, rekisteröityminen
 * ei onnistu.
 */
function lautapeliopas_rekisterointi_tarkistus( $errors, $sanitized_user_login, $user_email ) {
	if ( strtolower( trim( $_POST['sana'] ) ) !== 'lautapeli' ) {
	    $errors->add( 'lautapeli', '<strong>Huomio</strong>: kirjoita tekstikenttään <em>lautapeli</em>.' );
	}
    return $errors;
}

/**
 * Lisätietoja rekisteröintikenttään.
 */
function lautapeliopas_reg_field() {
    $user_extra = ( isset( $_POST['sana'] ) ) ? $_POST['sana'] : '';
    ?>

    <p>
        <label for="sana">Kirjoita tähän kenttään <em>lautapeli</em>:<br />
            <input type="text" name="sana" id="sana" class="input" value="<?php echo esc_attr( stripslashes( $user_extra ) ); ?>" size="25" /></label>
    </p>

	<p>Rekisteröitymällä käyttäjäksi hyväksyt, että Lautapeliopas käsittelee
	henkilötietojasi (käyttäjätunnus ja sähköpostiosoite) <a
	href="/rekisteriseloste/">rekisteriselosteen</a> mukaisella
	tavalla. Lautapelioppaan käyttäjärekisteriin kirjataan nimi ja sähköpostiosoite. Tietoja
	ei luovuteta ulkopuolisille.</p>
    <?php
}

/**
 * Asettaa kirjautumissivun logoksi Lautapelioppaan logon.
 */
function lautapeliopas_logo() { ?>
    <style type="text/css">
        #login h1 a, .login h1 a {
            background-image: url('/wp-content/uploads/2019/12/lautapeliopas-logo-240x180-1.png');
			width:120px;
			height:90px;
			background-size: 120px 90px;
			background-repeat: no-repeat;
        	padding-bottom: 30px;
        }
    </style>
<?php }

/**
 * Kirjautumissivun logon linkin URL.
 */
function lautapeliopas_logo_url() {
    return home_url();
}

/**
 * Kirjautumissivun logon title-attribuutti.
 */
function lautapeliopas_logo_title() {
    return 'Lautapeliopas';
}

Koodi lisää tarkistuskentän ja huolehtii virheilmoituksista, jos sana on väärin. Lisäksi se lisää kirjautumissivulle CSS:ää, joka vaihtaa kirjautumissivulla oletuksena olevan WordPress-logon Lautapelioppaan logoksi, kääntää logossa olevan linkin osoittamaan WordPressin sivujen sijasta Lautapelioppaan etusivulle ja muuttaa logon title-attribuutiksi ”Lautapeliopas”.

Tämä koodi on teemassa omassa tiedostossaan, joka on lisätty teeman functions.php-tiedostoon require_once 'login.php';.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *

This site uses Akismet to reduce spam. Learn how your comment data is processed.