PHP týden Letní akce
Pouze tento týden sleva až 80 % na kurzy PHP. Lze kombinovat s akcí Letní slevy na prémiový obsah!
Brno? Vypsali jsme pro vás nové termíny školení Základů programování a OOP v Brně!
Avatar
PiKey
Člen
Avatar
PiKey:20.10.2018 13:11

Ahoj :)

představme si webový projekt, kde uživatelé vyplněním a odesláním formuláře uloží něco dodatabáze. a představme si škodolibého uživatele, který si škodolibě vytvoří na svém pc html soubor, kterým posílá nesmyslná data na ukládací skript a zahltí databázi nesmyslnými daty. Na jednom srandaprojektu se mi to takto dělo. (srandaprojekt pracoval s textovým souborem s oddělovači, ne s SQL)

Zkusil jsem: Jednoduchým (původním) řešením bylo, že ORIGINÁLNÍ STRÁNKA S FORMULÁŘEM si při načtení uložila soubor náhodného názvu a do něj časovou značku; ukládacímu skriptu se předal název souboru, ten si ověřil, že soubor existuje, smazal ho a potom teprve ukládal - pokud autorizační soubor nenašel, neuložil nic, takže škodolibý skript - který si NEUMĚL tu autorizaci VYGENEROVAT - měl smůlu. součástí celku bylo projít všechny autorizační soubory, a pokud byla časová značka starší, než (už nevím), tak se tento smazal.

Chci docílit: na novém projektu chci opět zabránit škodolibému posílání nesmyslů na ukládací skript, ale nějak sofistikovaněji, než ukládáním hromady souborů na server nebo do SQL, existuje na to nějaké řešení / nápad?

 
Odpovědět 20.10.2018 13:11
Avatar
Jirka Jr
Člen
Avatar
Odpovídá na PiKey
Jirka Jr:20.10.2018 15:07

můžeš to uložit do $_SESSION ... nemusíš nutně používat soubor ani databázi

taky se takovému skriptování zabraňuje pomocí captcha obrázků a podobných těžko oscriptovatelných klikátek

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 20.10.2018 15:07
Avatar
Odpovídá na PiKey
Uživatel sítě :20.10.2018 15:28

Klasické CSRF viz.: https://cs.wikipedia.org/…uest_forgery

Ochrana proti tomuto je většinou generováním náhodného autorizačního tokenu, ovšem i to není 100%.

Dá se to využít jak na akce závislé odkazech tak i formulářích.

Nahoru Odpovědět 20.10.2018 15:28
Chybami se člověk učí, běžte se učit jinam!
Avatar
PiKey
Člen
Avatar
Odpovídá na Jirka Jr
PiKey:20.10.2018 19:07

jirka jr - sessions se mi zatím vyhnuly - - nastuduji a asi použiji

uživatel sítě - v podstatě to, co jsem složitě popsal já, vyjádřeno slovy "csrf" a "autorizační token" :)

 
Nahoru Odpovědět 20.10.2018 19:07
Avatar
Odpovídá na PiKey
Uživatel sítě :20.10.2018 20:14

Takže víš co máš dělat.. :-`

Vygenerovat ho, umístit to skrytého inputu ve formuláři a kontrolovat ho. %P

Nahoru Odpovědět 20.10.2018 20:14
Chybami se člověk učí, běžte se učit jinam!
Avatar
PiKey
Člen
Avatar
Odpovídá na Uživatel sítě
PiKey:20.10.2018 20:16

ano, jen jsem chtěl jinou metodu, než vlastní systém milionu souborů ;)

 
Nahoru Odpovědět 20.10.2018 20:16
Avatar
PiKey
Člen
Avatar
PiKey:20.10.2018 20:29

nu, sessions je zábava, zatím jsem na to předělal předávání zpráv (příspěvek se odeslal, jsi přihlášen, nepovolené znaky a podobně) mezi skripty, založit na tom autorizaci formulářů bude minutka <3 děkuji, jirka_jr

 
Nahoru Odpovědět 20.10.2018 20:29
Avatar
Odpovídá na PiKey
Uživatel sítě :20.10.2018 21:01

Nu, de-facto sessions jsou také miliony souborů (Dle návštěvnosti webu samozřejmě.), ale server se o to stará sám. Takže v tomto případě je opravdu vhodné použít.. ;)

Editováno 20.10.2018 21:02
Nahoru Odpovědět 20.10.2018 21:01
Chybami se člověk učí, běžte se učit jinam!
Avatar
PiKey
Člen
Avatar
PiKey:20.10.2018 21:13

jistě, je to hotové řešení na stejném principu, který jsem použil, jen nemusím provádět údržbu (kontrolovat "vypršené" soubory) na úrovni php.

 
Nahoru Odpovědět  +1 20.10.2018 21:13
Avatar
PiKey
Člen
Avatar
Odpovídá na PiKey
PiKey:20.10.2018 21:15

(což umí brzdit, když tam těch nepoužitých autorizačních souborů bude třeba v řádu tisíců - každý projít, přečíst a některé smazat)

 
Nahoru Odpovědět  +1 20.10.2018 21:15
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:22.10.2018 8:24

Ono by se to dalo resit i pomoci js. Do skryteho inputu vlozis nejaky kod zalozeny na datumu a mozna i ip, ktery bude platny 5 min. V php ho pak dekodujes. Nevyhoda, ten js se da rozlustit a posilat pak i pres php platne kody.

 
Nahoru Odpovědět  -2 22.10.2018 8:24
Avatar
PiKey
Člen
Avatar
Odpovídá na Peter Mlich
PiKey:22.10.2018 19:59

už jen z hecu.. takže 1) aby někdo provedl CSRF, musí si prohlédnout html zdroj, aby věděl, jaká data má posílat, a tam si jistě všimne hidden políčka a taky volání onsubmit, takže ani nemusí nic luštit a rovnou se na ten js podívá a zkopíruje si ho 2) kdybych si na úrovni serveru uchovával nějakou informaci o tom, jaký kód už byl použit a znovu bych ho nepovolil, může se mi stát, že mi dva uživatelé na stejné veřejné ip a klidně i stejné vnitřní ip (veřejná ip společná pro celý dům a každý má doma ten stejný router od poskytovatele a tudíž má stejně nastavenou lan) pošlou ve stejný čas formulář a jeden z nich bude mít smůlu, to by možná šlo vyřešit přidáním náhodné sekvence někam do toho auth. kódu, ale tím pádem je mi zbytečné zase uchovávat informaci o použitých kódech; 3) ikdyby to nebylo pět minut, ale méně, třeba půl minuty, a CSRF útočník by byl tak hloupý a nezkopíroval si javascript, tak mu stačí si ten platný kód odchytit a použít a než VYPRŠÍ, stihne klidně odeslat stovky formulářů samosereloadujícím nebo do iframů se množícím spamovacím skriptem; méně než půl minuty bych ale nevolil - pro případ nějakého výpadku konektivity mezi klientem a serverem; 4) sláva - máme hotové spolehlivé a lety ověřené řešení a ty přijdeš a navrhneš řešení nefungující minimálně z důvodů 1), 2) a 3) a v záchvatu sebereflexe - místo neodeslání blábolu, zavření tabu a jití se věnování něčemu rpzumnému - k němu připíšeš nesmyslný důvod, proč to tak nedělat. Mohu poradit - neraď a uč se moudrým býti :)

Editováno 22.10.2018 20:00
 
Nahoru Odpovědět 22.10.2018 19:59
Avatar
Odpovídá na PiKey
Uživatel sítě :22.10.2018 21:07

CSFR jde obejít i pokud ošetřuješ na straně serveru. Proto můj poznatek v předchozím příspěvku, že ochrana není 100% (Jistě na vše to tak platí.), ale útočníka to zpomalí či omezí chceš-li.
Samozřejmě, že neobhajuji řešení pomocí JS, v tomto případě je zcela nesmyslné a základ je mít vždy ochranu na straně serveru jako přednostní. JS řešit až v případě kdy je hotova serverová část.. Btw web by měl být 100% funkční bez JS..

Také vázat autorizační tokeny na IP je blbost. Takže řešit zda se připojí někdo ze stejné IP ve stejný moment je zcela irelevantní..

Nahoru Odpovědět 22.10.2018 21:07
Chybami se člověk učí, běžte se učit jinam!
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:23.10.2018 7:51

Ono, jde nachystat pasticku. Pouzit obe reseni. Session + js. Zkontrolovat oba vysledky. Pokud to hacker zkusi obejit, muzes si to do logu poznacit jako podezrelou aktivitu. Ale hackeri jsou vetsinou chytrejsi :)

 
Nahoru Odpovědět 23.10.2018 7:51
Avatar
PiKey
Člen
Avatar
PiKey:23.10.2018 19:30

a von to udělá zas, napíše nějakou blbost a vyloučí si ji :) hele, hackere, hraj si chvilku s tímhle:

http://pupek.wz.cz/…r/index.html

jestli se ti povede odhalit nějaké nekorektní chování nebo propašovat do výstupu třeba nějakej script, dej echo, chci aby při ostrém nasazení fungoval bezchybně

 
Nahoru Odpovědět  -1 23.10.2018 19:30
Avatar
Odpovídá na PiKey
Uživatel sítě :23.10.2018 20:41

Hmm, proč ho napadáš? Řešíme snad ochranu proti CSFR a né vkládání externího JS do obsahu stránky.. :-###

Nahoru Odpovědět 23.10.2018 20:41
Chybami se člověk učí, běžte se učit jinam!
Avatar
PiKey
Člen
Avatar
PiKey:23.10.2018 20:46

napadání imho vypadá trošku jinak, spíš bych se pozastavil nad psaním nepřínosných příspěvků, ale zase v něm vidím elán a chuť nacházet neobvyklá řešení, tak mě napadlo, že by byl dobrej betatester pro html parser -- tak proč toho nevyužít - byl položen dotaz a byl vyřešen, pokud se někomu chce diskutovat dále - třeba i o mimozemšťanech - nevidím problém

 
Nahoru Odpovědět 23.10.2018 20:46
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 17 zpráv z 17.