В данной статье описаны подробные инструкции по подключению проверочного кода в модуль обратной связи (Feedback) CMS PHP-Nuke.
На примере использовался модуль обратной связи от PHP-Nuke 8, но, на сколько я знаю, этот модуль от ранних версий точно такой же.
Пример того, как это будет выглядеть можно посмотреть тут (защита от спама, решите пример).
Существует много различных вариантов подключения проверочных кодов, в основном это картинка с текстом, который нужно повторить. Такой же метод используется и в PHP-Nuke, но мне больше понравился метод, используемый в статье Защита форм от спама без графического кода Сергея Брундасова.
И так, созданим сначала файл sb_tuning.php в папке includes, со следующим содержанием:
<?php
if (stristr(htmlentities($_SERVER['PHP_SELF']), "sb_tuning.php")) {
Header("Location: /");
die();
}
define('HASH_DELTA', 677312); //нужно изменить
define('HASH_FIELDNAME', 'hfh');
class TProtectCode{
var $hashcode;
var $hashvalue;
var $hashfield;
var $msg = 'TUNING'; // text to display
function GetCode($hmin=1000, $hmax=9999, $fieldname=HASH_FIELDNAME){
$this->hashcode = rand($hmin, $hmax);
$this->hashvalue = md5($this->hashcode + HASH_DELTA);
$this->hashfield = '<input type=hidden name="'.$fieldname.'" value="'.$this->hashvalue.'">';
//проявляем фантазию
$this->msg = $this->hashcode; //simple
//пример кода со сложением
$s1 = rand(1, min(9, $this->hashcode - 1));
$this->msg = (string)($this->hashcode - $s1).'+'.(string)$s1.'=';
}
function CheckCode($code, $hash){
return ($hash == md5($code + HASH_DELTA));
}
}
?>
Теперь открываем файл index.php модуля Feedback
Находим:
Ниже добавляем:
require_once('includes/sb_tuning.php');
$t = new TProtectCode();
$t->GetCode();
Находим:
<i>"._HTMLNOTALLOWED2."</i></td></tr>
Следом добавляем:
<tr><td><strong>Защита от спама<br>(решите пример):<strong></td><td>".$t->msg."</font> <INPUT type=\"text\" NAME=\"Code\" maxlength=\"7\" SIZE=\"7\"></td></tr>
Находим:
<INPUT TYPE=\"submit\" NAME=\"submit\" VALUE=\""._SEND."\">
Следом добавляем:
Находим:
if (empty($message)) {
$message_err = "<div align=\"center\"><span class=\"option\"><strong><em>"._FBENTERMESSAGE."</em></span></font></div>";
$send = "no";
}
Ниже добавляем:
$turning = isset($_POST['Code']) ? (int)$_POST['Code'] : 0;
$hash = isset($_POST[HASH_FIELDNAME]) ? $_POST[HASH_FIELDNAME] : '';
$t = new TProtectCode;
if (!$t->CheckCode($turning, $hash)){
$code_err = "<div align=\"center\"><span class=\"option\"><strong><em>Вы не верно написали проверочный код.</em></span></font></div>";
$send = "no";
}
Находим:
if (!empty($message_err)) {echo "$message_err"; }
Ниже добавляем:
if (!empty($code_err)) {echo "$code_err"; }
Проверяем на работоспособность.