Hamppu.net
 Etusivu > MS-potilas > captcha  

Viestit, joissa avainsanana ’captcha’

Yhteydenottolomake

tiistai 23. kesäkuuta 2009

Valitsin blogini yhteydenottolomakkeeksi lisäosan WP Contact Form III. Siinä estetään yhteydenottolomakkeella roskapostitus yksin­kertaisella kysymyksellä tyyliin ”2+2 = ?”.

Kysymystä (ja odotettua vastausta) voi muuttaa lisäosan asetuksista, jolloin sen todennäköisyys, että joku jaksaisi viilata jotain roskapostitusskriptiä juuri sinun yhteydenottolomakkeellesi, muuttuu lähes olemattomaksi. Itse päätin kuitenkin tehdä kysymyksestä muuttuvan. Seuraavassa ohjeet, miten sen tein.

Avaa wp-contactform-iii.php (tai vanhemmissa lisäosan versioissa wp-contactform.php). Etsi funktio:

function wpcf_is_challenge($input) {
...
	return $is_challenge;
}

Kommentoi tämä funktio ja lisää sen eteen kaksi funktiota niin, että lopputulos näyttää seuraavalta:

// mspotilas
function wpcf_get_question() 
{
    if($_POST[wpcf_session] == '') {
        srand(time());
        $random = (17 + ((rand()%9)) * 16 + (rand()%9)) ^ 0x96;
        $_POST[wpcf_session] = sprintf("%d", $random);
    }
 
    $random = intval($_POST['wpcf_session']) ^ 0x96;
    $n1 = $random % 16;
    $n2 = intval($random / 16);
    return sprintf("%d + %d =", $n1, $n2);
}
 
// mspotilas
function wpcf_is_challenge($input) {
    $random = intval($_POST['wpcf_session']) ^ 0x96;
    $n1 = $random % 16;
    $n2 = intval($random / 16);
    if($n1 + $n2 == intval($input))
        return true;
    return false;
}
/* commented out mspotilas
function wpcf_is_challenge($input) {
	$is_challenge = false;
	$answer = get_option('wpcf_answer');
	$answer = htmlentities(stripslashes(attribute_escape($answer)));
	if($input == $answer) {
		$is_challenge = true;
	}
	return $is_challenge;
}
*/

Funktio wpcf_get_question luo kysymyksen muotoa ”x + y =”, joissa x ja y ovat numeroita välillä 1–9.

Etsi seuraavaksi rivi, joka alkaa:

    $question =

vaihda sen tilalle rivi:

    $question = wpcf_get_question();//htmlentities(stripslashes(get_option('wpcf_question')));

Etsi rivi:

	<input type="hidden" class="hiddenfield" name="wpcf_stage" value="process" />

(tai vanhemmassa versiossa:)

<input type="hidden" name="wpcf_stage" value="process" />

lisää perään rivi:

	<input type="hidden" class="hiddenfield" name="wpcf_session" value="' . $_POST[wpcf_session] . '" />

Ja sitten testaamaan. :)

WordPressin versio päivitetty 2.8:aan

Päivitin viime viikonloppuna WordPressin ohjelmiston 10.6.2009 julkaistuun versioon 2.8. Samalla päivitin lisäosat uusimpiin versioihinsa. Käyttämäni Simple CAPTCHA-lisäosa muuttui niin, että varmistuskuva näytetään nyt hieman eri paikassa kommentin­syöttö­lomakkeella. Muita lukijoille näkyviä muutoksia päivitykset eivät tuoneet mukanaan.

Huomasin samalla, että WP Contact Form III -lisäosan kehitys on lopetettu, mistä sain kipinän tämän merkinnän kirjoittamiseen.

Ohjelmistopäivityksen yhteydessä lisäsin hakukentälle pika­valinta­näppäimen i, eli useilla selaimilla hakukentän saa aktiiviseksi näppäinyhdistelmällä ALT+i.