IPB

Здравствуйте, Гость ( Вход | Регистрация )

 
Ответить в этой темеОткрыть новую тему
> ModeratePost+Captcha
Gene72
сообщение Jul 4 2007, 05:46 AM
Сообщение #1


Member
**

Группа: User
Сообщений: 26
Регистрация:
18-December 05
Пользователь №: 37



Помогите, как заставить работать вместе плагин NP_ModeratePost и NP_Captcha. Или подскажите, что совместно с ModeratePost можно использовать

В коментариях captcha работает.
К началу страницы
 
+Цитировать Сообщение
Suvoroff
сообщение Jul 10 2007, 09:11 PM
Сообщение #2


Support Staff
***

Группа: Admin
Сообщений: 1,170
Регистрация:
16-July 05
Из: nucleus.com.ru
Пользователь №: 1



Как вариант внедрить вручную капчу, я подробно как не знаю, покопаться немного надо.
Другой вариант использовать http://wakka.xiffy.nl/submitsystem но у него минус - нельзя выбирать категорию, что доставляет неудобство.
Лично я оставил себе NP_ModeratePost толкьо периодически чищу от спама накопившиеся новости.


--------------------
К началу страницы
 
+Цитировать Сообщение
Gene72
сообщение Jul 11 2007, 07:09 AM
Сообщение #3


Member
**

Группа: User
Сообщений: 26
Регистрация:
18-December 05
Пользователь №: 37



Я пробовал это проделать. Но увы sad.gif Несилен в программировании.

Брал вот эту captch-у

КОД
<?php

/***************************************

Han-Kwang Nienhuys' PHP captcha
Copyright June 2007
Home page: http://www.lagom.nl/linux/hkcaptcha/

This file may be distributed, modified, and used freely as long as
the above attribution and this copyright message is preserved.

Yet another captcha implementation in PHP.  This one is written with
the current state of captcha-defeating research in mind. Apart from a
letter distortion that is more advanced than just rotating the
letters, the clutter is designed to make segmentation of the image
into separate letter glyphs hard to do automatically.

The 5-letter code is stored into the PHP session variable
$_SESSION['captcha_string']; see the examples example.html and verify.php.

***************************************/


// CONFIG
$font = "include/VeraSeBd.ttf";
$signature = "www.lagom.nl";
$perturbation = 1.0; // bigger numbers give more distortion; 1 is standard
$imgwid = 200; // image width, pixels
$imghgt = 100; // image height, pixels
$numcirc = 4; // number of wobbly circles
$numlines = 3; // number of lines
// END CONFIG

// global vars
$ncols = 20; // foreground or background cols
// end global vars


function frand()
{
  return 0.0001*rand(0,9999);
}

// wiggly random line centered at specified coordinates
function randomline($img, $col, $x, $y)
{
  $theta = (frand()-0.5)*M_PI*0.7;
  global $imgwid;
  $len = rand($imgwid*0.4,$imgwid*0.7);
  $lwid = rand(0,2);

  $k = frand()*0.6+0.2; $k = $k*$k*0.5;
  $phi = frand()*6.28;
  $step = 0.5;
  $dx = $step*cos($theta);
  $dy = $step*sin($theta);
  $n = $len/$step;
  $amp = 1.5*frand()/($k+5.0/$len);
  $x0 = $x - 0.5*$len*cos($theta);
  $y0 = $y - 0.5*$len*sin($theta);

  $ldx = round(-$dy*$lwid);
  $ldy = round($dx*$lwid);
  for ($i = 0; $i < $n; ++$i) {
    $x = $x0+$i*$dx + $amp*$dy*sin($k*$i*$step+$phi);
    $y = $y0+$i*$dy - $amp*$dx*sin($k*$i*$step+$phi);
    imagefilledrectangle($img, $x, $y, $x+$lwid, $y+$lwid, $col);
  }
}

// amp = amplitude (<1), num=numwobb (<1)
function imagewobblecircle($img, $xc, $yc, $r, $wid, $amp, $num, $col)
{
  $dphi = 1;
  if ($r > 0)
    $dphi = 1/(6.28*$r);
  $woffs = rand(0,100)*0.06283;
  for ($phi = 0; $phi < 6.3; $phi += $dphi) {
    $r1 = $r * (1-$amp*(0.5+0.5*sin($phi*$num+$woffs)));
    $x = $xc + $r1*cos($phi);
    $y = $yc + $r1*sin($phi);
    imagefilledrectangle($img, $x, $y, $x+$wid, $y+$wid, $col);
  }
}

// make a distorted copy from $tmpimg to $img. $wid,$height apply to $img,
// $tmpimg is a factor $iscale bigger.
function distorted_copy($tmpimg, $img, $width, $height, $iscale)
{
  $numpoles = 3;

  // make an array of poles AKA attractor points
  global $perturbation;
  for ($i = 0; $i < $numpoles; ++$i) {
    do {
      $px[$i] = rand(0, $width);
    } while ($px[$i] >= $width*0.3 && $px[$i] <= $width*0.7);
    do {
      $py[$i] = rand(0, $height);
    } while ($py[$i] >= $height*0.3 && $py[$i] <= $height*0.7);
    $rad[$i] = rand($width*0.4, $width*0.8);
    $tmp = -frand()*0.15-0.15;
    $amp[$i] = $perturbation * $tmp;
  }

  // get img properties bgcolor
  $bgcol = imagecolorat($tmpimg, 1, 1);
  $width2 = $iscale*$width;
  $height2 = $iscale*$height;
  
  // loop over $img pixels, take pixels from $tmpimg with distortion field
  for ($ix = 0; $ix < $width; ++$ix)
    for ($iy = 0; $iy < $height; ++$iy) {
      $x = $ix;
      $y = $iy;
      for ($i = 0; $i < $numpoles; ++$i) {
    $dx = $ix - $px[$i];
    $dy = $iy - $py[$i];
    if ($dx == 0 && $dy == 0)
      continue;
    $r = sqrt($dx*$dx + $dy*$dy);
    if ($r > $rad[$i])
      continue;
    $rscale = $amp[$i] * sin(3.14*$r/$rad[$i]);
    $x += $dx*$rscale;
    $y += $dy*$rscale;
      }
      $c = $bgcol;
      $x *= $iscale;
      $y *= $iscale;
      if ($x >= 0 && $x < $width2 && $y >= 0 && $y < $height2)
    $c = imagecolorat($tmpimg, $x, $y);
      imagesetpixel($img, $ix, $iy, $c);
    }
}

// add grid for debugging purposes
function addgrid($tmpimg, $width2, $height2, $iscale, $color) {
  $lwid = floor($iscale*3/2);
  imagesetthickness($tmpimg, $lwid);
  for ($x = 4; $x < $width2-$lwid; $x+=$lwid*2)
    imageline($tmpimg, $x, 0, $x, $height2-1, $color);
  for ($y = 4; $y < $height2-$lwid; $y+=$lwid*2)
    imageline($tmpimg, 0, $y, $width2-1, $y, $color);
}


function warped_text_image($width, $height, $string)
{
  // internal variablesinternal scale factor for antialias
  $iscale = 3;

  // initialize temporary image
  $width2 = $iscale*$width;
  $height2 = $iscale*$height;
  $tmpimg = imagecreate($width2, $height2);
  $bgColor = imagecolorallocatealpha ($tmpimg, 192, 192, 192, 100);
  $col = imagecolorallocate($tmpimg, 0, 0, 0);

  // init final image
  $img = imagecreate($width, $height);
  imagepalettecopy($img, $tmpimg);    
  imagecopy($img, $tmpimg, 0,0 ,0,0, $width, $height);
  
  // put straight text into $tmpimage
  global $font;
  $fsize = $height2*0.25;
  $bb = imageftbbox($fsize, 0, $font, $string);
  $tx = $bb[4]-$bb[0];
  $ty = $bb[5]-$bb[1];
  $x = floor($width2/2 - $tx/2 - $bb[0]);
  $y = round($height2/2 - $ty/2 - $bb[1]);
  imagettftext($tmpimg, $fsize, 0, $x, $y, -$col, $font, $string);

  // addgrid($tmpimg, $width2, $height2, $iscale, $col); // debug

  // warp text from $tmpimg into $img
  distorted_copy($tmpimg, $img, $width, $height, $iscale);

  // add wobbly circles (spaced)
  global $numcirc;
  for ($i = 0; $i < $numcirc; ++$i) {
    $x = $width * (1+$i) / ($numcirc+1);
    $x += (0.5-frand())*$width/$numcirc;
    $y = rand($height*0.1, $height*0.9);
    $r = frand();
    $r = ($r*$r+0.2)*$height*0.2;
    $lwid = rand(0,2);
    $wobnum = rand(1,4);
    $wobamp = frand()*$height*0.01/($wobnum+1);
    imagewobblecircle($img, $x, $y, $r, $lwid, $wobamp, $wobnum, $col);
  }
  
  // add wiggly lines
  global $numlines;
  for ($i = 0; $i < $numlines; ++$i) {
    $x = $width * (1+$i) / ($numlines+1);
    $x += (0.5-frand())*$width/$numlines;
    $y = rand($height*0.1, $height*0.9);
    randomline($img, $col, $x, $y);
  }

  return $img;
}

function add_text($img, $string)
{
  $cmtcol = imagecolorallocatealpha ($img, 128, 0, 0, 64);
  imagestring($img, 5, 10, imagesy($img)-20, $string, $cmtcol);
}


// start main program
session_start();

// generate  5 letter random string
$rand = "";
// some easy-to-confuse letters taken out C/G I/l Q/O h/b
$letters = "ABDEFHKLMNOPRSTUVWXZabdefghikmnopqrstuvwxyz";
for ($i = 0; $i < 5; ++$i) {
  $rand .= substr($letters, rand(0,strlen($letters)-1), 1);
}

// create the hash for the random number and put it in the session
$_SESSION['captcha_string'] = $rand;

$image = warped_text_image($imgwid, $imghgt, $rand);
add_text($image, $signature);

// send several headers to make sure the image is not cached    
// taken directly from the PHP Manual
    
// Date in the past  
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");  
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");  
header("Cache-Control: no-store, no-cache, must-revalidate");  
header("Cache-Control: post-check=0, pre-check=0", false);  
header("Pragma: no-cache");      
header('Content-type: image/png');

// send the image to the browser
imagepng($image);

// destroy the image to free up the memory
imagedestroy($image);
?>


В самом плагине в самом начале NP_ModeratePost прописываю. Это, как я понимаю, нужно для проверки.
КОД
<?// check captcha post form field, return 1 if OK
// it is case-insensitive.
function check_captcha()
{
  if (!isset($_POST['captcha']))
    return 0;
  $userletters = strtoupper($_POST['captcha']);
  session_start();
  if (!isset($_SESSION['captcha_string']))
    return 0;
  if ($userletters === strtoupper($_SESSION['captcha_string'])) {
    // make sure that the code is only used once
    unset($_SESSION['captcha_string']);
    return 1;
  }
  return 0;  
}

?>


Далее прописал:
КОД
Captcha test: <?php print check_captcha() ? "PASSED" : "FAILED"; ?>


В шаблоне плагина вставляю вот такую строчку.
<img src="http://sub.test2.ru/nucleus/plugins/moderatepost/captcha-image.php" alt="Random letters" id="captcha" />
И поле для ввода символов.

Заполняю поля формы.
Нажимаю ОК! Код каптчи не введен.
Captcha test:
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at z:\home\test2.ru\sub\nucleus\plugins\NP_ModeratePost.php:23) in z:\home\test2.ru\sub\nucleus\plugins\NP_ModeratePost.php on line 12
FAILED
Warning: Cannot modify header information - headers already sent by (output started at z:\home\test2.ru\sub\nucleus\plugins\NP_ModeratePost.php:23) in z:\home\test2.ru\sub\nucleus\plugins\NP_ModeratePost.php on line 175

Сообщение отправляется. Ни какой проверки не проводится на наличие кода каптчи.sad.gif

Вернее наличие кода проверяется. Но форма, не смотрит, есть код каптчи или его нет.

Есть программисты?
Где и что нужно исправить в плагине?

Думаю что гдето здесь собака зарыта
header('Location: '.requestVar('modpost_redirect'));
К началу страницы
 
+Цитировать Сообщение
Gene72
сообщение Jul 23 2007, 12:29 PM
Сообщение #4


Member
**

Группа: User
Сообщений: 26
Регистрация:
18-December 05
Пользователь №: 37



Что-то ни кто не может помочь.sad.gif

Продолжаем тему.

Нашол еще один скрипт, так называемого кода "captcha". написан он не на PHP а на Perl. Лежит вот здесь:
http://www.arsengine.org.ru/upload/dc/1168...64/spamcode.zip

Вставляю его в форму, так, как написано в ReadMe.
Если буквенные символы с картинки не заполнены, то форма обрабатывается и отвечает - "не все поля заполнены".
Но когда поля заполнены, то выводится сообщение: "Unexisting action: submit?modpost_blogid=1"

Может тут кто поможет?
К началу страницы
 
+Цитировать Сообщение
Gene72
сообщение Dec 20 2007, 11:32 AM
Сообщение #5


Member
**

Группа: User
Сообщений: 26
Регистрация:
18-December 05
Пользователь №: 37



Поможет мне всетаки кто нибудь, вставить каптчу в плугин moderatepost?

submitsystem не предлагать.
К началу страницы
 
+Цитировать Сообщение

Ответить в этой темеОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 22nd November 2019 - 12:10 AM
Рецепты - Скачать программы - Scripts