Autor Zpráva
Prochy
Profil
Ahoj,

momentálně mám zpracovávání fotbalových zápasů dělaný polomanuálně - Otevřu si stránku se zápisy, otevřu si zápis, zkopíruji zdrojový kód a ten zkopíruji v administraci na stránkách našeho klubu, kde se následně vytahají všechny data.

Pro mě tohle není problém dělat, zabere mi to 2 minuty čistého času. Ale teď bych to potřeboval předat dál lidem, které nemají příliš velké zkušenosti s PC. Říkal jsem si tedy, že bych v administraci otevřel tuto stránku pomocí iFramu, uživatel by přešel přes Captchu, pak bych našel pomocí JS požadovaný zápas, otevřel ho a stáhl z něho zdrojový kód.

Je možné tohle nějak udělat? Zjistil jsem, že získání zdrojového kódu z iFrame pomocí JS z cizí stránky je blokovaný pomocí cross-origin.

Děkuji za rady
Radek9
Profil
Prochy:
Je možné tohle nějak udělat? Zjistil jsem, že získání zdrojového kódu z iFrame pomocí JS z cizí stránky je blokovaný pomocí cross-origin.
Ano. Pokud daná stránka nepodporuje cross-origin požadavky, tak s tím nic neuděláš. Je to kvůli bezpečnosti.

Tyhle požadavky se většinou řeší přes server. Nicméně pokud jsou data chráněna pomocí captchy, tak s tím taky nic neuděláš. Řešením by mohlo být napsání pluginu do prohlížeče, který by se spustil v tom rámu a např. pomocí postMessage by předal informace tvojí stránce.
Prochy
Profil
Dík\
Hm, myslel jsem si to. Ne, že bych měl problém s napsáním pluginu do Chromu, případně Firefoxu, ale nechce se mi tím pak obtěžovat uživatele, který se bude starat o administraci.

Jen otázka, k čemu tahle ochrana před zkopírováním je? Když vezmu to, že si ten zdrojový kód můžu stáhnout případně ručně. Aby to nešlo pak automaticky, jak jsem se o to nyní pokoušel?
Kajman
Profil
Zkuste se zeptat majitele těch dat, co nelegálně vytěžujete, zda by vám je za nějaký poplatek poskytl např. přes api s klíčem.
Keeehi
Profil
Prochy:
Jen otázka, k čemu tahle ochrana před zkopírováním je?
Kdyby si jakákoli stránka mohla z iframu vytáhnout zdrojový kód jakékoli jiné stránky tak by to mělo obrovské důsledky. Představ si, že by třeba tvůrce tohoto fóra sem přidal iframe s facebookem. Do iframu by se načetla Facebooková stránka s tvým feedem. Potud je vše v pořádku, protože zatím jsou všechna data jen u tebe v prohlížeči. Pokud by ale javacript tohoto fóra měl přístup ke zdrojovému kódu iframu, mohl by si tedy zkopírovat všechna data ve tvém newsfeedu a ajaxem si je poslat k sobě na server. A to by se nikomu nelíbilo. Facebook je zde samozřejmě jen jako příklad, těžit data by se dala z jakékoli stránky; emaily, internetové bankovnictví, a tak dále.

Radek9:
Nicméně pokud jsou data chráněna pomocí captchy, tak s tím taky nic neuděláš.
Záleží, co je to za captchu. Pokud je to třeba jen obrázek, může ho uživateli zobrazit a použít co mu uživatel napíše jako odpověď.
Prochy
Profil
Máš pravdu, já si vlastně neuvědomil, že to může zobrazit přihlášení toho uživatele, kterému se zobrazí ten iFrame.

Je to Google Captcha, takže tam jsem určitě bez šance.

Kajman:
To už jsem zkoušel, jestli by nechtěli udělat např. API možnosti stáhnout pouze zápisy daného klubu. Stačilo by, kdyby měli třeba určité okno někde v noci, aby nedocházelo k přetížení během dne, kdy se zápisy editují. U našeho klubu se vlastně jedná pouze o 3 zápisy týdně, které bych potřeboval stáhnout, nemám v plánu vytahovat celou jejich databázi. Bohužel přišla negativní reakce. Pomohli by tím klubům spravovat jednodušeji stránky, nedalo by jim to žádnou extra práci, ale naopak mě jako programátorovi by to práce strašně ulehčilo. Jelikož zadávat sestavu ručně a podobně není nejrychlejší a každý u toho nechce ztrácet příliš času.
Tomášeek
Profil
Prochy:
nedalo by jim to žádnou extra práci
Heh :-)

Naprogramovat API rozhraní, které nyní (asi) neexistuje a které je jim k ničemu, nadimenzovat servery, apod. a to jen kvůli tomu, že by to tobě ulehčilo práci s cizími daty, nyní ve stadiu "kradená"? To nevím.
Keeehi
Profil
Tomášeek:
Myslím že Prochymu nejde o žádné velké API. Jemu by odhadem stačil jednou denně generovaný statický soubor. Nějaké CSV nebo XML v kterém by byly výsledky. To se dá šoupnout na nějaký miniservřík bez nějaké garance dostupnosti. Řešení nijak složité, rychlé, v good enough kvalitě.

Prochy:
Trochu mě nejdříve překvapilo, že náš prvoligový tým má takové problémy. Něco takového bych čekal u týmů z nižší ligy které si nemohou dovolit na správu webu najmout někoho zkušeného. Pak jsem si vzpomněl na jeden fotbalový projekt kterého jsem se účastnil a přestal se divit :)
Nikdy jsem nebyl členem žádného profesionálního teamu, takže mohu mít zkreslené představy ale předpokládám, že jste členy nějaké asociace. Té platíte členské poplatky, ale jako členi máte zase nárok na nějaké věci. Jedna z nich je, že můžete hrát zápasy. No a druhá, kterou tak předpokládám je, že byste měli mít přístup i k oficiálním výsledkům zápasu*. Takže bych se ptal v klubu někoho kdo dělá administraci nebo právní věci. Možná že k něčemu přístup máte jen o tom nevíš. Pokud o tom nikdo vědět nebude, pak bych studoval smlouvy, stanovy a různé podmínky, zda tam něco takového není a pokud ano, tak bych na to uplatňoval nárok. To že fotbalová asociace na svých stránkách chrání data před vytěžováním kýmkoli je pochopitelné, ale dávalo by smysl aby její členové k nim měli přístup.
Pokud na nic takového nárok nemáte, fotbalová asociace vám nevyjde vstříc a budete chtít data dostávat legální cestou, pak je tu stále možnost využít někoho třetího. Českého poskytovatele dat jsem nenašel. Zahraniční API (např. toto) mají většinou zadarmo data z anglické, německé, italské a evropské ligy a za ostatní si musí člověk zaplatit. 1. česká liga naštěstí ale bývá hned v té první cenové hladině která se pohybuje okolo 20 - 25$ za měsíc. Což je cca 6500 Kč za rok. To si nejspíš prvoligový fotbalový klub může dovolit avšak připadá mi to trochu zbytečné.

*nemusí to být zrovna tato stránka. Může to být něco divného, třeba týdenní výsledky posílané v excelu emailem. Ale i takové zdroje dat se dají automaticky zpracovávat.
Tomášeek
Profil
Keeehi:
Že v tomto konkrétním případě o velké API nejde a že to není těžké naprogramovat, vím. Musíš ale vidět souvislosti.

1. I hodina nezaplacené (a pro vývojáře/firmu/dodavatele zbytečné) práce, je velmi drahá.
2. Lidí jako Prochy je/může být X. Každému připravovat něco, co zabere pár minut, není reálné.
3. Pokud je lidí jako Prochy více, miniservřík nebude stačit a nedostupnost dat bude akorát vrhat špatné světlo na dodavatele dat.
Atp.

Není to tak jednoduché, jak to vypadá. Ano, požadavek na spíchnutí během chvilky, v souvislostech si ale zavařím na problémy, nebo vyšší náklady.
Prochy
Profil
Děkuji všem za odpověď.

Keeehi:
Trochu mě nejdříve překvapilo, že náš prvoligový tým má takové problémy.

Tady si nejsem jistý, jestli tam má být skutečně náš a nebo "váš" (můj). Jestli druhá varianta, tak to že jsem hodil odkaz na první ligu, tak to bylo bráno jen jako ukázka, náš klub jinak hraje na úrovni okresu/kraje, takže si dovolit platit správce příliš nemůže. A jelikož já se o ty stránky nebudu moci starat věčně, tak se to snažím udělat, co nejjednodušší na správu pro toho, kdo by to měl dělat místo mě. Myslím si, že to je udělaný fakt jednoduše, intiutivně, ale samozřejmě, kdyby byla možnost stáhnout ty zápisy nějak legálně automaticky pomocí php, tak by to bylo ještě jednoduší a jediný, co by tomu správci stačilo, bylo napsat poté nějaký komentář k zápasu. Takto tam musí vyplňovat ručně skóre, karty, střelce a sestavu našeho týmu. Mně tohle zabere např. 5 minut, ale někomu nezkušenému např. 20 minut, což už je docela dlouhá doba.

No a druhá, kterou tak předpokládám je, že byste měli mít přístup i k oficiálním výsledkům zápasu*
Ano, máme tam přístup, já sám mám přístup do administrace. Ale ty oficiální výsledky jsou právě na tom is.fotbal.cz (administrace probíhá na stejné stránce, stačí se přihlásit), jak jsem odkazoval. Přesně ten zápis, který je možné stáhnout veřejně, je oficiální zápis, který vytvoří systém před zápasem, po zápasu rozhodčí upraví, týmy potvrdí, a zápis se uzavře.


Tomášeek:
Já jsem samozřejmě nemyslel, aby to udělali pouze pro mě, ale spíš globálně pro všechny kluby, aby jim ulehčili práci. Pokud vezmu v potaz, že může být celkově tak 4000 klubů, každý klub může mít např. 10 kategorií, tak to dělá přibližně 50000 requestů, které by byly potřeba vykonat. Pokud to přeženu, tak se může jednat o 100k reqeustů za týden. Mně to třeba nepřijde až tolik, ale pořádně do toho nevidím. Takže asi s tebou souhlasím, že by to nebylo jednoduché udělat a moje představy jsou dosti mylné. A samozřejmě chápu, že to je práce navíc a někdo to zaplatit musí.
Jen jsem si říkal, že mohli na tohle myslet ještě před návrhem samotného informačního systému, jelikož jakmile spustili ty stránky, tak jsem si říkal, že konečně udělali nějakou dobrou věc, jelikož už není nutné psát zápisy ručně, jako to do té doby dělaly amatérské kluby a mají na to jednotnou aplikaci. A pro mě, jako správce webových stránek, by to mohlo ulehčit práci s aktualizací webových stránek, které si spravuji ve volném čase.
Kcko
Profil
Prochy:
Není cesta, znám člověka ze svazu, už jsem kdysi dávno něco podobného sondoval, ve svazu jsou trošku "frozen" a na tohle nemají čas a ani o to nemají zájem to volně pouštět mezi lidi. Máš holt smůlu.
Na svém webu, který zpracovává španělské fotbalové soutěže, máme koupený tarif ke kterému existuje poměrně rozsáhle API, nicméně předpokládám, že ty spravuješ tým z horní dolní (nižší fotbalová soutěž) a to žádné větší organice nezpracovávájí, jedině ČFS tady u a nás a platí co jsem napsal výše.

Jedině, že bys rozlousknul Recaptchu ;-)
Keeehi
Profil
Prochy:
Tady si nejsem jistý, jestli tam má být skutečně náš a nebo "váš" (můj).
"Náš" bylo ve smyslu český. Tím byl myšlen tvůj tým.

tak to že jsem hodil odkaz na první ligu, tak to bylo bráno jen jako ukázka,
Vždy je lépe dávat odkaz na konkrétní data než na ukázku a pokud to je jen ukázka, tak je potřeba to zmínit.

To API, na které jsem dával odkaz za 50$/měsíc má data až do divizí čtvrté české ligy. 13000 ročně si zřejmě ale dovolit nemůžete.

Nejčistější variantou tedy bude to vytvoření rozšíření pro prohlížeč. Dále je možné prohlížeč spustit bez bezpečnostních mechanizmů. Pak s ním ale nemůžeš nikam jinam než na své stránky, právě kvůli možnosti vytěžení všech tvých dat. Další možností je použít nějaký program který vytvoří proxyserver, ten bude poslouchat veškerou internetovou komunikaci a když uvidí komunikaci s is.fotbal.cz tak do odpovědi přidá CORS hlavičku s tvým webem. Tím se povolí v prohlížeči přístup javascriptu do iframe. Jeden takový proxy server jsem našel. Má tam dokonce i ukázku jak do odpovědi přidat hlavičku anyproxy.io/en/#modify-the-response-header takže vytvoření potřebného pravidla by neměl být problém. Ovšem instalace není tak přímočará, jak jsou uživatelé windows zvyklí (otevřu stažený instalátor, klikám stále na další, kliknu na dokončit). Je to totiž napsané v NodeJS, takže je nejprve potřeba nainstalovat ten a pak až anyproxy. Navíc jelikož fotbal.cz je na https, musejí se nainstalovat do počítače i certifikáty anyproxy aby mohla měnit i zabezpečené stránky. Pokud by se ale k tomu vytvořil nějaký polopatický, nejlépe obrázkový návod, poučený uživatel by měl být schopen to nainstalovat. Je stále nutné mít na paměti, že je potřeba takové proxy věřit, jelikož má přístup k veškeré komunikaci prohlížeče. Ty tu proxy využíváš pro MITM útok sám na sebe, což je to čeho chceš dosáhnout. Tím jí ale dáváš možnost ten samý útok provést i když ty o tom nebudeš vědět. Musíš jí tedy důvěřovat, že to neudělá, nebo si zkontrolovat kód, že nic takového tam není.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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