Valitsin blogini yhteydenottolomakkeeksi lisäosan WP Contact Form III. Siinä estetään yhteydenottolomakkeella roskapostitus yksinkertaisella 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:
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 kommentinsyö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 pikavalintanäppäimen i, eli useilla selaimilla hakukentän saa aktiiviseksi näppäinyhdistelmällä ALT+i.