Как реализовать защиту от накрутки в *таком* проекте?

Духовность™

Продвинутый новичок
Как реализовать защиту от накрутки в *таком* проекте?

Приветствую.

Стоит задача создать голосовалку, потипу "Имя России".

Т.е. суть работы такая: пользователь отсылает какие-то данные на сервер.
Пользователь может любое количество раз отправлять эти данные. Ограничений на IP или по времени быть не должно. Проверка на робота через посыл уникальной ссылки в письме тоже не выход. Капитча тоже лесом идет.

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

Полагаю, данная проблема не решается?
 

HraKK

Мудак
Команда форума
triumvirat
согласен с тобой.
Но тогда много мелких признаков.
+ ручной монитор уж на совсем палево.
 

Baranov_Dron

Новичок
по-моему лучше всего:
1) запутанный JS код генерации формы...
2) Ещё вариант, это взять допустим значения в <option value="в общем сюда"> генерировать рэндумно, и в сессию писать массив типа array('вариант1' => md5(rand(1, 333)."вариант 1"), etc..)
Ну и при самбите кнопки проверять нужный вариант преобразуя его из сессии. И порядок вариантов ответа тоже делать рэндумно.
3) сделать скрипт, который смотрит автоматически "наглые IP", а именно
-смотрит грузят ли эти IP что то кроме данных формы и выполнения POST запроса самбита(картинки, css)
-смотрит время между получением юзером формы с выбором ответа и пост хеадером.
И каптчу выдавать только "наглым" IP
 

HraKK

Мудак
Команда форума
triumvirat
а что не понятного ? заместо
0
1
2
3
писать
432
516
524
122
а в сессии идентить
 

dimagolov

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

Baranov_Dron

Новичок
вчера спать лёг
но dimagolov всё правильно описал
тоесть например у нас код выбора ответа голосования типа такого
PHP:
<select name="question">
    <option value="answer1">ответ1</option>
    <option value="answer2">ответ1</option>
    <option value="answer3">ответ1</option>
</select>
И мы при выводе этой формы создаём массив в
PHP:
$new = array("answer1" => array('value' => md5(rand(0, 999)."answer1".rand(1, 999)), 'text'=>'ответ 1'),
                      "answer2" => array('value' => md5(rand(0, 999)."answer2".rand(1, 999)), 'text'=>'ответ 2'),
                      "answer3" => array('value' => md5(rand(0, 999)."answer3".rand(1, 999)), 'text'=>'ответ 3'));
и записываем этот массив в сессию, кстати ещё как мера защиты, 'text' = 'ответ' тоже лучше как-нибудь менять каждый раз при загрузке формы, например русские буквы о на английские, чем больше комбинаций, тем сложнее будет накрутить голосовалку. Ну ещё, как вариант, массив перемещать рэндумно
PHP:
shuffle($new);
Дальше в шаблоне уже пишем вывод формы
PHP:
foreach ($new as $value)
{
    echo '<option value="'.$value['value'].'">'.$value['text'].'</option>';
}
Вот...
И при ответе на вопрос пост запросом допустим, мы просто берём массив из сессии и выполняем обратные преобразования.
Можно пойти дальше и закодировать так имя поля(полей)
<select name="question">// тут закодировать слово question можно
Защита весьма изращённа) Но я как-то видел форум построенный по-такому принципу! Это конечно перебор, но форму голосования можно так закодировать вполне!
 
Сверху