Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Выбор случайной переменной

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

DarkSmoke



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Хочу сделать защиту от спама на сайте.
Придумал простую логику. Даже нет, не придумал - увидел.  
Случайным оброзом задаются загадки, и пользователь должен ввести отгадку.
Как это реализовать, принцеп каков, основные функции какие?
1. вот к примеру рендомный вывод загадок?
2. проверка на правельный ответ?

Всего записей: 962 | Зарегистр. 08-10-2005 | Отправлено: 23:00 20-05-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DarkSmoke
мда.. подумать пробовали вообще или как?  
массив с загадкой и ответом в каждом элементе.
генерим случайное целое число в пределах количества элементов в массиве и выводим тот элемент, индекс которого соответствует числу.


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:05 20-05-2009 | Исправлено: Cheery, 23:11 20-05-2009
DarkSmoke



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Я извиняюсь, можно пример?

Всего записей: 962 | Зарегистр. 08-10-2005 | Отправлено: 23:48 20-05-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DarkSmoke

Цитата:
Я извиняюсь, можно пример?

мда.. советую перечитать пару учебников..
но если такое вы даже на интуитивном уровне не "ловите", то вам не суждено программировать
$quest=array(
array('question'=>'Вопрос №1','answer'=>'Ответ №1'),
array('question'=>'Вопрос №2','answer'=>'Ответ №2'),
array('question'=>'Вопрос №3','answer'=>'Ответ №3'),
array('question'=>'Вопрос №4','answer'=>'Ответ №4')
);
$number=rand(0,count($quest)-1);  
echo "Вопрос:<br>".$quest[$number]['question'];
echo "<br>Ответ:<br>".$quest[$number]['answer'];


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:16 21-05-2009
DarkSmoke



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Как можно сделать массив с загадкой, ответом еще и с номером массива?

Всего записей: 962 | Зарегистр. 08-10-2005 | Отправлено: 00:17 21-05-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DarkSmoke

Цитата:
Как можно сделать массив с загадкой, ответом еще и с номером массива?

задав нормально вопрос
что такое
Цитата:
с номером массива
?

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:18 21-05-2009 | Исправлено: Cheery, 00:24 21-05-2009
DarkSmoke



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Чет я совсем не понимаю.
А как это проверять  

Код:
 
<form name="" action="" method="post">
    <input name="Name" type="text" value=""><br />
    <input type="submit" name="send" value="Send">
</form>
<?
if(!empty($_POST['send'])) {
Как их сравнивать? На основе чего?  
}
?>
 

Всего записей: 962 | Зарегистр. 08-10-2005 | Отправлено: 00:32 21-05-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DarkSmoke
Вам определенно нельзя программировать.
Выдаете вопрос, запомнив, к примеру в сессии, его $number
по получению ответа берете $number
по нему достаете из массива ответ и сравниваете с тем, что получен из формы

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:34 21-05-2009
DarkSmoke



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Млин. Сложно как то все. Епт.
Просто не могу понять чем надо пользоваться и когда.
Спасибо, Пойду ковырять.
 
Добавлено:
Прикрутил на сайт скрипт скачанный с нета.
А спам все равно попадает, что делать?
Подскажите пожалуйста
http://diodon-club.com.ua/guestbook.php

Всего записей: 962 | Зарегистр. 08-10-2005 | Отправлено: 01:01 21-05-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Прикрутил на сайт скрипт скачанный с нета.  

прикрутили что и куда?  
как вы проверку делаете??? от этого и копайте

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 03:00 21-05-2009
DarkSmoke



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
У меня такое впечатление что они в обход всех проверок добавляют.

Всего записей: 962 | Зарегистр. 08-10-2005 | Отправлено: 03:45 21-05-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DarkSmoke

Цитата:
У меня такое впечатление что они в обход всех проверок добавляют.

а я вам точно скажу, что мы не обладаем телепатическими способностями, чтобы догадаться без кода что и как работает.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 03:50 21-05-2009
DarkSmoke



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Вот к примеру последний вариант, перепробовал кучу, и все равно добавляется спам - это не выносимо!

Код:
 
    if(isset($_POST['code']))
    {
        if(empty($_POST['name']))
        {
            echo "<br /><br />Имя не может быть пустым.<br />
                Вернитесь <a href=\"javascript:history.back()\" onMouseOver=\"window.status=\'Назад\';return true\">назад</a> и исправте ошибку.";
            exit;
        }
 
        if(!empty($_POST['email']))
        {
            $email = trim($_POST['email']);
            if(!TrueEmail($email))
            {
                echo "<br /><br />E-mail не корректен!<br />Вернитесь <a href=\"javascript:history.back()\" onMouseOver=\"window.status=\'Назад\';return true\">назад</a> и исправте ошибку.";
                exit;
            }
        }
 
        if(empty($_POST['body']))
        {
            echo "<br /><br />Текст сообщения не может быть пустым.<br />
                Вернитесь <a href=\"javascript:history.back()\" onMouseOver=\"window.status=\'Назад\';return true\">назад</a> и исправте ошибку.";
            exit;
        }
 
        if ($_POST['code'] == "6")
        {
            $date = date("Y-m-d");
            $name = trim($_POST['name']);
            $name = Obrez($name, 35, 50);
            $body = trim($_POST['body']);
            $body = Obrez($body, 40, 1000);
            $ip = $_SERVER['REMOTE_ADDR'];
            $query = @mysql_query("INSERT INTO $table_gbook (`name`,`body`,`email`,`ip`,`date`) VALUES ('".mysql_real_escape_string($name)."','".mysql_real_escape_string($body)."','".mysql_real_escape_string($email)."','".mysql_real_escape_string($ip)."','".$date."')");
            echo "<script type=\"text/javascript\"> window.location = \"guestbook.php\";</script>";
        }
        else
        {
            echo "<br /><br />Неверный код подтверждения!!!<br />
            Вернитесь <a href=\"javascript:history.back()\" onMouseOver=\"window.status=\'Назад\';return true\">назад</a> и исправте ошибку.";
            exit;
        }
    }
 

 
Добавлено:

Код:
 
        print "<br /><br />
        <form name=\"gb\" action=\"guestbook.php\" method=\"post\">
            <table border=\"0\" align=\"center\">
                <tr>
                    <td>Имя*</td>
                    <td>
                            <input name=\"name\" type=\"text\" size=\"40\"><br />
                    </td>
                </tr>
                <tr>
                    <td>E-mail</td>
                    <td>
                            <input name=\"email\" type=\"text\" size=\"40\"><br />
                    </td>
                </tr>
                <tr>
                    <td colspan=2>
                        <div id=right><small>если вы хотите чтобы Вам ответили оставьте свой e-mail</small></div>
                    </td>
                </tr>
                <tr>
                    <td>Текст сообщения*</td>
                    <td>
                            <textarea name=\"body\" rows=\"10\" cols=\"31\"></textarea><br />
                    </td>
                </tr>
                <tr>
                    <td colspan=\"2\">
                        <table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" align=\"right\">
                            <tr>
                                <td>
                                    Сколько струн у шести струнной гитары? <input type=\"text\" name=\"code\" size=\"10\">
                                </td>
                            </tr>
                            <!-- <tr>
                                <td width=\"100%\" align=\"right\">
 
                                </td>
                            </tr>  -->
                        </table>
                    </td>
                </tr>
                <tr>
                    <td>&nbsp;</td>
                    <td>
                        <input type=\"submit\" name=\"send\" value=\"Добавить\">
                    </td>
                </tr>
            </table>
        </form>
            ";
 
 

Всего записей: 962 | Зарегистр. 08-10-2005 | Отправлено: 10:24 21-05-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DarkSmoke

Цитата:
    if(isset($_POST['code']))
    {  

вы уверены, что ниже, после этого куска,  у вас нет вставки в БД?
и.. а почему вы думаете, что постинг был не вручную?


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 18:01 21-05-2009
DarkSmoke



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Потому что там спам.. и к томуже с жуткой скоростью... в пол часа 34 страницы по 10 сообщение.
 
Нижу точно не чего нет.
 
А в чем может быть еще бок? Может какая то дыра есть?

Всего записей: 962 | Зарегистр. 08-10-2005 | Отправлено: 20:13 21-05-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DarkSmoke

Цитата:
А в чем может быть еще бок? Может какая то дыра есть?

есть. у вас не меняются вопросы.
то есть при первом анализе формы можно подставить ответ и спамить дальше с его же помощью
далее.. хотите проанализировать какие данные посылаются в форму - добавьте в код что то типа

Код:
if ($_SERVER["REQUEST_METHOD"]=="POST") save_posted_data();  
 
function save_posted_data()
{
 $fp=@fopen('posted.txt','a');
 if (is_array($_POST))
 foreach ($_POST as $key=>$val)
  @fwrite($fp,$key."->".$val."\r\n");
 @fclose($fp);  
}

а потом проанализируйте что отправляется.. это только пример

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 20:21 21-05-2009
DarkSmoke



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
И по ИП не могу забанить - не определяется пробовал еще функцияю IP_CLIENT

Всего записей: 962 | Зарегистр. 08-10-2005 | Отправлено: 20:24 21-05-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DarkSmoke

Цитата:
не определяется

$_SERVER['REMOTE_ADDR']
 
но это бестолку. в большинстве своем подобные посты идут через зараженные компьютеры или прокси

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 20:26 21-05-2009 | Исправлено: Cheery, 20:26 21-05-2009
DarkSmoke



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
if ($_SERVER["REQUEST_METHOD"]=="POST") save_posted_data();    
 
function save_posted_data()  
{  
 $fp=@fopen('posted.txt','a');  
 if (is_array($_POST))  
 foreach ($_POST as $key=>$val)  
  @fwrite($fp,$key."->".$val."\r\n");  
 @fclose($fp);    
}

 
вот что получилось
Подробнее...
code->nijXRmzfZliKb -  а это я так понимаю то что пишется в коде. А это точно не правильный ответ.

Всего записей: 962 | Зарегистр. 08-10-2005 | Отправлено: 21:03 21-05-2009 | Исправлено: Cheery, 21:21 21-05-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DarkSmoke

Цитата:
code->nijXRmzfZliKb -  а это я так понимаю то что пишется в коде. А это точно не правильный ответ.

и это опубликовалось? если да, значит где то еще ниже есть вставка в базу


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:09 21-05-2009
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Интернет » Web-программирование » Выбор случайной переменной


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru