Forum Webscript.Ru

Программирование => PHP => Тема начата: listopad от 21 Июля 2002, 13:26:03

Название: Голосование......
Отправлено: listopad от 21 Июля 2002, 13:26:03
Вот я тут сделал обычный скриптик для голосования..... по разным темам......
но что мне не нравится....
Как бы сдалать так чтобы человек зашедший на сайт мог проголосовать только один раз по одной теме ...... и не смог накручивать мои счетчики....
Т.е в одном голосование он ставит оценку 5 и все..... если он вернется..... и проголусует еще раз скрипт его проигнорирует........... НО за ним должно остаться право проголосовать по другим темам... (также только один раз)!!!
Может у кого-нибудь будут какие-нибудь мысли..... намекните !!!
Название: Голосование......
Отправлено: ThE0ReTiC от 21 Июля 2002, 13:48:26
Цитировать
не смог накручивать мои счетчики

Выдохни. Никак.
Название: Голосование......
Отправлено: Maniac от 21 Июля 2002, 13:53:05
Обычная и банальная многократно обсуждаемая здесь авторизация. Правда, если человек решил всерьез накрутить - то можешь расслабиться и постараться получить удовольствие: ничего сделать с этим ты не сможешь. Единственный выход - это чисто статистический анализ девиаций (т.е. если, например, пик посещаемости сайта приходится на промежуток с 13:00 по 14:00, а у тебя наблюдается "взрыв" проголосовавших с 0:00 по 01:00 - то, скорее всего, это накрутка.)
Название: Голосование......
Отправлено: ThE0ReTiC от 21 Июля 2002, 13:56:31
Maniac
Фигня. Это для ламосов.
Подъем довольно просто размазывается по времени.
Название: Голосование......
Отправлено: Maniac от 21 Июля 2002, 14:02:44
Безусловно размазывается. Весь вопрос - на каком промежутке. Кроме того, обычные действия по накрутке наиболее "продвинутого пользователя" заключаются в отмене кукис и использовании анонимного прокси - так что этот метод сработает.
 Естественно, человек, который всерьез взялся за накрутку сделает это мягко и незаметно. Вот только не думаю, что в данном случае кто-то захочет иметь такой гемморой на свою задницу...
Название: Голосование......
Отправлено: ThE0ReTiC от 21 Июля 2002, 14:11:52
Maniac
Не факт. Смотря сколько платят :beer:
Название: Голосование......
Отправлено: Maniac от 21 Июля 2002, 14:14:23
А сколько платят? Кому платят? За что?
Или ты думаешь, что у парня сайт, на котором позиция в рейтинге непосредственно влияет на объем заработков? %)
Название: Голосование......
Отправлено: listopad от 21 Июля 2002, 14:17:58
Авторизация это очень долго....... Можно здесь как-то пристроить сессии........или их и имеете в виду..!!
Название: Голосование......
Отправлено: Maniac от 21 Июля 2002, 14:24:30
Цитировать
Авторизация это очень долго

А кто тебе сказал, что данная проблема решается просто и элегантно?
И сессии здесь ни при чем. Они всего лишь позволяют отслеживать юзера в течении работы с сайтом и благополучно слетают по истечении опр. времени
Название: Голосование......
Отправлено: Меняздесьдавнонет от 21 Июля 2002, 16:09:13
listopad
Ставь куку, в которой пиши проголосованные темы.
Читаешь ее, и не даешь голосовать, где уже.
Пиши логи, чтобы отслеживать накрутки.
Все.
Название: Голосование......
Отправлено: listopad от 21 Июля 2002, 16:15:12
RomikChef Вот это уже ближе к делу .......
Название: Голосование......
Отправлено: gfdsa от 23 Июля 2002, 00:48:40
Может можно записивать в файл флаги где юзер, проголосовал а где нет. На каждую тему свой флаг, у каждого усра свой файл.....
Немного не красиво ... , но работает.
Название: Голосование......
Отправлено: ThE0ReTiC от 23 Июля 2002, 01:29:10
gfdsa
Ага, а если юзеров 5000 в сутки?
Для каждого файл искать?
Название: Голосование......
Отправлено: Дмитрий Попов от 23 Июля 2002, 02:55:46
Вообще-то куки - это не выход. ИМХО отключить их очень несложно, и ничего уже не поможет.

Запоминать IP - тоже не надежно, но все-таки более реально.

Как я понимаю, "небольшой скриптик" не является супер-навороченым проетом, который необходимо защищать от накрутки, как счет в ЦБ...

ИМХО есть три варианта решения:
1) Отслеживать IP
2) Писать Куки
3) И то и другое.

Как я понимаю, этот скрипт пойдет в массы? Если так, то применение MySQL неприемлимо.
Тогда остаются текстовые файлы.

Но обо всем попорядку:
Если есть MySQL:
просто создаем таблицу с тремя полями:
IP | SID | IDTEEM
Где:
IP - ip-адрес голосующего
SID - может быть и не SID, но любое число, унифицирующее юсера, которое хранится в сессии.
IDTEEM - Id того голосования, за которое голосовал.

Далее при попытке голосования, запрашиваем в базе:
Сначала IP и IDTEEM, и если результат нулевой (ноль записей),
то запрашиваем SID и IDTEEM.
Если и здесь результат нулевой, значит:
а) пользователь и вправду впервые голосует
б) пользователь очень хочет Вас обмануть, и ничего Вам не поможет :-)))
Далее принимаем голосование, и ставим ему в броузер SID, и в базе сохраняем SID и IP.

Как же работать с текстовыми файлами?
А элементарно:
Для каждой темы голосования создаем 2 своих текстовых файла. Назваем их, скажем "ip".$IDTEEM.dat (ip1.dat) и "SID".$IDTEEM.dat.
Получаются пары, вроде:
ip1.dat    sid1.dat - файлы с ip и sid первого голосования
ip2.dat    sid2.dat - файлы с ip и sid Второго голосования и т.д.

При заходе просто перебираем файл с IP и SID данного голосования посторочно (file()), и preg\'ом ищем совпадения.
Если нашли, то юзер уже голосовал. Если нет - то нет...
Название: Голосование......
Отправлено: Дмитрий Попов от 23 Июля 2002, 02:58:56
Естественно, это вариант с файлами негодится для сайтов с посещением 1000 человек в день...

Но нагрузку, голосов в 500-1000 на голосование он, думаю, потянет...

P.S. Это - ИМХО
Название: Голосование......
Отправлено: Меняздесьдавнонет от 23 Июля 2002, 14:56:14
listopad
Дима Попов, конечно, обладает развитым воображением, но для реальности его система малость не годится.
Особенно мне нравится следующий пункт:
Цитировать
Если и здесь результат нулевой, значит:
а) пользователь и вправду впервые голосует
б) пользователь очень хочет Вас обмануть, и ничего Вам не поможет :-)))

Реально, надо ставить куку и писать логи.
Логи самые обычные. одно голосование - одна строчка.
Время, айпи, юзер_агент, х_форвардед_фор.
Если есть апачевские логи, то можно ничего не писать, а пользоваться ими.
Написать просто анализатор. С помощью
array_count_values искать ip, с которых голосовали больше определенного порога, и разбираться. В случае накруток - просто снимать с определенного ответа нужное количество голосований. руками.
Но обычено это не требуется. Ведь у тебя не "За стеклом" голосуется?
Название: Голосование......
Отправлено: Дмитрий Попов от 24 Июля 2002, 00:24:58
RomikChef
Цитировать
Написать просто анализатор

Прочитайте внимательно, и поймете:По сути, то, что я расписал - и есть анализатор...
Далается, как я понимаю, скрипт, для общего пользования... Угадывать есть ли доступ у логам?
 Тем более, те, кто использует эти скрипты редко обладают комм. хостингом.

А писать и анализировать полноценные логи, сложнее, чем использовать этот вариант...
Название: Голосование......
Отправлено: Меняздесьдавнонет от 24 Июля 2002, 13:46:00
анализировать надо логи и не на лету.
Это психологический фактор. Если хакер увидит, что его не пускают с того же айпи, он начнет искать проксю.
А если увидит, что достаточно стереть куку, то станет накручивать так.
А ты его потом отловишь.
Отлавливать задним числом - единственный метод, поскольку абсолютной защиты все равно не бывает.
Название: Голосование......
Отправлено: Дмитрий Попов от 25 Июля 2002, 01:04:46
RomikChef

Кстати! А чего мешает писать по моему алгоритму, только добавить строчку |golos|, в которой сохраняется, то за что проголосовал уч.?

А раз в день запускать другой скрипт, который будет находить повторы, и чистить "мусорные очки".

Ладно... Это все гиппотезы :-)
Название: Голосование......
Отправлено: advocat от 28 Июля 2002, 11:40:29
Незнаю, я бы только смог посоветовать сделать 2 маленькие защиты, но реально незащитишся от человека который хочет накрутить, если:
1) Если у тебя есть авторизация, то разрешить только зарег пользователям. В таком случае у тебя больше всего шансв и проерить и проконтролировать голосовавших.
2) Если этого нет, записываешь в куки и сохраняешь ип. Обычного юзверя это остановит, но продвинутого - нет. Куки можно почистить, а ип меняется каждые несколько минут напр программой А4прокси.... Так что делай выводы сам !
Удачи