Forum Webscript.Ru
Программирование => PHP => Тема начата: listopad от 21 Июля 2002, 13:26:03
-
Вот я тут сделал обычный скриптик для голосования..... по разным темам......
но что мне не нравится....
Как бы сдалать так чтобы человек зашедший на сайт мог проголосовать только один раз по одной теме ...... и не смог накручивать мои счетчики....
Т.е в одном голосование он ставит оценку 5 и все..... если он вернется..... и проголусует еще раз скрипт его проигнорирует........... НО за ним должно остаться право проголосовать по другим темам... (также только один раз)!!!
Может у кого-нибудь будут какие-нибудь мысли..... намекните !!!
-
не смог накручивать мои счетчики
Выдохни. Никак.
-
Обычная и банальная многократно обсуждаемая здесь авторизация. Правда, если человек решил всерьез накрутить - то можешь расслабиться и постараться получить удовольствие: ничего сделать с этим ты не сможешь. Единственный выход - это чисто статистический анализ девиаций (т.е. если, например, пик посещаемости сайта приходится на промежуток с 13:00 по 14:00, а у тебя наблюдается "взрыв" проголосовавших с 0:00 по 01:00 - то, скорее всего, это накрутка.)
-
Maniac
Фигня. Это для ламосов.
Подъем довольно просто размазывается по времени.
-
Безусловно размазывается. Весь вопрос - на каком промежутке. Кроме того, обычные действия по накрутке наиболее "продвинутого пользователя" заключаются в отмене кукис и использовании анонимного прокси - так что этот метод сработает.
Естественно, человек, который всерьез взялся за накрутку сделает это мягко и незаметно. Вот только не думаю, что в данном случае кто-то захочет иметь такой гемморой на свою задницу...
-
Maniac
Не факт. Смотря сколько платят :beer:
-
А сколько платят? Кому платят? За что?
Или ты думаешь, что у парня сайт, на котором позиция в рейтинге непосредственно влияет на объем заработков? %)
-
Авторизация это очень долго....... Можно здесь как-то пристроить сессии........или их и имеете в виду..!!
-
Авторизация это очень долго
А кто тебе сказал, что данная проблема решается просто и элегантно?
И сессии здесь ни при чем. Они всего лишь позволяют отслеживать юзера в течении работы с сайтом и благополучно слетают по истечении опр. времени
-
listopad
Ставь куку, в которой пиши проголосованные темы.
Читаешь ее, и не даешь голосовать, где уже.
Пиши логи, чтобы отслеживать накрутки.
Все.
-
RomikChef Вот это уже ближе к делу .......
-
Может можно записивать в файл флаги где юзер, проголосовал а где нет. На каждую тему свой флаг, у каждого усра свой файл.....
Немного не красиво ... , но работает.
-
gfdsa
Ага, а если юзеров 5000 в сутки?
Для каждого файл искать?
-
Вообще-то куки - это не выход. ИМХО отключить их очень несложно, и ничего уже не поможет.
Запоминать 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\'ом ищем совпадения.
Если нашли, то юзер уже голосовал. Если нет - то нет...
-
Естественно, это вариант с файлами негодится для сайтов с посещением 1000 человек в день...
Но нагрузку, голосов в 500-1000 на голосование он, думаю, потянет...
P.S. Это - ИМХО
-
listopad
Дима Попов, конечно, обладает развитым воображением, но для реальности его система малость не годится.
Особенно мне нравится следующий пункт:
Если и здесь результат нулевой, значит:
а) пользователь и вправду впервые голосует
б) пользователь очень хочет Вас обмануть, и ничего Вам не поможет :-)))
Реально, надо ставить куку и писать логи.
Логи самые обычные. одно голосование - одна строчка.
Время, айпи, юзер_агент, х_форвардед_фор.
Если есть апачевские логи, то можно ничего не писать, а пользоваться ими.
Написать просто анализатор. С помощью
array_count_values искать ip, с которых голосовали больше определенного порога, и разбираться. В случае накруток - просто снимать с определенного ответа нужное количество голосований. руками.
Но обычено это не требуется. Ведь у тебя не "За стеклом" голосуется?
-
RomikChef
Написать просто анализатор
Прочитайте внимательно, и поймете:По сути, то, что я расписал - и есть анализатор...
Далается, как я понимаю, скрипт, для общего пользования... Угадывать есть ли доступ у логам?
Тем более, те, кто использует эти скрипты редко обладают комм. хостингом.
А писать и анализировать полноценные логи, сложнее, чем использовать этот вариант...
-
анализировать надо логи и не на лету.
Это психологический фактор. Если хакер увидит, что его не пускают с того же айпи, он начнет искать проксю.
А если увидит, что достаточно стереть куку, то станет накручивать так.
А ты его потом отловишь.
Отлавливать задним числом - единственный метод, поскольку абсолютной защиты все равно не бывает.
-
RomikChef
Кстати! А чего мешает писать по моему алгоритму, только добавить строчку |golos|, в которой сохраняется, то за что проголосовал уч.?
А раз в день запускать другой скрипт, который будет находить повторы, и чистить "мусорные очки".
Ладно... Это все гиппотезы :-)
-
Незнаю, я бы только смог посоветовать сделать 2 маленькие защиты, но реально незащитишся от человека который хочет накрутить, если:
1) Если у тебя есть авторизация, то разрешить только зарег пользователям. В таком случае у тебя больше всего шансв и проерить и проконтролировать голосовавших.
2) Если этого нет, записываешь в куки и сохраняешь ип. Обычного юзверя это остановит, но продвинутого - нет. Куки можно почистить, а ип меняется каждые несколько минут напр программой А4прокси.... Так что делай выводы сам !
Удачи