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

Духовность™

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

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

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

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

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

Полагаю, данная проблема не решается?
 
triumvirat
согласен с тобой.
Но тогда много мелких признаков.
+ ручной монитор уж на совсем палево.
 
по-моему лучше всего:
1) запутанный JS код генерации формы...
2) Ещё вариант, это взять допустим значения в <option value="в общем сюда"> генерировать рэндумно, и в сессию писать массив типа array('вариант1' => md5(rand(1, 333)."вариант 1"), etc..)
Ну и при самбите кнопки проверять нужный вариант преобразуя его из сессии. И порядок вариантов ответа тоже делать рэндумно.
3) сделать скрипт, который смотрит автоматически "наглые IP", а именно
-смотрит грузят ли эти IP что то кроме данных формы и выполнения POST запроса самбита(картинки, css)
-смотрит время между получением юзером формы с выбором ответа и пост хеадером.
И каптчу выдавать только "наглым" IP
 
triumvirat
а что не понятного ? заместо
0
1
2
3
писать
432
516
524
122
а в сессии идентить
 
принцип в том, что значения, которые определяют выбор голосовалки, генеряться рандомно для каждой формы. то есть надо по меньшей мере каждый раз запрашивать форму.
 
вчера спать лёг
но 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 можно
Защита весьма изращённа) Но я как-то видел форум построенный по-такому принципу! Это конечно перебор, но форму голосования можно так закодировать вполне!
 
Сверху