Autor | Zpráva | ||
---|---|---|---|
BuGeR Profil |
#1 · Zasláno: 2. 7. 2010, 19:55:54
Zdravím.
Mám jen takovou otázku. Na webu mam script ve smyslu var score = 10; document.location='http://web.cz/stranka.php?skore='+score; jenže to "score" je hraje významnou roli a byl bych nerad kdyby si to někdo změnil (např. by změnil stranka.php?score=200). Jak by jste udělali takové "zabezpečení" aby na stránku přišlo správne "score"? Uvítam cokoliv. Děkuji. |
||
Chamurappi Profil |
#2 · Zasláno: 2. 7. 2010, 20:04:16
Reaguji na BuGeRa:
Jakákoliv komunikace klienta se serverem je odchytitelná a upravitelná. Vstupní data nikdy nejsou stoprocentně důvěryhodná. „Uvítam cokoliv.“ Bude to složitější: vstupní všechny parametry vymyslí server, pak je pošle klientovi, klient na jejich podkladě odehraje hru, JavaScriptem se pošle celý herní postup na server, server prověří, jestli postup pasuje na vstupní parametry, a spočítá z něj skóre. |
||
BuGeR Profil |
#3 · Zasláno: 2. 7. 2010, 21:42:22
Dobrá děkuji, zkusím něco :).
Ještě otázka, nešlo by to nějak vyřešit pomoci hashe? |
||
Kcko Profil |
#4 · Zasláno: 2. 7. 2010, 22:32:09
BuGeR:
Slo. Kdyz si udelas neco jednoducheho typu ?hash=5b32fdsfa778 ( a budes vedet ze to je skore 300 a k tomu treba datum dnesniho dne) tak to nikdo neocura :) |
||
BuGeR Profil |
#5 · Zasláno: 2. 7. 2010, 22:39:09
No jo, jenže problém je, že když to bude třeba md5() tak to bude vypadat např. takto:
document.location='http://web.cz/stranka.php?skore='+md5(score); jenže co když si uživatel tu md5 někde generuje ? |
||
Kcko Profil |
#6 · Zasláno: 2. 7. 2010, 22:53:09
a ty si nemuzes pripravit ten hash v PHP?
var score = '<?= someHashFn(10); ?>'; |
||
BuGeR Profil |
#7 · Zasláno: 2. 7. 2010, 23:06:59 · Upravil/a: BuGeR
Ne, protože se to odehráva bez načtení stránky - načte se jen jednou a to ta proměnná score je ještě prázdna
|
||
Kcko Profil |
#8 · Zasláno: 3. 7. 2010, 20:35:23
BuGeR:
A coz do toho nechat zasahnout server pomoci Ajaxu? |
||
Webb Profil |
#9 · Zasláno: 4. 7. 2010, 00:05:53
Kásnou funkci JQuery
$.get(); |
||
Chamurappi Profil |
#10 · Zasláno: 4. 7. 2010, 01:37:22
Reaguji na Kcka a Webba:
Jak mu AJAX nebo ta kásná funkce vyřeší problém s věrohodností dat, když opět to, co pošle na server, může být podvržené? |
||
Trevor Profil * |
#11 · Zasláno: 4. 7. 2010, 09:44:40
Javascript umí odesílat data serveru ? To jsem netušil. Je to opravdu tak ?
|
||
Webb Profil |
#12 · Zasláno: 4. 7. 2010, 11:04:21 · Upravil/a: Webb
Chamurappi:
„Jak mu AJAX nebo ta kásná funkce vyřeší problém s věrohodností dat, když opět to, co pošle na server, může být podvržené?“ mno to je pravda, ale rozhodně lepší než to posílat přes url, třeba to poslat pomocí ajaxu ješte v md5(). Sice tam bude pořát riziko ale čim dál menčí, není to úplné řešení ale zatím tu nevidim jiný nápad. |
||
Kcko Profil |
#13 · Zasláno: 4. 7. 2010, 11:16:03 · Upravil/a: Kcko
Chamurappi:
Ano, muze byt a jelikoz to bude kontrolovat na strane serveru, tak muze zjistit jestli to podvrzene je ci neni. Proto je muj napad nasledujici: Posle si na server nasledujici hash, ?skore=8755fde3kfds3 // na serveru zjisti ze to je skore 15 a ulozi ho. PS. A jak zjisti ze onen hash je skutecne skore 15? Jednodusse. Na serveru muze mit funkci, ktera mu to zjisti: function getCipher($skore) { for ($i = 1; $i <= 100; $i++ ) if (sha1($i + "someSalt") == $skore) return $i; return false; } Samozrejme, pokud skore muze nabyvat hodnot mnohem vyssich, treba i do tisicu, byl by nesmysl vytvaret kontrolu takto. Neznam presne zadani a prubeh aplikace, ale vyresit to jiste lze. |
||
_es Profil |
#14 · Zasláno: 4. 7. 2010, 11:26:28
Kcko:
„Posle si na server nasledujici hash, ?skore=“ A ten reťazec "8755fde3kfds3" sa na strane klienta vytvorí ako?
|
||
Kcko Profil |
#15 · Zasláno: 4. 7. 2010, 11:48:17
_es:
Na strane klienta, bez toho to nepujde. Bude muset kod aplikace trosku poupravit. Bude muset proces pri vypoctu skore "konzultovat" se serverem. Mas lepsi napad? Pokud ano, tak ho predloz nebo do me zbytecne nerypej jako pokazde :-) ty pobocniku Chamurappiho |
||
Bubák Profil |
#16 · Zasláno: 4. 7. 2010, 11:54:14
_es:
„A ten reťazec "8755fde3kfds3" sa na strane klienta vytvorí ako?“ Pravděpodobně pomocí JS funkce, které se vstupu předhodí "score". To, že funkce nepozná, jestli jí předhazuje skutečné, nebo podvržené "score", je drobnost, a jestli se výpočet "konzultuje" se serverem, nebo ne, je úplně šumák. |
||
Str4wberry Profil |
#17 · Zasláno: 4. 7. 2010, 12:12:26
Osobně bych se držel toho, co napsal Chamurappi. Podstatné je, že se skóre bude počítat na serveru na základě splnění nějaké podmínky.
Jinak k tomu hashi je důležité dodat, že by pro každého návštěvníka měl být jiný. |
||
_es Profil |
#18 · Zasláno: 4. 7. 2010, 12:17:06
Kcko:
„do me zbytecne nerypej jako pokazde“ „Posle si na server nasledujici hash, ?skore=8755fde3kfds3“ Pýtal som sa len, akým spôsobom sa ten reťazec vygeneruje, lebo to si nenapísal. „jelikoz to bude kontrolovat na strane serveru, tak muze zjistit jestli to podvrzene je ci neni.“ Takže podľa tvojho návrhu sa to skóre môže na strane klienta podvrhnúť úplne rovnako, len tam je krok navyše - vyrátanie hashu zo skóre cez JS funkciu. A je to vlastne z hľadiska bezpečnosti voči "podvrnutiu skóre" rovnako "bezpečné" ako kód v prvom príspevku tejto diskusie. |
||
Str4wberry Profil |
#19 · Zasláno: 4. 7. 2010, 12:28:12 · Upravil/a: Str4wberry
_es: Ten hash by zřejmě generoval server. A bezpečnost tkví v tom, že útočník nebude znát hash pro
|
||
_es Profil |
#20 · Zasláno: 4. 7. 2010, 12:53:28
Str4wberry:
„Ten hash by zřejmě generoval server. A bezpečnost tkví v tom, že útočník nebude znát hash pro vyšší jiné skóre, než má měl.“ No ale predsa stále zostáva základný problém, na základe čoho ten server ten hash vygeneruje, teda vlastne niečo na spôsob Chamurappiho hrubého náčrtu. |
||
Chro Profil |
#21 · Zasláno: 4. 7. 2010, 13:27:44
BuGeR:
Nebylo by řešení v javascriptu spojit řetězce timestampu před přesměrováním a score do jednoho, zahašovat ho v md5, vložit do url a odeslat? PHP si následně zjistí čas přijetí požadavku, podle něho cyklem vytvoří pravděbodobné kombinace timestampu a score, zahašuje, porovná je s hašem z url a pokud najde shodu v haších, zjistí score? Celkem mi to přijde jako šílený postup, ale myslím, že nad čím nemá hráč kontrolu, je vždycky přesný čas. :-) |
||
Trevor Profil * |
#22 · Zasláno: 4. 7. 2010, 13:53:27
A umí něco takového i Flash ? Tam záleží jen na té odkazovací adrese né ? Je o tomhle nějaký článek ?
|
||
_es Profil |
#23 · Zasláno: 4. 7. 2010, 14:32:57 · Upravil/a: _es
Chro, Trevor:
To všetko je len točenie sa dokola, len iným spôsobom. Čo bráni užívateľovi, aby podvrhol to skóre rovnakým spôsobom, ako by to urobil JS, AS Flashu, alebo iný programovací jazyk na strane klienta automaticky? |
||
Str4wberry Profil |
#24 · Zasláno: 4. 7. 2010, 18:11:12
No, v podstatě jde akorát o to, že to skóre bude zahashované, takže bude téměř nemožné si odvodit adresu pro ruční úpravu skóre.
|
||
Časová prodleva: 14 let
|
0