|
|
|
| Подскажите как лучше работать с куками:
Есть страница голосования, каждый анонимный юзер может проголосовать 1 раз в 24 часа.
При переходе на страницу голосования юзер получает кукисы
<?php
if(!isset($_COOKIE['votetime'])) setcookie('votetime', time());
|
Страница голосования проверяет, прошло ли 24 часа
<?php
$votetime = $_COOKIE['votetime'];
$votetime += (24 * 60 * 60);
$curtime = time();
if($votetime > $curtime) {
$votetime -= $curtime;
$votetime = $votetime / 60 / 60;
echo 'Вы не можете еще голосовать '.$votetime.' часов';
} else {
Все ок, 24 часа прошло, разрешаем проголосовать...
}
|
Меня мучает вопрос с безопасностью кукисов, их ведь могут подделать? Тогда если подделать значение votetime, юзер сможет накрутить голоса. | |
|
|
|
|
|
|
|
для: Ванек2010
(30.07.2011 в 17:20)
| | Да может, а роботу их даже подделывать ничего не придется, он просто не будет поддерживать cookie и у него значение $votetime будет постоянно равно 0. | |
|
|
|
|
|
|
|
для: cheops
(30.07.2011 в 17:50)
| | >а роботу их даже подделывать ничего не придется, он просто не будет поддерживать cookie и у него значение $votetime будет постоянно равно 0.
Не понял, вы о чем?
Подскажите как можно безопасно проверить то что пользователь сможет проголосовать в следующий раз не раньше чем через 24 часа, и у него должен остаться тот же IP адрес, статический. | |
|
|
|
|
|
|
|
для: Ванек2010
(30.07.2011 в 17:57)
| | >Не понял, вы о чем?
Что произойдет, если cookie отключены? Т.е. вместо любых переменных к вам поступают 0?
>Подскажите как можно безопасно проверить то что пользователь сможет проголосовать в
>следующий раз не раньше чем через 24 часа, и у него должен остаться тот же IP адрес,
>статический.
Практически никак - если захотят накрутить, накрутят... если только не вводить очень жестких мер, вроде регистрацию и права голосова только у тех посетителей, которые проявляли активность не позднее, чем неделю назад. Просто cookie защититься практически невозможно. | |
|
|
|
|
|
|
|
для: Ванек2010
(30.07.2011 в 17:57)
| | >Меня мучает вопрос с безопасностью кукисов, их ведь могут подделать?
зачем их подделывать, если они легко удаляются
>Подскажите как можно безопасно проверить то что пользователь сможет проголосовать в следующий раз не раньше чем через 24 часа, и у него должен остаться тот же IP адрес, статический.
в базу слабо записать?
>Практически никак - если захотят накрутить, накрутят (cheops)
даже базу? если сравнить по айпи и времени, то никак. или можно? анука | |
|
|
|
|
|
|
|
для: f111
(30.07.2011 в 18:20)
| | >зачем их подделывать, если они легко удаляются
При удалении их нечего не произойдет, вам снова предоставят куки и снова ждать 24 часа, если куки отключены, то проголосовать нельзя будет.
>даже базу? если сравнить по айпи и времени, то никак. или можно? анука
Кстати да, отправляем пользователю два кука, первый кук со временем, второй с его текущим IP и точно такие же данные в базу заносим, через 24 часа он возвращается, и проверяем есть ли в базе такой IP адрес и время сверяем в базе и в кукисах если все идентично, то говорим что голос успешно зафиксирован | |
|
|
|
|
|
|
|
для: Ванек2010
(30.07.2011 в 18:41)
| | >>зачем их подделывать, если они легко удаляются
>При удалении их нечего не произойдет, вам снова предоставят куки и снова ждать 24 часа, если
>куки отключены, то проголосовать нельзя будет.
Установка Cookie подразумевает, что клиент вам отправит HTTP-заголовок с cookie, если он это не сделает, то в массиве $_COOKIE не будет ничего, а ваша переменная получит значение 0, к которой прибавится 24 * 3600, что в любом случае меньше любого времени чуть подальше от 1970 года. Робот вам cookie будет отправлять только в том случае, если вы ему без них не дадите работать, а так он не будет заморачиваться на получение от вас cookie и отправку вам их обратно. Это только браузер делает автоматически, и то пользователь эту возможность может отключить в любой момент. Накрутить ваш счетчик смогут обычные пользователи, которые не умеют программировать.
>>даже базу? если сравнить по айпи и времени, то никак. или можно? анука
>Кстати да, отправляем пользователю два кука, первый кук со временем, второй с его текущим IP
>и точно такие же данные в базу заносим, через 24 часа он возвращается, и проверяем есть ли в
>базе такой IP адрес и время сверяем в базе и в кукисах если все идентично, то говорим что голос
>успешно зафиксирован
Сама по себе база данных ничего не дает, дать может только способ организации данных в ней. IP-адрес в современных условиях не лучшее решение, десятки тысяч пользователей сидят из под одного или нескольких IP-адресов. У другой части пользователей IP-адрес меняется в результате реконнекта, который может происходить постоянно. Т.е. у одних неограниченный ресурс для накрутки - отключайся от провайдера и присоединяйся снова, пока его пул не выберешь, а для других - один человек блокирует сразу гору других. Одного IP-адреса мало, нужно что-то, чем пользователь будет дорожить или что не сможет получить махом, например, неделю активного посещения сайта под одним аккаунтом или гору сообщений на форуме из под этого ника. В этом случае - голос из под этого аккаунта - действительно голос. | |
|
|
|
|
|
|
|
для: cheops
(30.07.2011 в 19:00)
| | >голос из под этого аккаунта - действительно голос.
согласен, хотя я допустим ради голосования не зарегюсь, особенно если там дофига полей, а потом ещё и капча, плюс на мыло надо лезть. хотя признаю что этот способ действительно надёжен.
>Сама по себе база данных ничего не дает, дать может только способ организации данных в ней.
а то мы не знали.
>десятки тысяч пользователей сидят из под одного или нескольких IP-адресов.
меня это не пугает, хоть город))))) хотя конечно пользователю Ванек2010 решать | |
|
|
|
|
|
|
|
для: Ванек2010
(30.07.2011 в 18:41)
| | >При удалении их нечего не произойдет, вам снова предоставят куки и снова ждать 24 часа
при первом посещении сайта кук нет, я проголосовал, скрипт их создал, я их вручную стёр, проголосовал и снова скрипт выдал куки, и так можно пока кто-то не умрёт от идиотизма.
так что куки ваши это как банный листик на причинном месте
>Кстати да, отправляем пользователю два кука, первый кук со временем, второй с его текущим IP и точно такие же данные в базу заносим, через 24 часа он возвращается, и проверяем есть ли в базе такой IP адрес и время сверяем в базе и в кукисах если все идентично, то говорим что голос успешно зафиксирован
и бла бла бла......нах слать куки, если можно пользоваться только базой, зачем они вам?
тогда можно вспомнить и про сессии, их не подделать, но жить они будут пока пользователь на сайте. | |
|
|
|
|
|
|
|
для: f111
(30.07.2011 в 19:54)
| | >при первом посещении сайта кук нет, я проголосовал, скрипт их создал, я их вручную стёр, проголосовал и снова скрипт выдал куки, и так можно пока кто-то не умрёт от идиотизма.
Не получится, куки отправляются в конфиг файле, который конектится к остальным, тобишь любой пользователь не сможет сразу проголосовать, а только через 24 часа.
>и бла бла бла......нах слать куки, если можно пользоваться только базой, зачем они вам?
Куки, как дополнительная сверка и если у пользователя динамик IP и меняется только последнее значение, допустим пользователь получил куки
cookie: IP: 122.54.65.1
MySQL IP: 122.54.65.1
Через 24 часа он возвращается с IP 122.54.65.2 , тобишь уже сменился
Из базы выбераем 122.54.65.1, если такой найден, плюс в базу можно занести вид бразуера пользователя и его проверить, если совпал браузер и IP то голос засчитан.
Также в базу можно занести время и сверять его с куками, если не сходится, куки подделаны и голос не засчитан, куки отправлены заного. | |
|
|
|
|
|
|
|
для: Ванек2010
(30.07.2011 в 22:15)
| | >>куки ваши это как банный листик на причинном месте
дополнительная ненужная морока.
>куки отправляются в конфиг файле
не знаю что такое конфиг файл. а что помешает изменить куки?
сделайте как предложил cheops, и не страдайте .... | |
|
|
|
|