Black Friday Black Friday
Black Friday výprodej! Až 80 % extra bodů zdarma! Více informací zde
Avatar
PiKey
Člen
Avatar
PiKey:20. října 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. října 13:11
Avatar
Jirka Jr
Člen
Avatar
Odpovídá na PiKey
Jirka Jr:20. října 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. října 15:07
Avatar
Odpovídá na PiKey
Uživatel sítě :20. října 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. října 15:28
Chybami se člověk učí, běžte se učit jinam!
Avatar
PiKey
Člen
Avatar
Odpovídá na Jirka Jr
PiKey:20. října 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. října 19:07
Avatar
Odpovídá na PiKey
Uživatel sítě :20. října 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. října 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. října 20:16

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

 
Nahoru Odpovědět 20. října 20:16
Avatar
PiKey
Člen
Avatar
PiKey:20. října 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. října 20:29
Avatar
Odpovídá na PiKey
Uživatel sítě :20. října 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. října 21:02
Nahoru Odpovědět 20. října 21:01
Chybami se člověk učí, běžte se učit jinam!
Avatar
PiKey
Člen
Avatar
PiKey:20. října 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. října 21:13
Avatar
PiKey
Člen
Avatar
Odpovídá na PiKey
PiKey:20. října 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. října 21:15
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:22. října 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. října 8:24
Avatar
PiKey
Člen
Avatar
Odpovídá na Peter Mlich
PiKey:22. října 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. října 20:00
 
Nahoru Odpovědět 22. října 19:59
Avatar
Odpovídá na PiKey
Uživatel sítě :22. října 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. října 21:07
Chybami se člověk učí, běžte se učit jinam!
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:23. října 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. října 7:51
Avatar
PiKey
Člen
Avatar
PiKey:23. října 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. října 19:30
Avatar
Odpovídá na PiKey
Uživatel sítě :23. října 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. října 20:41
Chybami se člověk učí, běžte se učit jinam!
Avatar
PiKey
Člen
Avatar
PiKey:23. října 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. října 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.