Страница 1 из 1

Форум с авторизацией

Добавлено: 2007-03-27 9:13:47
Dmitriy.A
Скиньте пожалуйста ссылку на скрипт проверки автоматической регистрации на форуме.

Добавлено: 2007-03-27 12:30:27
Alex Keda
невкурил...

Добавлено: 2007-03-27 22:13:25
Dmitriy.A
Ну при регистрации пользователя чтоб надо было цифры с картинки вводить, чтоб роботы не регистрировались.
Уже сделал на пхп. Проверил gocr. Вроде работает Могу поделится если кому нужно.

Добавлено: 2007-03-28 10:28:10
dikens3
Dmitriy.A писал(а):Ну при регистрации пользователя чтоб надо было цифры с картинки вводить, чтоб роботы не регистрировались.
Уже сделал на пхп. Проверил gocr. Вроде работает Могу поделится если кому нужно.
Нужно.

Добавлено: 2007-03-28 14:34:35
selinia
в vbulletin эта опция встроена, боты всё-равно регаются, прогресс на месте нестоит =)

Добавлено: 2007-03-28 19:29:07
Dmitriy.A
Делюсь. для улучшения работы можно добавить цветные цифры которые вводить не надо, но мне пока не требуется.

этим рисуется картинка (шрифт arbat.ttf -можно любой самый корявый)

Код: Выделить всё

bash-2.05b# cat number.php
<?php

session_start();

define('STEP',10);
define('XS',150);

$_SESSION['number'] = rand(1000,9999);
setcookie('reg_num',$_SESSION['number']);

$im = @ImageCreate(XS, 25) or die ("Cannot Initialize new GD image stream");

$background_color = ImageColorAllocate ($im, 255, 255, 255);
$text_color = ImageColorAllocate($im, 00, 0, 0);


ImageSetThickness($im, 1);
ImageRectangle($im,0,0,XS-1,24,$text_color);
for($j=-2; $j<imagesx($im)/STEP+1; $j++){
    //$cur_points_y[] = -rand(0,STEP);
    //$cur_points_x[] = rand($j*STEP+STEP/1.4,$j*STEP+STEP*1.4);
    $last=0;
    for($i=-2; $i<imagesy($im)/STEP+1; $i++)
    {
        $last = STEP*$i+rand(STEP/1.4,STEP*1.4);
        $cur_points_y[] = $last;
        $cur_points_x[] = rand($j*STEP+STEP/1.4,$j*STEP+STEP*1.4);
    }
    $cur_points_y[] = 25;
    $cur_points_x[] = rand($j*STEP+STEP/1.4,$j*STEP+STEP*1.4);
    for($i=1; $i<5; $i++)
    {
        ImageLine($im,$prev_points_x[$i], $prev_points_y[$i], $cur_points_x[$i], $cur_points_y[$i], $text_color);
        ImageLine($im,$prev_points_x[$i-1], $prev_points_y[$i-1], $cur_points_x[$i], $cur_points_y[$i], $text_color);
        ImageLine($im,$prev_points_x[$i], $prev_points_y[$i], $cur_points_x[$i-1], $cur_points_y[$i-1], $text_color);
    }
    unset($prev_points_x);
    unset($prev_points_y);
    $prev_points_x = $cur_points_x;
    $prev_points_y = $cur_points_y;
    unset($cur_points_x);
    unset($cur_points_y);
}

$num = (string)$_SESSION['number'];

for($i = 0; $i < strlen($num); $i++)
{
    $cipher = substr($num, $i, 1);
    $psize = rand(imagesy($im)-8,imagesy($im)-3);
    $angle = rand(0,10)-5;
    $sizes = ImageTTFBBox($psize, $angle, "arbat.ttf", $cipher);
    $width = $sizes[2]-$sizes[0];
    $height = $sizes[1]-$sizes[7];
    $dh = (23-$height)/2;
    $px = (imagesx($im)/strlen($num))*$i+(imagesx($im)/strlen($num)-$width)/2;
    $py = ($height+$dh+1)+rand(-$dh, $dh);
    ImageTTFText ($im, $psize, $angle, $px, $py, $text_color, "arbat.ttf", $cipher);
}

ob_start();
ImagePng($im);
$content=ob_get_contents();
ob_end_flush();

Header("Accept-ranges: bytes");
Header("Content-length: ".strlen($content));
Header("Content-type: image/png");
echo $content;

?>
а тут сравнивается (можно как угодно сделать)

Код: Выделить всё

bash-2.05b# cat index.php
<?php
// Проверяем отправлена ли форма
$action = empty($_POST["number"]) ? false : true;
// Если нет, то выводим ее
if(!$action)
{
echo "<form action=\"index.php\" method=\"post\">";
echo "<input type=\"text\" name=\"number\">";
echo "<img alt=\"Введите цифры на картинке\" src=\"number.php\" border=\"0\"><br>";
echo "<input type=\"submit\" value=\"Run\">";
echo "</form>"; }
else {
// если да, то проверяем код
// если введены не цифры или цифры
// и буквы, то выдаем сообщение
if(!is_numeric($_POST["number"]))
{ die("Неправильный формат кода!"); }
// Проверка на правильность кода
if($_COOKIE['reg_num']!==$_POST["number"])
{
// Если не правильный
echo "Код не совпадает!";
}
else
{ // Если правильный
echo "Код правильный!"; }
}
?>

Добавлено: 2007-03-30 11:27:48
Urgor
if($_COOKIE['reg_num']!==$_POST["number"])
Т.е. теперь даже не надо OCR делать, достаточно код из куки достать.... Эххх, и почему рапида до такого не додумалась? :))))
Вот нашел интересную ссылочку мегасцылка

Добавлено: 2007-03-30 21:29:41
Dmitriy.A
Код можно откуда хочешь достать - хоть в файл копируй и шифруй, потом из файла доставай и расшифровывай - главное рисунок :) Если круче напишешь поделись, я просто не php программер.

Добавлено: 2007-04-02 8:05:46
Urgor

Код: Выделить всё

<?php 
session_start(); 

Генерим фразу, картинку....

$_SESSION['captcha'] = $captcha;
?>
Проверка CAPTCHA

Код: Выделить всё

<?php 
session_start(); 
if (isset($_POST['captcha']) && 
$_POST['captcha'] == $_SESSION['captcha']) 
{ 
// пускаем 
} 
else { 
// не пускаем
} 
?>

Добавлено: 2007-04-02 18:47:11
Dmitriy.A
Можно и так :)