Помешать людям угнать систему голосования с помощью PHP? - PullRequest
5 голосов
/ 30 января 2010

Какие примеры кода я могу использовать, чтобы не дать людям голосовать, чтобы повысить их рейтинг, взломав скрипт php?

Ответы [ 4 ]

4 голосов
/ 30 января 2010

Первая линия защиты - печенье.

По сути, вы устанавливаете куки на их машине и отключаете голосование, если оно присутствует.

setcookie('cookiename', 'voted=1');

// and later

if(isset($_COOKIE['cookiename']) && $_COOKIE['cookiename'] = "voted=1")
{
     // error
}

Это избавляет от вызова базы данных, который вам может понадобиться, чтобы подтвердить свое голосование. Это хорошая идея, чтобы сохранить это на месте, потому что это похоже на кэширование: чем меньше попаданий в базу данных, тем лучше.

Вторая линия защиты - ограничение IP. По сути, вы должны проверить журнал IP-адресов в вашей базе данных и посмотреть, проголосовали ли они недавно.

mysql_query('INSERT INTO TABLE (`IP_ADDR`, `TIME`) VALUES("'.$_SERVER['REMOTE_ADDR'].'", "'.time().'")');

// and later

$results = mysql_query('SELECT IP_ADDR FROM TABLE WHERE IP_ADDR="'.$_SERVER['REMOTE_ADDR'].'"');

if(mysql_num_rows($results) != 0)
{
    // error
}

Превращение всего вашего сценария во что-то вроде

if(isset($_COOKIE['cookiename']) && $_COOKIE['cookiename'] = "voted=1")
{
     die("You have voted recently.");
}

$results = mysql_query('SELECT IP_ADDR FROM TABLE WHERE IP_ADDR="'.$_SERVER['REMOTE_ADDR'].'"');

if(mysql_num_rows($results) != 0)
{
    die("You have voted recently");
}

//Do Voting Stuff Here
vote($_GET['vote']);

// Record the vote.
setcookie('cookiename', 'voted=1');
mysql_query('INSERT INTO TABLE (`IP_ADDR`, `TIME`) VALUES("'.$_SERVER['REMOTE_ADDR'].'", "'.time().'")');

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

3 голосов
/ 30 января 2010
  1. Установить куки для уже проголосовавших пользователей и не разрешать голосовать в течение некоторого времени.

  2. Помимо защиты файлов cookie добавьте защиту IP-адресов. Один IP-адрес может голосовать только один раз за определенный период времени. Хорошей альтернативой для защиты ip является защита по комбинированной схеме (ip + user_agent + ...).

  3. Попросите пользователей ввести капчу, если они выполняют действия слишком быстро.

2 голосов
/ 30 января 2010

Пара идей:

  1. Используйте капчу
  2. Запись IP-адреса (в соответствии с вашей политикой конфиденциальности, конечно)
1 голос
/ 30 января 2010

Единственный способ помешать им сделать это - иметь хорошую систему аутентификации пользователей. За исключением этого, вы можете отказаться от него, используя куки и Captcha .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...