[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Защитить от накрутки
Xpund
Вот код(Сори за кодировку)
Дело в том что через Сафари Аппле могут голосовать сколько угодно. Как мне это исправить?
<?php
if($_SESSION['user']['id']>0){
require_once 'voteconfig.php';
$URL = "http://wow.mmotop.ru/";


$query = "SELECT time FROM vote_cp_mmotop WHERE acc_name = '".$_SESSION['user']['username']."' ORDER BY `time` DESC";
$result = mysql_query ($query);
$m=mysql_fetch_assoc($result);
if(empty($m)) { $time=$date; $check = $votetime; }
else {
$time=$m['time']; $check = $date - $time;
}

//echo "<br>Check:";
//echo $check;
//проверить разницу времени и узнать можно ли голосовать или нельзя


if ($check >= $votetime)
{

if(empty($m))
$query = "INSERT INTO vote_cp_mmotop (`acc_name`, `ip`, `time`) VALUES ('".$_SESSION['user']['username']."', '$ip', '$date')";
else
$query = "UPDATE `vote_cp_mmotop` SET `ip`='".$ip."', `time`='".$date."' WHERE `acc_name`='".$_SESSION['user']['username']."'";

mysql_query ($query) or die(mysql_error());
echo "Спасибо, Ваш голос учтен. Сейчас Вы будете перенаправлены на сайт рейтинга.";


$query = "SELECT id FROM account WHERE username = '".$_SESSION['user']['username']."'";
$result = mysql_query ($query);
$acid = mysql_result($result,0);


$query = mysql_query("SELECT acid FROM `cp_shards` WHERE `acid` = '$acid'");
$query = mysql_num_rows($query);
if($query == 0)
{
$query = "INSERT INTO cp_shards (`acid`, `shard`) VALUES ('$acid', '$shard')";
mysql_query ($query);
}
else
{
$query = "SELECT bonuses FROM account WHERE acid = '$acid'";
$result = mysql_query ($query);
$user_shards = mysql_result($result,0);
$user_shards = $user_shards + $shard;
$query = "UPDATE account SET bonuses = bonuses + 1 WHERE id=$acid";
mysql_query ($query);
}


//далее следует функция редиректа на голосовалку топа и функция давания приза за голос
echo "<script>location.href='".$URL."'</script>";
}
else
{
echo "<br><br><br><br><br><b>Вы уже голосовали сегодня! <br>В следующий раз Вы сможете проголосовать после:<br>";
echo date("d-M-Y H:i:s", $time + $votetime);
}




}

?>




Спустя 14 минут, 7 секунд (28.10.2010 - 14:41) ИНСИ написал(а):
Xpund ты бы не мог, задачи скрипта изложить так:
1.....
2......
3.......

Спустя 18 минут, 6 секунд (28.10.2010 - 14:59) Xpund написал(а):
Задачи:
1.Этот скрипт добавляет bonuses при переходе на страницу указаную в $url
2. В это время для этого юзера добавляеться сточка что он голосовал в формате unixtime.
3. Переходить по ссылку можно лишь раз в сутки
4. И бонус тоже должен защитываться только при переходе!

Спустя 7 часов, 17 минут, 51 секунда (28.10.2010 - 22:17) ИНСИ написал(а):
Xpund немного странно ты сделал БД.
Итак:
1.
Цитата
if($_SESSION['user']['id']>0){

странная конструкция smile.gif Если хочешь проверить, залогинился ли пользователь, просто можно if($_SESSION['user'])

2.
Цитата
SELECT time FROM vote_cp_mmotop WHERE acc_name = '".$_SESSION['user']['username']."' ORDER BY `time` DESC

я так понял, ты в качестве того, чтобы определить пользователя, хранишь его логин? просто если он имеет возможность менять логин, то потом будет не очень smile.gif Обычно, в таких случаях, принято использовать уникальные номера пользователей. то есть id.

Цитата
if(empty($m)) { $time=$date; $check = $votetime; }

у тебя выше есть код еще? просто откуда берутся переменные $date и votetime;?

в общем... есть много всего, что можно сказать, просто я предлагаю сделать так:

1. Идет проверка на запись, нажимал ли пользователь на ссылку в течении 24 часов, то есть в запросе: WHERE `date` >= NOW() - INTERVAL 1 DAY
2. Далее, если пользователь уже нажимал, то сообщение, если нет еще, то делаю далее запросы.....

Должно получится что-то в этом роде:
if($_SESSION['user']['id']) { 
// проверяем, есть ли запись пользоваля, которая была в течении последних 24 часов
$query = mysql_query("
SELECT `time`
FROM `vote_cp_mmotop`
WHERE `acc_name` = '
{$_SESSION['user']['username']}' AND `time` >= NOW() - INTERVAL 1 DAY
ORDER BY `id` DESC
"
);

// если есть запись, то выводим сообщение, что пользователь уже голосовал
if(mysql_num_rows($query) > 0) {
echo '<br><br><br><br><br><b>Вы уже голосовали сегодня!';
} else {
// если не голосовал, то пишем в БД, что он голосовал
mysql_query("
INSERT
INTO `vote_cp_mmotop(`acc_name`,`ip`,`time`)
VALUES ('
{$_SESSION['user']['username']}', '{$ip}', NOW())
"
);

// дальше делаешь что надо... если честно, я не понял что за запросы у тебя дальше идут. Ты давай названия таблицам и полям нормальные smile.gif
}
}

Спустя 10 часов, 27 минут, 55 секунд (29.10.2010 - 08:45) Xpund написал(а):
Логин пользователи не могут менять!

if(empty($m)) { $time=$date; $check = $votetime; }

Это в конфиге!
И подобную накрутку можно ток с определённого браузера сделать! Я указал с какого в первом посте!

Спустя 19 минут, 37 секунд (29.10.2010 - 09:04) netruxa написал(а):
ИМХО Подобную накрутку можно совершить в любом браузере, отключив при этом куки. Нет куки - нет сессии

Спустя 39 минут, 48 секунд (29.10.2010 - 09:44) Xpund написал(а):
netruxa
Если нет сессии ты даже не увидишь страницу!

Спустя 10 минут, 24 секунды (29.10.2010 - 09:55) ИНСИ написал(а):
Xpund а зачем тебе ограничивать пользователя в браузере?

Спустя 9 минут, 1 секунда (29.10.2010 - 10:04) Xpund написал(а):
Ну так надо)


if($_SESSION['user']['id']) { 
// проверяем, есть ли запись пользоваля, которая была в течении последних 24 часов
$query = mysql_query("
SELECT `time`
FROM `vote_cp_mmotop`
WHERE `acc_name` = '
{$_SESSION['user']['username']}' AND `time` >= NOW() - INTERVAL 1 DAY
ORDER BY `id` DESC
"
);

// если есть запись, то выводим сообщение, что пользователь уже голосовал
if(mysql_num_rows($query) > 0) {
echo '<br><br><br><br><br><b>Вы уже голосовали сегодня!';
} else {
// если не голосовал, то пишем в БД, что он голосовал
mysql_query("
INSERT
INTO `vote_cp_mmotop(`acc_name`,`ip`,`time`)
VALUES ('
{$_SESSION['user']['username']}', '{$ip}', NOW())
"
);

$query = "SELECT id FROM account WHERE username = '".$_SESSION['user']['username']."'";
$result = mysql_query ($query);
$acid = mysql_result($result,0);


$query = mysql_query("SELECT acid FROM `cp_shards` WHERE `acid` = '$acid'");
$query = mysql_num_rows($query);
if($query == 0)
{
$query = "INSERT INTO cp_shards (`acid`, `shard`) VALUES ('$acid', '$shard')";
mysql_query ($query);
}
else
{
$query = "SELECT bonuses FROM account WHERE acid = '$acid'";
$result = mysql_query ($query);
$user_shards = mysql_result($result,0);
$user_shards = $user_shards + $shard;
$query = "UPDATE account SET bonuses = bonuses + 1 WHERE id=$acid";
mysql_query ($query);
}


//далее следует функция редиректа на голосовалку топа и функция давания приза за голос
echo "<script>location.href='".$URL."'</script>";
}
}

Так должно быть?

Спустя 9 часов, 6 минут, 50 секунд (29.10.2010 - 19:10) ИНСИ написал(а):
Xpund я не пойму, за что отвечают твои запросы, попробуй каждый этот запрос:
Свернутый текст

            $query = "SELECT id FROM account WHERE username = '".$_SESSION['user']['username']."'";
$result = mysql_query ($query);
$acid = mysql_result($result,0);


$query = mysql_query("SELECT acid FROM `cp_shards` WHERE `acid` = '$acid'");
$query = mysql_num_rows($query);
if($query == 0)
{
$query = "INSERT INTO cp_shards (`acid`, `shard`) VALUES ('$acid', '$shard')";
mysql_query ($query);
}
else
{
$query = "SELECT bonuses FROM account WHERE acid = '$acid'";
$result = mysql_query ($query);
$user_shards = mysql_result($result,0);
$user_shards = $user_shards + $shard;
$query = "UPDATE account SET bonuses = bonuses + 1 WHERE id=$acid";
mysql_query ($query);
}


прокомментировать, что где и как вытаскивается smile.gif .......

Спустя 30 минут, 34 секунды (29.10.2010 - 19:41) Xpund написал(а):
           

// $acid = $_SESSION['user']['id']
$query = "SELECT id FROM account WHERE username = '".$_SESSION['user']['username']."'";
$result = mysql_query ($query);
$acid = mysql_result($result,0);

/*
Эти строки лишнее забыл убрать после модификации
$query = mysql_query("SELECT acid FROM `cp_shards` WHERE `acid` = '$acid'");
$query = mysql_num_rows($query);
if($query == 0)
{
$query = "INSERT INTO cp_shards (`acid`, `shard`) VALUES ('$acid', '$shard')";
mysql_query ($query);
}
*/

else
{

// Добавить бонус на такой то аккаунт
$query = "SELECT bonuses FROM account WHERE acid = '$acid'";
$result = mysql_query ($query);
$user_shards = mysql_result($result,0);
$user_shards = $user_shards + $shard;
$query = "UPDATE account SET bonuses = bonuses + 1 WHERE id=$acid";
mysql_query ($query);
}

Спустя 1 день, 3 часа, 5 минут, 35 секунд (30.10.2010 - 22:47) ИНСИ написал(а):
Xpund если честно, особо не понял, что именно тебе еще надо сделать, но вот код, может так:

if($_SESSION['user']['id']) {

if(strpos($_SERVER['HTTP_USER_AGENT'],'Safari') !== true) { echo 'Войдите через браузер Сафари!'; } // проверяем, открыт ли сайт через Сафари
else {
// проверяем, есть ли запись пользоваля, которая была в течении последних 24 ча сов
$query = mysql_query("
SELECT `time`
FROM `vote_cp_mmotop`
WHERE `acc_name` = '
{$_SESSION['user']['username']}' AND `time` >= NOW() - INTERVAL 1 DAY
ORDER BY `id` DESC
"
);

// если есть запись, то выводим сообщение, что пользователь уже голосовал
if(mysql_num_rows($query) > 0) {
echo '<br><br><br><br><br><b>Вы уже голо совали сегодня!';
} else {
// если не голосовал, то пишем в БД, что он голосовал
mysql_query("
INSERT
INTO `vote_cp_mmotop(`acc_name`,`ip`,`time`)
VALUES ('
{$_SESSION['user']['username']}', '{$ip}', NOW())
"
);

$query = mysql_query("
SELECT `bonuses`
FROM `account`
WHERE `acid` = '
{$_SESSION['user']['id']}'
"
);

$user_shards = mysql_fetch_assoc($query);
$user_shards['bonuses'] = ++$user_shards['bonuses'];

mysql_query("
UPDATE `account`
SET `bonuses` = '
{$user_shards['bonuses']}'
WHERE `id` = '
{$_SESSION['user']['id']}'
"
);

//далее следует функция редиректа на голосовалку топа и функция давания приза за голос
echo "<script>location.href='".$URL."'</scri pt>";
}
}
}



_____________
минус, конечно, иногда полезен, но плюс мне нравиться больше :)
Женский журнал - Жена сказала раскрутить сайт любой ценой (Sorry)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.