Autor Zpráva
MartinX
Profil *
Opera (možná i jiné prohlížeče) podporuje vložení uživatelských JS skriptů. Jak jako provozovatel serveru zjistím, jaké externí JS uživatelé na mých stránkách používají?
Rád bych se vyhnul dotazům typu "k čemu to je". K něčemu to je a jde mi prostě o samotnou implementaci. Vize je asi taková: všechno, co je javascript (klidně i ten můj), poslat ajaxem na pozadí k php scriptu, který to uloží do databáze/texťáku na serveru (spolu například s ip adresou uživatele).

Jde to? Pokud ano, jak?

Předem děkuji za odpověď.
Chamurappi
Profil
Reaguji na MartinaX:
Předpokládám, že to nejde. Byla by to bezpečnostní díra, můj JS je můj JS, co mi do něj má tvůrce stránky co čumět…
MartinX
Profil *
To je dobrá úvaha, ale otázka je, jestli je JS implementovaný Operou rozlišený od "mého JS". Takže pokud bych to pojal jinak, pro začátek - jde odeslat můj JS?
Radovan789
Profil *
MartinX:
Pokud se ůžu zeptat tak děláš jen kvuli bezpečnosti tvého webu?
MartinX
Profil *
Radovan789:
Dobrá, nastíním účel. Nejde přímo o bezpečnost, ale o fair play u webhry a JS, které někomu příliš pomáhají. Možná by stačilo jen nějaké "get_userdefined_functions()", pokud něco takového existuje. Rozhodně nemám v plánu vyloženě šmírovat JS u stovek lidí, mám svých starostí dost. Je to jen můj názor, ale domnívám se, že morální opodstatnění mám. Jinak bych sem ostatně ani nepsal, protože dark & evil plans je třeba držet v tajnosti ;-)
Ale mimo to si i myslím, že je to docela zajímavý dotaz.
Chamurappi
Profil
Reaguji na MartinaX:
Tvá morálně opodstatněná motivace úspěšného rozpoznání nečestného hráče, který si nepřeje být odhalen, je z technického hlediska k nerozeznání od nemorální motivace nežádoucího šmírování. Bezpečnostní argumenty vždy straní uživateli, nehledě na to, jaké úmysly má on či stránka. Pokud nějak jde číst uživatelské skripty, tak jen se souhlasem uživatele (nebo se souhlasem toho konkrétního skriptu).

Své vlastní skripty ve stránce si můžeš dohledat přes document.getElementsByTagName("script").

get_userdefined_functions()
Podtržíka v JS… brrr…
_es
Profil
MartinX:
jde odeslat můj JS?
Čo myslíš tým "mojím JS"?
Kompletné zdrojové kódy všetkého možného na stránke alebo čo?

Môžeš testovať, či má užívateľ napríklad definovanú nejakú funkciu, či je definovaný ovládač nejakej udalosti a pod. - na základe znalosti konkrétneho zlepšovadla. No keď niekomu nejaké zlepšovadlo v dôsledku takých testov prestane fungovať, alebo bude nepripustený k hre, tak si ho veľmi ľahko opraví. Je to ešte komplikované tým, že sa dá zlepšovadlo zapnúť aj neskôr.
MartinX
Profil *
Chamurappi:
Proti vyžádání souhlasu nic nemám - protože prostě souhlasíš s pravidly - ANO/NE (a nechci slyšel nic o MS a EULA, případně klasickém: "Na internetu jsou dva druhy lidí. Jedni co jsou na Facebooku a druzí, kteří četli podmínky používání."). Jde mi opravdu jen o to JAK to udělat, což jsem se stále nedozvěděl :-(
Máš pravdu, rozdíl mezi šmírováním a vyhledáváním podvodníků je technicky vzato nulový. To je ostatně problém i běžného života, ala bezpečnostní kamery, odposlechy atd. atd.

Jinak vykopíroval a upravil jsem to z php.net, kde něco podobného je. Jinak píšu v Javě, kde se "_" taky nepoužívají: Dřív jsem je měl nějak rád, ale je to takový zbytečný znak.


_es:
O této možnosti vím, ale přesně jak píšeš, to musím nejprve znát to zlepšovadlo, takže je to ztracené - i z důvodu snadné úpravy. "Mým JS" jsem myslel všechen JS, který jsem na stránky umístil já jako autor, ať už se jedná o vložené .js soubory nebo přímo o JS natvrdo ve stránce.


Každopádně děkuji všem za názory, zkusím ještě zagooglit, ale bojím se, že to opravdu nepůjde.
Chamurappi
Profil
Reaguji na MartinaX:
Proti vyžádání souhlasu nic nemám - protože prostě souhlasíš s pravidly - ANO/NE
Kdyby taková možnost byla (myslím, že není), tak by nejspíš nesouhlas se šmírováním byl k nerozeznání od nepodpory šmírování (a uživatelských skriptů). Alespoň já bych to tak navrhnul.

Hledal bych jinou cestu.
Nemůžeš zkomplikovat skripty ve hře tak, aby je uživatelský skript nemohl snadno zmanipulovat?
Nemůžeš to zkomplikování nějak zautomatizovat, aby se pravidelně obměňovalo a podvodníky pak detekovat tím, že se jejich skript nepřizpůsobil?
Nemůžeš přes ta nevyhnutelná pravidla donutit uživatele k instalaci nějakého vlastního rozšíření, které uživatelské skripty buď vyřadí, nebo na ně dohlédne?


Reaguji na _es:
keď niekomu nejaké zlepšovadlo v dôsledku takých testov prestane fungovať, alebo bude nepripustený k hre, tak si ho veľmi ľahko opraví
Chce to navrhnout herní systém tak, aby se podvodníkovi nevyplatilo být usvědčen z podvodu a aby potenciálnímu podvodníkovi nedovolil strach z usvědčení podvádět.
Aichi
Profil
Jak jsem si to přečetl tak mě napadají dvě věci:
- zapouzdřit skript tak aby nešel zvenčí modifikovat lze. Stačí ho celý umístit do anonymní funkce a tu vykonat a nikde nepoužívat globální proměnné.
Pak uživatelské skripty nemohou modifikovat přímo tvůj kód, ale mohou manipulovat s DOMem stránky a to může vyvolávat jisté reakce tvého kódu (zlepšovadlo se tváří jako hráč)

- hra si povídá se serverem. Na fejkování komunikace není třeba JS a ani originální stránka, takže tady je úplně jedno jak to naprogramuješ.
Krakatoa
Profil
MartinX:
No nevím, ale podle mě toto nemá smysl řešit. Pokud někdo bude chtít, najde si jinou cestu než upravovat js script. Např. odchytne si komunikaci pomocí programu wireshark a v programu autoit si naprogramuje script, který tu tvou hru bude hrát uplně automaticky a bude komunikovat přímo přes TCP a posílat ti tam co chce (je to pomalu jednodušší než upravovat nějaký js script):
http://www.autoitscript.com/autoit3/docs/functions/TCPSend.htm

Jestli se pletu, a takto by to nešlo, tak mě někdo opravte.
MartinX
Profil *
Skutečnosti, že to lze celé obejít i jinak než za pomoci JS jsem si vědom, dokonce jsem schopen takové řešení sám sepsat - a nikdo ho nepozná. Ani k tomu není potřeba odposlech TCP komunikace. Nicméně tyto znalosti, jakkoliv se vám to bude zdát nepravděpodobné, opravdu nemá každý, kdo umí splácat pár kravin v javascriptu, takže už jen ta detekce JS by mohla významně pomoct :-)
No, děkuji všem za návrhy a připomínky, teď se zase zamyslím já a pak uvidíme.
Witiko
Profil
Uživatelské JS Scripty běží ve svém vlastním scope a komunikují (pokud není jejich pisatel příliš horlivý a nemění obsah stránky pomocí "injekcí") s dokumentem pouze pomocí DOM metod. Ze strany dokumentu není, co já vím, žádný způsob, jak se k zapouzdřenému obsahu dostat. To je koneckonců účel.

Podvádění v rámci pravidel hry jde ošetřit na straně serveru. Automatizaci rutin ošetříš těžko, jednoduše protože to na 100% není možné ani když máš nízkoúrovňový přístup k uživatelovu počítači. A o JavaScriptu rozhodně nelze tvrdit, že by měl nějaký nízkoúrovňový přístup. :)

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0