07/17/11 20:06
(http://dzver.com/blog/)

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

Някакъв човек организирал с огромен бюджет онлайн гласуване “Уволни правителството”. Резултатът – над 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. вижте темата при Боян Юруков

Публикувана на 07/17/11 20:06 http://dzver.com/blog/?p=2147
Facebook TwitThis Google del.icio.us Digg Svejo Edno23 Email

Свързани новини:

новини от България
graphic
спортни новини
graphic

Бързи връзки


Търсене


Архив

RSS Абонамент

Новини от Грамофон

"Новини от Грамофон" - Следете последните новини от България и чужбина обединени на едно място. Обновяват се през 1 минута.

 

  •  

Ново: Публикуване