// WR-Guest v 2.2.1 // 01.04.19 г. // WR-Script.ru
error_reporting (E_ALL);
$guestdata="data"; // папка с данными гостевой книги. по-умолчанию: data
include "$guestdata/config.php";
$host=$_SERVER["HTTP_HOST"]; $self=$_SERVER["PHP_SELF"]; $url=str_replace('index.php','',"https://$host$self");
$shapka="
";
// БЛОК загадок - объеденить в один 2-умерный масив!
$rand_zag=array(
"Сидит дед, во сто шуб одет. Кто его раздевает, тот слёзы проливает.",
"Стоит Антошка на одной ножке. Кто его встретит - всяк ему поклонится.",
"Кто поляны белит белым? И на стенах пишет мелом?",
"Шьет пуховые перины, разукрасил все витрины?",
"Покатился по полу колобок, да оставил хвост на семь верст",
"Все обходят это место: здесь земля, как буд-то тесто.",
"Здесь осока, кочки, мхи, нет опоры для ноги.",
"умный Ивашка в деревянной рубашке. По белому полю пойдёт, всяк его след поймет",
"Кто приходит, кто уходит, все ее за ручку водят",
"Летит - кричит, сядет - молчит, кто его убьет - свою кровь прольет");
// БЛОК ответов на загадки
$rand_qwe=array(
"лук",
"гриб",
"мороз",
"мороз",
"клубок",
"болото",
"болото",
"карандаш",
"дверь",
"комар");
if (isset($_GET['image'])) {
// Функция с цифрами защиты
$st="R0lGODlhCgAMAIABAFNTU////yH5BAEAAAEALAAAAAAKAAwAAAI"; // общая часть для всех рисунков
function imgwr($st,$num){
if ($num=="0") {$len="63"; $number=$st."WjIFgi6e+QpMP0jin1bfv2nFaBlJaAQA7";}
if ($num=="1") {$len="61"; $number=$st."UjA1wG8noXlJsUnlrXhE/+DXb0RUAOw==";}
if ($num=="2") {$len="64"; $number=$st."XjIFgi6e+QpMPRlbjvFtnfFnchyVJUAAAOw==";}
if ($num=="3") {$len="64"; $number=$st."XjIFgi6e+Qovs0RkTzXbj+3yTJnUlVgAAOw==";}
if ($num=="4") {$len="64"; $number=$st."XjA9wG8mWFIty0amczbVJDVHg9oSlZxQAOw==";}
if ($num=="5") {$len="63"; $number=$st."WTIAJdsuPHovSKGoprhs67mzaJypMAQA7";}
if ($num=="6") {$len="63"; $number=$st."WjIFoB6vxmFw0pfpihI3jOW1at3FRAQA7";}
if ($num=="7") {$len="61"; $number=$st."UDI4Xy6vtAIzTyPpg1ndu9oEdNxUAOw==";}
if ($num=="8") {$len="63"; $number=$st."WjIFgi6e+QpMP2slSpJbn7mFeWDlYAQA7";}
if ($num=="9") {$len="64"; $number=$st."XjIFgi6e+QpMP0jinvbT2FGGPxmlkohUAOw==";}
header("Content-type: image/gif");
header("Content-length: $len");
echo base64_decode($number); }
// Вывод изображений на экран (все кодированы - робот не пройдёт)
if (array_key_exists("image", $_REQUEST)) { $num=$_REQUEST["image"];
for ($i=0; $i<10; $i++) {if (md5($i+$rand_key)==$num) {imgwr($st,$i); die();}} }
exit;}
$rnd_do=array("плюс","минус","умножить");
function replacer ($text) { // ФУНКЦИЯ очистки кода
$text=str_replace(" ",' ',$text);
$text=str_replace(">",'>',$text);
$text=str_replace("<",'<',$text);
$text=str_replace("\"",'"',$text);
$text=preg_replace("/\n\n/",'
',$text);
$text=preg_replace("/\n/",' ',$text);
$text=preg_replace("/\\\$/",'$',$text);
$text=preg_replace("/\r/",'',$text);
$text=preg_replace("/\\\/",'\',$text);
// если magic_quotes включена - чистим везде СЛЭШи в этих случаях: одиночные (') и двойные кавычки ("), обратный слеш (\)
if (get_magic_quotes_gpc()) { $text=str_replace("\"",'"',$text); $text=str_replace("\'",'\'',$text); $text=str_replace("\\",'\',$text); }
$text=str_replace("\r\n"," ",$text);
$text=str_replace("\n\n",'
',$text);
$text=str_replace("\n",' ',$text);
$text=str_replace("\t",'',$text);
$text=str_replace("\r",'',$text);
$text=str_replace(' ',' ',$text);
return $text; }
function nospam() { global $max_key,$rand_key; // Функция АНТИСПАМ 2011 !
if (array_key_exists("image", $_REQUEST)) { $num=replacer($_REQUEST["image"]);
for ($i=0; $i<10; $i++) {if (md5("$i+$rand_key")==$num) {imgwr($st,$i); die();}} }
$xkey=""; mt_srand(time()+(double)microtime()*1000000);
$dopkod=mktime(0,0,0,date("m"),date("d"),date("Y")); // доп.код: меняется каждые 24 часа
$stime=md5("$dopkod+$rand_key");// доп.код
echo'
Защитный код:
';
$nummax=0; for ($i=0; $i<=$max_key; $i++) {
$snum[$i]=mt_rand(0,9); $psnum=md5($snum[$i]+$rand_key+$dopkod);
$secret=mt_rand(0,1); $styles='bgcolor=#FFFF00';
if ($nummax<3) { if ($secret==1 or $i==0) {$styles='bgcolor=#00CCFF'; $xkey=$xkey.$snum[$i]; $nummax++;}}
echo "
\r\n";}
$xkey=md5("$xkey+$rand_key+$dopkod"); //число + ключ из config.php + код меняющийся кажые 24 часа
print"
(введите цифры, которые на голубом фоне)
";
return; }
if (isset($_GET['savemsg'])) { // Событие добавления сообщения
// возвращаем значения данных из формы и присваиваем их переменным
if (isset ($_POST['name']) & isset ($_POST['msg']) & isset ($_POST['email'])) {
$name=replacer($_POST['name']); $msg=replacer($_POST['msg']); $email=replacer($_POST['email']);} else exit;
$ip=$_SERVER['REMOTE_ADDR']; // определяем IP юзера
//Проверка ЗАПРЕТА IP-пользователя на добавление объявлений (файл bad_ip.csv)
if (is_file("$guestdata/bad_ip.csv")) { $lines=file("$guestdata/bad_ip.csv"); $i=count($lines);
if ($i>0) {do {$i--; $idt=explode("|", $lines[$i]);
if ($idt[0]===$ip) exit("
Админитратор заблокировал для Вашего IP: $ip возможность добавлять что-либо по следующей причине:
$idt[1].
Вам разрешено просматривать сообщения, а вот ДОБАВЛЯТЬ СООБЩЕНИЯ категорически ЗАПРЕЩЕНО!
");
} while($i > "1");} unset($lines);}
if (isset($_POST['www'])) $www=$_POST['www']; else $www="";
if (isset($_POST['addpole'])) $addpole=$_POST['addpole']; else $addpole="";
if (isset($_POST['rezerved1'])) $rezerved1=$_POST['rezerved1']; else $rezerved1="";
if (isset($_POST['rezerved2'])) $rezerved2=$_POST['rezerved2']; else $rezerved2="";
if (isset($_POST['rezerved3'])) $rezerved3=$_POST['rezerved3']; else $rezerved3="";
// БЛОК ГЕНЕРИРУЕТ СЛЕДУЮЩИЙ ПО ПОРЯДКУ НОМЕР сообщения, начиная просмотр с 1000
$rn=1000; $allid=null; $records=file("$guestdata/guest.csv"); $imax=count($records); $i=$imax;
if ($i > 0) { do {$i--; $rd=explode("|",$records[$i]); $allid[$i]=$rd[0]; } while($i>0);
//natcasesort($allid); // сортируем по возрастанию
do $rn++; while(in_array($rn,$allid)); }
// Защита от взлома - проверяется с какой страницы пришёл юзер
$fromurl=getenv("HTTP_REFERER"); if (substr_count($fromurl,$host)<1) exit("Хакер? ха-ха ...\n");
sleep(1); // мелкая защита от БОТОВ
if ($antispam=="2") {
$bada="$shapka $back Введённый вами код НЕ совпадает с расчётным!";
if (isset($_POST['usernum'])) $usernum=$_POST['usernum']; else exit("$bada");
if (isset($_POST['chek'])) $chek=$_POST['chek']; else exit("$bada");
$dt=explode("|",$chek);
if ($dt[1]==0) $number=$dt[8]+$dt[2];
if ($dt[1]==1) $number=$dt[8]-$dt[2];
if ($dt[1]==2) $number=$dt[8]*$dt[2];
if ($usernum!=$number) exit("$bada"); }
if ($antispam=="3") {
$qwe=$_POST['qwe']; $answer=$_POST['answer'];
if (strtolower($rand_qwe[$qwe])!=strtolower($answer)) exit("$shapka $back ОТВЕТ НЕ верен! Попробуйте снова."); }
if ($antispam=="4") {
//--А-Н-Т-И-С-П-А-М--проверка кода--
if (!isset($_POST['usernum']) or !isset($_POST['xkey']) or !isset($_POST['stime']) ) exit("данные из формы не поступили!");
$usernum=replacer($_POST['usernum']); $xkey=replacer($_POST['xkey']); $stime=replacer($_POST['stime']);
$dopkod=mktime(0,0,0,date("m"),date("d"),date("Y")); // доп.код. Меняется каждые 24 часа
$usertime=md5("$dopkod+$rand_key");// доп.код
$userkey=md5("$usernum+$rand_key+$dopkod");
if (($usertime!=$stime) or ($userkey!=$xkey)) exit("введён ОШИБОЧНЫЙ код!"); }
if ($name == "" || strlen($name) > $maxname) exit("$shapka $back ваше имя или пустое, или превышает $maxname символов!
");
if ($msg == "" || strlen($msg) > $maxmsg) exit("$shapka $back ваше сообщение или пустое или превышает $maxmsg символов.");
if (!preg_match('/^([0-9a-zA-Z]([-.w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-w]*[0-9a-zA-Z].)+[a-zA-Z]{2,9})$/si',$email) and strlen($email)>50 and $email!="") exit("$shapka $back и введите корректный E-mail адрес!");
$msg=str_replace("|","I",$msg);
$name=wordwrap($name,24,' ',1); // разрываем слишком длинные строки
$msg=wordwrap($msg,75,' ',1);
$today=time(); // определяем текущее время
// производим запись данных в файл по шаблону: ключ|штамп_времени|1|IP|имя|емайл|www-адрес|доп_поле|собщение|ответ_админа|резервное_поле1|резервное_поле2|резервное_поле3|
$text="$rn|$today|1|$ip|$name|$email|$www|$addpole|$msg||$rezerved1|$rezerved2|$rezerved3|"; $text=replacer($text);
if ($antiflud=="1") { // функция АНТИФЛУД здесь!
$linesn = file("$guestdata/guest.csv"); $in=count($linesn);
if ($in > 0) {
$lines=file("$guestdata/guest.csv"); $i=count($lines)-1; $itogo=$i; $dtf=explode("|",$lines[$i]);
$txtback="$dtf[3]|$dtf[4]|$dtf[5]|$dtf[8]|"; $lastmsg=$dtf[2];
$dtb=explode("|",$text);
$txtflud="$dtb[3]|$dtb[4]|$dtb[5]|$dtb[8]|";
$today=time();
$lastmsg=$lastmsg+30;
if ($lastmsg>$today) {
$eshe=$lastmsg-$today; exit("$back Чаще 30 секунд запрещено размещать сообщения. Подождите ещё $eshe секунд!");
if ($txtflud==$txtback) exit("$back Данное сообщение уже размещено. Флудить в гостевой запрещено!"); }
}
if ($undermoder==TRUE) $fp=fopen("$guestdata/guest-moder.csv","a+"); else $fp=fopen("$guestdata/guest.csv","a+");
flock ($fp,LOCK_EX);
fputs($fp,"$text\r\n");
flock ($fp,LOCK_UN);
fclose($fp);
if ($sendmail=="1") { // отправка сообщения админу на мыло
$headers=null;
$headers.="Content-Type: text/plain; charset=UTF-8\r\n";
$headers.="From: ".$name." <".$email.">\r\n";
$headers.="X-Mailer: PHP/".phpversion()."\r\n";
// Собираем всю информацию в теле письма
$allmsg = $gname.chr(13).chr(10).'Новое сообщение в гостевой: '.$host.$self.chr(13).chr(10).'Имя: '.$name.chr(13).chr(10).'E-mail: '.$email.chr(13).chr(10).'Сообщение: '.$msg.chr(13).chr(10);
mail("$adminemail", "$gname (сообщение)", $allmsg, $headers); // Отправляем письмо майлеру на съедение ;-)
}
if ($undermoder==TRUE) $addtext=" После одобрения модератором оно будет опубликовано."; else $addtext="";
print "$shapka
Спасибо, $name, Ваше сообщение успешно добавлено. $addtext
Через несколько секунд Вы будете автоматически перемещены на первую страницу гостевой.
";
exit;
}}
// Типо главной страницы
// считываем данные в память
$lines=file("$guestdata/guest.csv"); $maxi=count($lines)-1; $i=0; $maxpage=ceil(($maxi+1)/$qq);
// Исключаем ошибку вызова несуществующей страницы
if (!isset($_GET['page'])) $page=1; else {$page=$_GET['page']; if (!ctype_digit($page)) $page=1; if ($page<1) $page=1;}
if ($page>$maxpage) { $page=$maxpage;
$shapka=str_replace('','',$shapka);
print"$shapka