Уволнен ли бе ББ 300 хиляди пъти?

July 17, 2011

Някакъв човек организирал с огромен бюджет онлайн гласуване “Уволни правителството”. Резултатът – над 300 хиляди гласувания. За съжаление обаче, 300 хиляди гласувания не значи 300 хиляди гласували. Не може да се каже колко са гласували в действителност, но е напълно възможно да са 10-20 или 1000 пъти по-малко.

Този пост е за това как би трябвало да се защити онлайн гласуване, за да бъде поне горе-долу обективно.

Когато се прави онлайн гласуване, то трябва да бъде защитено срещу:

За защитата от гласуване чрез цъкане:

Регистрация и captcha. Най-разпространените методи са затрудняване на нежелани действия са чрез регистрация и разпознаване на изображение с текст (капча). И двете обаче са доста слаби. Мотивиран човек може да се регистрира неограничен брой пъти или да автоматизира процеса на регистрация. Също така за подобен сайт регистрация или капча биха убили идеята, защото никой няма да тръгне да се регистрира, само за да цъкне 1 път.

Cookie. Забраняване на повторно гласуване чрез Cookie би отказало 99% от желаещите. Може да има и изискване за set-нато cookie, за да се допусне човек до бутона за гласуване.

IP. Забраняване на повторно гласуване по IP адрес би позволило на хората, които не знаят как да си сменят IP адреса, да гласуват само по веднъж. Понеже много адреси са споделени между много хора, ограничението може да е за няколко минути или час, колкото да обезкуражи най-амбицираните гласуващи.

Request headers. Сигнатура от подаваните request headers (примерно md5 хеш на Accept, Accept-encoding, Accept-language, User-agent) може да помогне да идентифицирате браузъра, от който е правена заявката. Може да се забрани на IP, което вече е гласувало, да гласува отново от браузър със същия хеш.

Аз успях да гласувам 1000 пъти със следния скрипт, изпълнен в адреса на браузъра:

javascript:for(i=0;i<1000;i++)$.post("addDetails.php",function(){});

Ако имаше защита по IP, нямаше да успея.

Защита от автоматизирани гласувания през прокси адреси

Може да се направят няколко неща. Тези, които аз съм правил, са следните:
- Употреба на white list от адресите, попадащи в български мрежи
- Употреба на black list от open proxy адреси (примерно dns blacklist - DNSBL)
- Може за адресите, които не отговарят на някакви критерии, периодичен скрипт да се опитва да направи заявка през най-често ползваните портове за proxy.

Потресаващо много от proxy-тата биха отпаднали така и със сигурност ще разберете, че някой се опитва да ви опорочи гласуването.

Автоматизирани гласувания чрез поставяне на код в сайтове

Гласуването на uvolnen.org изискваше 1 празен POST. Този POST би могъл да бъде иницииран от, да речем dzver.com, като по този начин накара всеки посетител неволно да гласува по 1000 пъти. Защитата от това е чрез употреба на cryptographic nonce.

Логиката е проста. Потребителят прави заявка за екрана, на който се визуализира бутона. Заедно с този екран получава nonce хеш, който се съхранява на сървъра заедно с IP адреса на потребителя, user_id ако има такова и т.н. (nonce може да се генерира и по друга логика - salt + ip адрес)

nonce = 'j39af38zfejp1';

Съответно когато се гласува, този nonce хеш се праща обратно към сървъра в ajax request-a:

{nonce:'j39af38zfejp1'}

Дори dzver.com да правеше заявка към uvolnenie.org за всеки свой посетител, не би могъл да получи nonce, съответстваш на потребителския ip адрес.

Можете също така да проверявате HTTP_REFERER.

Така в няколко прости стъпки, лесният достъп до милиони генерирани гласове би бил отрязан.

PS. вижте темата при Боян Юруков

Публикувано в: Гърнето с боба 10 коментара RSS 2.0

Ако постът ви харесва, цъкнете на сърцето:

Коментари

10 коментара на “Уволнен ли бе ББ 300 хиляди пъти?”

  1. singu on July 18th, 2011 16:42

    Всички тези методи са валидни само, ако администраторът на сайта *иска* да приема само валидни гласове…

  2. Спас Колев on July 18th, 2011 17:01

    Всички тези методи са валидни, само ако администраторът на сайта не увеличава брояча с единица със случайно забавяне в интервала 200-1000 милисекунди (както всъщност изглеждаха нещата). 😀

  3. Божо on July 21st, 2011 11:36

    Дзверо, погледни си topbloglog-a!
    Нещо за диск плаче.

  4. dali? on July 23rd, 2011 12:32

    Техническото обсъждане на средствата, използвани от политическите интриганти в България, винаги е бил пределно НАИВЕН и предизвика само СМЯХ ….

  5. dzver on July 23rd, 2011 12:59

    Политиката няма нищо общо с това. Написах статията с образователна цел.

  6. dali? on July 23rd, 2011 23:02

    Е точно на янето шашките ли реши да ползваш за онагледяване 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂 🙂
    В България има огромно количество манипулирани анкети.
    Всъщност, всяка публична и с материален интерес зад нея е такава.

  7. dzver on July 24th, 2011 11:56

    ами да, съчетах полезното с приятното

  8. dali? on July 24th, 2011 12:35

    И точно за това се е получил такъв смехотворен резултат…..

  9. dzver on July 24th, 2011 18:15

    Когато пиша за програмиране, пиша за хора, които могат да разберат и използват написаното.

  10. gotvach on July 25th, 2011 13:45

    Ще видим на изборите, само обществото може да го уволни. Със вот на недоверие няма как да стане (така е измислено)

Оставете отговор