Započítávání bodů

HackForum

Započítávání bodů#
Zdravím,
mám webovou stránku, kde se body po započítávají body do DB, podle toho jak byl úspěšný. Potřeboval bych nějak ochránit předávanou hodnotu, aby se nedala lehko pozměnit například pluginem tamper data. Aplikace je napsaná v javascriptu.

Napadl mne udělat nějaký strop předávaný do DB, ale to mi stále nezaručí manipulaci s body.
Všem předem děkuji za odpovědi.
(odpovědět)
vastilec | E-mail | ICQ 35406467712.2.2013 11:48
re: Započítávání bodů#
Chtělo by to víc informací, ale obecně na klientské straně nemůžeš zaručit nic. Přidávání bodů zabezpeč na straně serveru např. podle ip a session.

----------
Dal bych všechno co vím za polovinu toho co neznám.
(odpovědět)
Taypan | E-mail13.2.2013 12:06
re: Započítávání bodů#
Uživatel by splnil úkol. Poté co uživatel splní úkol, server podle výsledku vypočte kolik bodů se mu přičte na účet. Potřebuji, aby uživatel nemohl změnit hodnotu údaje, který se po dokončení testu předá pomocí AJAXU a přičte na účet uživateli.

Myslím si,
že to na 100% nepůjde ošetřit, ale aspoň, aby to méně pokročilý uživatel nedokázal zmanipulovat napřiklád pomocí tamper data.
(odpovědět)
vastilec | E-mail | ICQ 35406467713.2.2013 12:39
re: Započítávání bodů#
vastilec: tak to vubec nepredavej nikde.. jen to vypocitej na zaklade vysledku ukolu.. tam predavej nejakou hodnotu, ktera nepujde snadno precist (nejak to zakryptuj treba) .. vubec nepredavej ten pocet bodu v POSTu ... ten pak jen interne nekde vypocti a zapis do DB ..

----------
hack or be hacked :-) .. by greyhats
(odpovědět)
c0d3r14.2.2013 10:52
re: Započítávání bodů#
vastilec: Doporučuji přečíst sérii článků o manipulaci internetových soutěží. 100% zabezpečit to opravdu nepůjde, leda že bys celou funkčnost (test) přenesl na stranu serveru. Z uvedených článků ale můžeš čerpat inspiraci pro kryptování, obfuskaci kódu, apd.

----------
Teprve když vstáváte s hackingem a uléháte s myšlenkou na něj, máte šanci být hackerem.
(odpovědět)
.cCuMiNn. | E-mail | Website | PGP14.2.2013 15:01
re: Započítávání bodů#
Já bych to možná řešil přes BASE64 ... Sice to je prolomitelný, ale ne každej hnedka pozná o jaky kryptování jde. Nebo si udělej nejakej alg co ti místo bodu pošle nějakej text třeba máš 0 = a, 1 = b apod takže bys poslal třeba bbba a pak než to zapíšeš do db projed alg :D ... Všechno se dá nějak vyřešit, nebo speciální znaky. btw neukamenujte mě je to jen návrh.
(odpovědět)
Mutagen_NoReg | 89.190.90.*15.2.2013 19:05
re: Započítávání bodů#
Vedle dat posilej na server nejaky kontrolni soucet (idealne vic, aby to bylo slozitejsi). Napriklad neco jako:

cr1 = md5("nejakyKlic" + body + nahodneCislo);

Na server tedy odesles jak promennou cr1, tak hodnotu body a nahodneCislo. Hodnota nejakyKlic se klidne posilat nemusi a muze byt konstantni - pro utocnika je pak stale slozitejsi pochopit, kde se jednotlive hodnoty berou.

Serverova aplikace pak jednoduse vezme prijate hodnoty a vypocita z nich klic stejnym algoritmem jako klient.

Pokud se jedna napriklad o online hru, muzes dale validovat, zda je vubec mozne takoveho skore dosahnout, pripadne zda je ho mozne dosahnout za dany cas. Cas bych v tomto pripade nemeril na klientovi, ale poslal na server informaci o zahajeni / ukonceni hry. Server by si nekam ulozil timestamp a logicky potom delku trvani ziskas jako "casKonec - casZacatek". I pokud tedy utocnik aplikaci fakt dramaticky prekope, bude muset urcity cas cekat - a to je opet komplikace navic.

Krome nahodnych cisel a poctu bodu muzes na server posilat napriklad ruzne charakteristicke hodnoty, ktere se o prohlizeci daji zjistit, aktualni datum apod.

Tech kontrolnich souctu a hodnot posilej co nejvic a pouzivej na to co nejvetsi mnozstvi algoritmu, ktere navic ruzne kombinuj. Muzes klidne jeden a ten samy kontrolni soucet jeste jednou prohnat jinym algoritmem atp. Snaha je udelat z toho co nejvetsi gulas.

Vysledny zdrojovy kod naprosto nelogicky rozdel do vice souboru, ktere pojmenuj naprosto falesne. Pouzij treba nazvy jako "pristupy.js", ackoliv to s pocitanim pristupu rozhodne nema nic spolecneho. Vsechny kody navic samozrejme prozen obfuskatorem a idealne i vsechny promenne (GET a POST) pojmenuj naprosto nesmyslne a nelogicky. Napriklad promenna "body" bude obsahovat nahodnou hodnotu, zatimco skutecny pocet bodu bude ulozeny v promenne nahodnaHodnota. Cast promennych muzes pojmenovat i ve stylu jako "Sdgsdg".

Jeste me ted napada, ze by se body misto do jedne promenne mohly ukladat i do vice promennych, pricemz soucet techto hodnot by vytvoril pocet bodu. Pro utocnika bude jeste mnohem tezsi vubec zjistit, kterou promennou ma upravit, aby vubec zmenil ty body. A to se jeste ani nerozmrdal na tech kontrolnich souctech :)

Asi ale vidis, ze ti to v aplikaci udela neskutecny bordel a presto to stale neni neprolomitelne. Z toho duvodu ti vrele doporucuji prenest ten vypocet bodu na server, ackoliv ani to patrne dostatecna ochrana nebude.
(odpovědět)
independent_ | 109.80.59.*16.2.2013 23:27
re: Započítávání bodů#
Napadlo me jeste par dalsich veci.

Behem behu aplikace na server neustale posilej nejaka data (jejich obsah je naprosto irelevantni). Na serveru vzdycky ukladej cas, kdy byl tento signal naposledy prijat, a jakmile dorazi vysledky, porovnej prodlevu od posledniho signalu. Pokud uzivatel bude hodnoty menit napriklad v Tamper Data, prodleva bude samozrejme vyssi, nez kdyz se data odeslou automaticky, a okamzite vis (i bez dalsich bezpecnostnich mechanismu), ze se dejou nejake nekalosti.

Dalsi dulezita vec je reakce. Nevypisuj zadne chybove hlasky jako "Neplatny kontrolni soucet." apod., utocnikovi tim akorat ulehcis praci. Priprav si nekolik nahodnych a naprosto zcestnych chybovych hlasek, ktere misto toho vypisuj. Muzes klidne vypisovat i nejake chybove hlasky, ktere PHP generuje, tzn. "Uncaught exception" atd. V ostrem rezimu samozrejme aplikace nic takoveho vypisovat nesmi, a i tady bys to mel mit nejak osetreno (jako error_reporting(0) napriklad), takze to fakt mej nekde ulozeno jen jako string.

Mohlo by se ti povest napriklad privest utocnika na naprosto mylnou predstavu, ze mas v aplikaci chyby jako SQL injection atp., coz by odvedlo jeho pozornost.

Pravdepodobne by se toho dalo vymyslet mnohem vic. Napada me i posilani hodnot v nejakem poli, ktere by ale rotovalo - stejne prvky by byly pokazde na jinem indexu (to by urcoval server, ktery by to treba pri spusteni aplikace vygeneroval).

Dale by se dal rozsirit napad Mutagena, ovsem na vyssi level, tzn. zprehazet vyznam jednotlivych cislic (0 => 3, 1 => 9, 2 => 4 atd) a jeste to posilat v nejakem netradicnim formatu, treba v devitkove soustave s prehazenym poradim jednotlivych cifer.

Tim ty napady asi ukoncim, ale kdybys implementoval vsechno co jsem rekl, prolomit to by imho byla docela slusna nocni mura :) Porad ale plati, ze lepsi by bylo prevest vsechno na server.


(odpovědět)
independent_ | 109.80.59.*17.2.2013 0:04
re: Započítávání bodů#
Fakt výborný nápady, moc vám za to děkuji určitě mi to hodně pomohlo. :)
(odpovědět)
vastilec | E-mail | ICQ 35406467717.2.2013 19:54

Zpět
Svou ideální brigádu na léto najdete na webu Ideální brigáda
 
 
 

 
BBCode