Как защититься от подделки cookie?

Alexeina66

Мой дом здесь!
Регистрация
26 Авг 2013
Сообщения
426
Реакции
445
На сайте есть опрос. При проверке нэтспаркером удалось изменить количество процентов голосов в опросе
2P4dv.png
За cookie отвечают 2 строки
Код:
  if( isset($_POST["id"]) && isset($_POST["post_id"]) && isset($_POST["group_id"]) && !isset($_COOKIE["zf_poll_vote_".$_POST["group_id"]]) ){

                if( !$vote_arr = get_post_meta( (int)$_POST["post_id"], 'zombify_poll_results', true ) )
                    $vote_arr = array(
                        "total" => 0,
                        "answers" => array(),
                        "groups" => array(),
                    );

                if( !isset($vote_arr[ "answers" ][ $_POST["id"] ]) )
                    $vote_arr[ "answers" ][ $_POST["id"] ] = 0;

                if( !isset($vote_arr[ "groups" ][ $_POST["group_id"] ]) )
                    $vote_arr[ "groups" ][ $_POST["group_id"] ] = 0;

                $vote_arr["total"]++;

                $vote_arr["answers"][ $_POST["id"] ]++;
                $vote_arr["groups"][ $_POST["group_id"] ]++;

                setcookie('zf_poll_vote_ans_'.$_POST["id"], $_POST["id"], time()+60*60*24*30, "/");
                setcookie('zf_poll_vote_'.$_POST["group_id"], $_POST["group_id"], time()+60*60*24*30, "/");

                update_post_meta((int)$_POST["post_id"], 'zombify_poll_results', $vote_arr);

            }
Подскажите как защититься от подделки cookie?
Вариант?
Код:
setcookie('zf_poll_vote_'.$_POST["group_id"], $_POST["group_id"], time()+60*60*24*30, "/",true,true);
 
Последнее редактирование:
Так происходит проверка, проголосовал ли данный пользователь? В коде увидел только проверку наличия куки

Не правильно проверять голос по куки, тем более что голосование не одно, как я вижу. Это я в 10 опросах проголосую, у меня 20 куки будут

Храните в таблице в базе, пользователь с id 1 проголосовал в опросе с id 12 за пункт номер 1.

Если авторизации нет, то либо так же к IP привязывать (у многих динамические - никакой пользы всё равно), либо через JS уникальный идентификатор делать (но тут у некоторых пользователей он может совпасть), который без куки работает. Еще можно в localstorage хранить голос, что тоже обходится просто.

В итоге - защита от накруток долгий и мучительный процесс, а накручивают всё равно :D
 
Последнее редактирование:
суй в куку $id . $date . sha1($id . $date . $secret);


Но вообще мне кажется у тебя изначально алгоритм не о том. Почистил куки (или зашел из Private Mode) - и голосуй заново. Ты что именно хочешь защитить?
 
Так происходит проверка, проголосовал ли данный пользователь? В коде увидел только проверку наличия куки
Действительно так происходит проверка. Только что проверил. Разрабам выдал "люлей" Согласен - это не дело.
 
Если ты изначально разрешаешь голосовать незареганым, то сколько люлей разрабам ни раздавай, а по-нормальному они не сделают. Любое обходится при желании.

Если только зареганым - то как Q_BASIC советует, в базе табличку c unique(user_id, poll_id). И дальше борись с авторегами. :)
 
1. Добавить проверку на целое число в $_POST["group_id"], $_POST["post_id"], $_POST["id"]
2. 'zf_poll_vote_ans_'.$_POST["id"] заменить на нечто подобное 'zf_poll_vote_ans_'.intval($_POST["id"])
3. Использовать проверку IP-адреса совместно с fingerprint его браузера (поможет осложнить жизнь тем, кто пытается накрутить "голоса"). Один из удобных вариантов получения fingerprint Для просмотра ссылки Войди или Зарегистрируйся
4. использовать ETag
 
А подскажите как провернуть подделку как сделал это нетспаркер?
2P5o3.png
2P5nA.png
Если консоли беру куки и пишу как в запросе то получаю ошибку
2P5nP.png
Стоп нужен же пост запрос
делаю так и получаю 400 ошибку и ответ 0
2P5r4.png
 
Последнее редактирование:
добавь хидер
X-Requested-With: XMLHttpRequest
 
Последнее редактирование:
Назад
Сверху