Internet Info, s.r.o. Lupa Root Měšec Podnikatel DigiZone Slunečnice Vitalia new Bomba Navrcholu Weblogy Jagg Woko Dobrý web Computer.cz SK: MojeLinky


Názory k článku Na podceňovanou hrozbu SQL injection doplácí i řada českých webů

Datum: 10. 6. 2008 7:59 Nový
Vložil: Ra100 (neregistrovaný)
Titulek: Jazyk (Celé vlákno)
> Je důležité si uvědomit i to, že SQL injection nemá nic společného s jazykem, ve kterém je webová aplikace napsaná

Tak s tymto by som dost nesuhlasil aj ked dovody nie su technicke, ale socialne.
Vsetci Javovsky programatori uz od zakladnych tutorialov vedia, ze SQL string sa nema vyskladavat z textov co zadava uzivatel, ale maju pouzivat PreparedStatement, teda posielat parametre do SQL. Dokonca niektore nastroje na staticku kontrolu kodu na tuto chybu upozornuju ( FindBugs ) .

Pravdupovediac, rovnako sa to da osetrit v PHP alebo ASP, ale z mne neznamych dovodov na to tie lamy kaslu.
Odpovědět
aura:
83
Daniel Dočekal
Datum: 10. 6. 2008 8:10 Nový
Vložil: Daniel Dočekal
Titulek: Re: Jazyk (Celé vlákno)
V čempak že to je napsané to Z1.CZ (s ukázkovou SQL injection)? Aha, vona to byla Java :)
Odpovědět
Datum: 10. 6. 2008 8:22 Nový
Vložil: M. (neregistrovaný)
Titulek: Re: Jazyk (Celé vlákno)
Ra100 tym chcel povedat, ze vyukove materialy nabadaju k pouzitiu prepared statementov. Pokial je vsak programator nedosledny a lenivy, tak to moze pisat v com chce a nikto mu nezabrani to napisat nespravnym sposobom.
Odpovědět
aura:
96
Jakub Suchy
Datum: 10. 6. 2008 8:35 Nový
Vložil: Jakub Suchy
Titulek: Re: Jazyk (Celé vlákno)
Takze vlastne SQL Injection nema nic spolecneho s jazykem, ve kterem je stranka napsana :)
Odpovědět
Datum: 10. 6. 2008 8:47 Nový
Vložil: Petr (neregistrovaný)
Titulek: Re: Jazyk (Celé vlákno)
To je stejné, jako se hádat, zda memory (resource) leaky souvisejí s jazykem. Některé jazyky to dělají snazší a některé těžší, ale možné je to ve všech.
Odpovědět
Datum: 10. 6. 2008 10:04 Nový
Vložil: lukas (neregistrovaný)
Titulek: Re: Jazyk (Celé vlákno)
Taky bych to takhle videl. Dalsi vec je take to, ze kdyz uz nekdo programuje neco v jave, jedna se zpravidla o vetsi vec, ve ktere uz se pouzivaji objektove-relacni mapovaci frameworky jako je ibatis nebo hibernate, kde se pouzivaji prepared statementy, jak psal kolega prede mnou.
Odpovědět
aura:
83
Daniel Dočekal
Datum: 10. 6. 2008 8:54 Nový
Vložil: Daniel Dočekal
Titulek: Re: Jazyk (Celé vlákno)
No, výukové materiály k ASP taky dlouhé roky nabádaji k použití něčeho, co stejně nikdo pořádně nepoužívá :)
Odpovědět
Datum: 10. 6. 2008 8:54 Nový
Vložil: stoural (neregistrovaný)
Titulek: Re: Jazyk (Celé vlákno)
A myslis, ze vyukove materialy k ASP.NET ci PHP nenabadaji ke stejne veci? Proste, co to tvrdis, je nesmysl :)
Odpovědět
Datum: 10. 6. 2008 9:07 Nový
Vložil: Tomas (neregistrovaný)
Titulek: Re: Jazyk (Celé vlákno)
Ono je tezke potkat dokumentaci k SQL API v libovolnym jazyku, kde by k tomu nenabadali;)

Vetsinou jeste uvednou priklad jak se to nema delat, aby zduraznili mozny bezpecnostni problem, ale jak je vedit spousta "programatoru" tu dokumentaci necte a nema ani tuseni ze neco takovyho hrozi.

A neni to jen SQL-injection ale bezpecnostim otazkam vubec spousta lidi nevenuje pozornost, a podle toho ty weby vypadaj.
Odpovědět
Datum: 10. 6. 2008 10:48 Nový
Vložil: N/A (neregistrovaný)
Titulek: Re: Jazyk (Celé vlákno)
treba tu dokumentaci ctou :-).
ale takovym tim zpusobem "sakra, jak se pouzivaji ty parametry? ... tady nekde byl priklad!" ;-)
Odpovědět
Datum: 12. 6. 2008 0:11 Nový
Vložil: polygon (neregistrovaný)
Titulek: Re: Jazyk (Celé vlákno)
Nj vecny problem lamerskych programatoru. Kdyby vsichni dusledne pouzivali orm misto na kolene skladanych sql stringu tak problem sql injection neexistuje.
Odpovědět
Datum: 10. 6. 2008 10:03 Nový
Vložil: mofo (neregistrovaný)
Titulek: rozpálená kamna (Celé vlákno)
prosímvás, nepřebrat cokoliv přímo z parametrů je stejná zásada jako nepokládat holou ruku na rozpálený kamna. toto je zásada kterou jsem se velmi záhy naučil před dávnými lety při psaní cgi v shellu - to je aspoň prasárna ;-) - a platí pro všechno programování v čemkoliv a čehokoliv. pokud toto někdo nedodržuje, neumí programovat.
Odpovědět
Datum: 10. 6. 2008 19:07 Nový
Vložil: Miloš (neregistrovaný)
Titulek: Re: rozpálená kamna (Celé vlákno)
Kontrola vstupních dat se musí provádět vždy a u každého programu Pro programátora by měla být naprostou samozřejmostí . Vzpomínám si, že u některých programů představovala validace dat i více než 50% práce. (To ještě nebyly k mání regulární výrazy). Bohužel - pokud si autor tuto práci ušetří, zákazník to včas nezjistí. A to je ten problém.

Je to šmejd a podvod na zákazníka - asi jako švestková povidla s jablečnou dření nebo špekáčky se sójou. (Tedy něco, co je dnes naprosto běžné - bohužel).

Zvykáme si, že za levný peníz je pouze náhražka - nebo-li předražený šmejd. Nedivme se, že to proniká i do této profese.
Odpovědět
Datum: 10. 6. 2008 11:45 Nový
Vložil: Karuč (neregistrovaný)
Titulek: Re: Jazyk (Celé vlákno)
Tak tak.
Odpovědět
Datum: 11. 6. 2008 7:38 Nový
Vložil: sejc (neregistrovaný)
Titulek: Re: Jazyk (Celé vlákno)
Jistě že PreparedStatement je řešení, ale také ne vždy, protože už jsem viděl mnoho DB, kde se spouštěly "stored procedures" s parametrama, ve kterých pak následně byl exec(SQL) nebo sp_execute nebo něco takováho a script na konci stejně injektovaný script spustil, takže pro javu platí stejně jako pro cokoliv ostatního.

Jinak v .NET je DLINQ, v rámci kterého toto opravdu nelze přejít, ale to zase nelze použít vždy.
Odpovědět
Datum: 10. 6. 2008 9:58 Nový
Vložil: Mirek (neregistrovaný)
Titulek: Nedělal bych z toho aféru (Celé vlákno)
Proč vytvářet zbytečnou aféru? Trocha toho XSS nebo SQL Injection nikoho ještě nezabila..
Odpovědět
Datum: 10. 6. 2008 10:13 Nový
Vložil: uživatel si přál zůstat v anonymitě
Titulek: Re: Nedělal bych z toho aféru (Celé vlákno)
Haha, tak toto muze napsat jen uplny jelito. Podivejte se nekdy na pravidelne opravovane security chyby v prohlizecich. Jsou tam i lahudky typu kradeni hesel z password manageru a podobne. A toto vsechno muze utocny skript pouzit.
Odpovědět
Datum: 10. 6. 2008 10:55 Nový
Vložil: czeXit (neregistrovaný)
Titulek: Re: Nedělal bych z toho aféru (Celé vlákno)
mas pravdu.
prosim Te, pochlub se tu posli mi nejaky linky na weby co jsi delal ;)
Odpovědět
Datum: 10. 6. 2008 20:05 Nový
Vložil: Mirek (neregistrovaný)
Titulek: Re: Nedělal bych z toho aféru (Celé vlákno)
www.google.com
Odpovědět
Datum: 13. 6. 2008 11:45 Nový
Vložil: czeXit (neregistrovaný)
Titulek: Re: Nedělal bych z toho aféru (Celé vlákno)
panecku, ted jsi mi to nandal, wow!

ktery vyraz ze mam googlit? "Mirek (neregistrovaný)"?
Odpovědět
Datum: 10. 6. 2008 12:53 Nový
Vložil: pavel (neregistrovaný)
Titulek: Re: Nedělal bych z toho aféru (Celé vlákno)
Tyhle aféry každého jenom otravují. Já bych všechny ty internety a počítače zakázala.
Odpovědět
Datum: 10. 6. 2008 11:39 Nový
Vložil: Karel (neregistrovaný)
Titulek: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
První odstavec je velice nepěkné paušalizování. Záleží na architektuře a na samotné aplikaci. Na mých stránkách může kdokoliv použít SQL injection, ale v ničem mu to nepomůže. Dokonce se může k databázi připojit přímo přes SQL a dělat si tam co chce a číst co chce. A čímpak to? V databázi je sice nosný uživatel (a několik utilities účtů), ale každý uživatel se tam připojuje přes svůj vlastní účet, ke kterému se nastavují práva. Při registraci přes web se pomocí pečlivě ošetřeného (a miniaturního) mechanismu založí přímo databázový uživatel s defaultním profilem a veškeré zabezpečení pak přebírá tento DB server - a že to umí výborně.

Zde popsaná SQL injection je nebezpečná pouze ve chvíli, kdy se webové logika připojuje do databáze pod privilegovaným uživatelem a autor veškeré ošetření přesouvá právě na tuto webovou logiku. Právě tato webová logika a důvěřivý DB server jsou náchylné k útoku.

Ve zkratce: SQL injection je typ útoku, kterému se dá bránit buďto pečlivým vytvářením aplikace, nebo zvolit takovou architekturu, u které SQL injection nemá smysl.

U podnikových aplikací a zabezpečených intranetových řešení je volena obvykle druhá metoda. Bohužel není rozumně použitelná s "low end" technologiemi jako bývalo MySQL (dnes už to zvládá, ale programátoři už mají zažité vzory chování, které s tím nepracují) a rovněž není rozumně použitelná s "low end" hardwarem (pokud chci mít v databázi tisíce uživatelů, už to samo bude obrovskou zátěží pro HW). V každém případě nesouhlasím s paušalizováním "SQL Injection je vždy problém".
Odpovědět
Datum: 10. 6. 2008 12:05 Nový
Vložil: luky (neregistrovaný)
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
a kdyz aplikace bezi pod vlastnim uctem, tak jako utocnik neziska pristup k "uctum" registrovanych uzivatelu te aplikace? nebo nemuze zmenit obsah stranky tak, ze dojde k presmerovani na jiny web? rad bych ty vase weby videl ;)
Odpovědět
Datum: 10. 6. 2008 14:04 Nový
Vložil: Karel (neregistrovaný)
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
Webová aplikace neběží pod plnohodnotným vlastním účtem. Nemá k tomu důvod. Serverové procesy běží na serveru a klientské procesy buď běží pod konkrétním uživatelem, nebo běží jen pod účtem, který je striktně read only. Problém nastane až ve chvíli, kdy chci anonymní přístup pro zápis. Ale ani ten není neřešitelný.
Odpovědět
Datum: 10. 6. 2008 20:13 Nový
Vložil: hisaak (neregistrovaný)
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
Ja bych rekl, ze problem nastane hlavne v okamziku, kdy se k vasi aplikaci bude chtit v osm rano najednou pripojit tisic uzivatelu a vy budete pro kazdy request navazovat nove db spojeni.

Nebo tam mate nejake hyper-inteligentni pooly databazovych spojeni? :-) Vase reseni me zajima, ale zatim mam pocit, ze jde pouzit maximalne pro redakcni system o deseti klientech (plus minus).
Odpovědět
Datum: 11. 6. 2008 0:14 Nový
Vložil: Maaartin (neregistrovaný)
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
No, s ORACLE-m to jde. Muzes poolovat pripojeni a pri tom davat pokazdy jiny prava.

Ja osobne si ale myslim, ze tohle neni nejdulezitejsi zabezpeceni. Napriklad pri loginu se asi tezko muzes pripojit sam za sebe, kdyz se jeste nevi kdo to bude.

Tez kdyz jsou miliony uzivatelu (treba google), tak nevim jestli to db zvlada.

Navic to predpoklada moznost urcovat prava pro pristup k jednotlivym radkum i sloupcum (nejpis to nejak pres views pujde).
Odpovědět
Datum: 12. 6. 2008 0:34 Nový
Vložil: polygon (neregistrovaný)
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
Imho je takovy pristup hruby a slozity. Neresite problem zabezpeceni aplikace, ale presouvate jej na podsystem databaze. Vysledkem takoveho reseni je nutnost slozitejsiho technickeho reseni. Nevim jak jste prisel na to, ze se takto resi podnikove aplikace, ale ja takto nevidel realizovano zatim jeste nic.
Odpovědět
Datum: 10. 6. 2008 13:19 Nový
Vložil: Zdenek (neregistrovaný)
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
Mno tak jestli si myslite, ze neni problem aby neanonymni identitu pouzival anonymni uzivatel tak opravdu bezpecnsoti nerozumite, tudiz zbytek vaseho vylevu je o nicem.
Odpovědět
Datum: 10. 6. 2008 14:10 Nový
Vložil: Karel (neregistrovaný)
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
Můžete být prosím přesnější? Rád se dozvím, jak se bez znalosti uživatelského jména a hesla dokážete přihlásit k databázi. Moc by mi pomohl třebas fragment programu v Javě. Představte si, že vám na nějaké IP adrese jede třebas Oracle 9i, víte všechny detaily, ale neznáte žádná hesla. A teď jak se dostanete dovnitř?
Odpovědět
Datum: 10. 6. 2008 14:18 Nový
Vložil: Zdenek (neregistrovaný)
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
"Na mých stránkách může kdokoliv použít SQL injection, ale v ničem mu to nepomůže. Dokonce se může k databázi připojit přímo přes SQL a dělat si tam co chce a číst co chce."

Takze najednou tohle neplati? ;-)

Rovnez vase zadost je usmevna. Predstava k uspesnemu utoku nestaci. Kazda konkretni aplikace ma sve chyby a sve uzivatele... ;-)
Odpovědět
Datum: 10. 6. 2008 15:23 Nový
Vložil: Karel (neregistrovaný)
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
Teď se ztrácím.

1. Každý uživatel se musí přihlásit k databázi. Buďto pomocí SQL klienta (jen hypotetická možnost, DB server si povídá jen s několika málo IP adresami) nebo prostřednictvím webové aplikace. V každém případě zadané přihlašovací údaje slouží k přihlášení k DB serveru. Tedy ne že by se webová aplikace přihlásila sama jako superuser a pak ověřovala údaje.

2. Jakmile jste přihlášení pomoci SQL klienta, můžete si spustit co chcete. Nastavení práv v DB ohlídá na co přístup máte a na co nikoliv. Stejně tak jakmile se přihlásíte přes webovou aplikaci, můžete pomocí SQL injection (nedělám si iluze, že by naše webová aplikace byla 100% bullet proof) spoštět taky prakticky jakékoliv SQL příkazy. Ale opět vás ohlídá nastavení práv v DB serveru.

Jak to tak po sobě čtu, možná už vím kde je zakopán pes. Výrazem "dělat si tam co chce a číst co chce" jsem mínil "pokusit se dělat si tam co chce a číst co chce, ale DB server mu dovolí jen to, na co má práva". Jinak řečeno, propašování SQL příkazu až na server nepředstavuje žádné vážné bezpečnostní riziko, protože vás vždy bude kontrolovat samotný DB server, který to umí mnohem lépe než webová aplikace.

Každopádně se vzdalujeme od toho, co jsem napadal - tvrdím (v rozporu s autorem článku), že prolomení webového rozhraní skrze SQL injection nemusí znamenat prolomení bezpečnosti celé aplikace.

Nepochybuji o tom, že SQL injection je praktický problém s dopadem na každého z nás. Kdybych měl však připodobnit tento článek k něčemu, co bude možná více srozumitelné, přirovnal bych webovou aplikaci k shellu, pomocí kterého uživatelé spouští své příkazy. Tento shell běží obvykle pod rootem. Článek tvrdí, že proto by autoři shellu měli ošetřovat jaké příkazy dovolí spustit a bránili se vynalézavosti uživatelů. A já mu oponuji tím, že dalším řešením je, aby ten shell vůbec neběžel s rootovskými právy.
Odpovědět
aura:
83
Daniel Dočekal
Datum: 10. 6. 2008 15:29 Nový
Vložil: Daniel Dočekal
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
> A já mu oponuji tím, že dalším řešením je,
> aby ten shell vůbec neběžel s rootovskými právy.

No, autor to v tom článku dost jasně píše :) Ale pokud vám Karle dělá radost že můžete oponovat, tak vám to budiž přáno :)
Odpovědět
Datum: 10. 6. 2008 15:39 Nový
Vložil: Karel (neregistrovaný)
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
Záleží na úhlu pohledu. Já jsem dnes možná poněkud podrážděný a proto ten článek vidím spíše jako konstatování, že SQL injection je vždy problém, hromady příkladů a ukázek jak ho zneužít a teprve v posledním odstavci zmíněno, že existuje metoda návrhu, která může efekt SQL injection eliminovat bez toho, že by byl eliminován samotný SQL injection, ale i ta je zmíněna jen jako něco "navíc" místo aby byla uvedena jako základ a obecně spolehlivější cesta než snaha ošetřit každý jeden vstup (byť je to cesta dražší).

I když jsem se možná jen nechal nachytat na novinářské pravidlo "první odstavec musí šokovat i kdyby měl trochu lhát, v článku to pak uveďte na pravou míru, ale ne na tolik, abyste popřel první odstavec".
Odpovědět
Datum: 12. 6. 2008 0:55 Nový
Vložil: polygon (neregistrovaný)
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
Nechci se vas nejak dotknout, ale zda se mi, ze to vidite jaksi no ... laicky. Sql injection sam o sobe je problem, ale je to problem spatne napsanych aplikaci. Rozhodne k jeho naprave neni potreba investovat spoustu usili k oprave kazdeho jednoho vstupu jak pisete, jen pristup do databaze musi byt psan urcitym zpusobem, tak aby k danemu problemu nedoslo. A co se tyce zabezpeceni databaze, tak to je (mela by byt) samozrejma vec, ale nedela se primarne kvuli odstraneni utoku sql injection, ale jako jeden z prvku beznecnosti aplikace. Napriklad v clanku zminene pravo pouze pro spousteni procedur, nebo zvlast connection pool pro uzivatele prohlizejici si web a pro ty pracujici v redakcnim systemu a podobne.
Zkratka receno bezpecnost je treba vnimat komplexne, ne jen z pohledu jednoho systemu.
Odpovědět
Datum: 10. 6. 2008 13:48 Nový
Vložil: David Grudl (neregistrovaný)
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
Tak to je samozřejmě nesmysl.

> Na mých stránkách může kdokoliv použít SQL injection, ale v ničem mu to nepomůže

To totiž znamená, že nelze do formuláře vložit třeba apostrof (nelze zadat příjmení O'Connor), aby to nezpůsobilo chybu. Na úrovni práv sice ošetříte, že nedojde ke škodě, ale nic to nemění na tom, že aplikace není plně funkční.
Odpovědět
Datum: 10. 6. 2008 14:28 Nový
Vložil: Karel (neregistrovaný)
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
Přiznám se, že tady jsem se trochu ztratil. Například Conn O'Shea v databázi registrovaný je.

Možná jsem se nevyjádřil zcela přesně, ale při přihlašování do aplikace neprovádí servlet žádné:
SELECT 1 FROM bbip_users_tab WHERE userid = :user_id_ AND password = :password_
Provádí se:
Connection con = DriverManager.getConnection( "jdbc:myDriver:wombat", pUserId, pPassword);

Tady vám SQL injection s přihlášením nepomůže.

Dále, jakmile se přihlásíte, máte jen taková práva, jaká vám byla přiřazena. Pokud nejste zrovna administrátor, máte jen práva read na někokolik málo view a vidíte pár procedur a funkcí. Zkrátka i když se přihlásíte přímo do databáze přes SQL klienta, nenapácháte žádné zásadní škody. Proto je mi celkem jedno, pokud vám webové rozhraní umožní vložit prakticky libovolný SQL příkaz. Naše aplikace mají zabezpečený datový model pomocí prostředků DB serveru. A s ohledem na to, kolik úsilí do těchto technologií investují přední dodavatelé produkčních DB serverů, nebudeme jediní.

Chápu, že je důležité udržovat i webové rozhraní v nějakém rozumně bezpečném stavu, ale trvám si na tom, že to není jediná možnost a vlastně to není ani zrovna dvakrát spolehlivá možnost.
Odpovědět
Datum: 10. 6. 2008 14:43 Nový
Vložil: Zdenek (neregistrovaný)
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
Takze nakonec uznavate autorem navrhovane reseni ke konci clanku. Pouzivat maximalne stored procedury, minimalizaci prav a aplikacni rozhrani by melo filtrovat vstupy :-)
Odpovědět
Datum: 10. 6. 2008 15:26 Nový
Vložil: Karel (neregistrovaný)
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
Ano :-)

S prvním odstavcem hrubě nesouhlasím (ne, SQL injection není vždy problém).

S dalšími kromě posledního plně souhlasím.

S posledním odstavcem pak souhlasím až na to, že bych slovo "navíc" nahradil slovem "nebo".
Odpovědět
Datum: 10. 6. 2008 17:00 Nový
Vložil: mazanek (neregistrovaný)
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
Jestli jsem to pochopil spravne, na navrhujete pouzivat stored procedury v co nejvetsi mire?
Ja mam pocit, ze pro robustnost navrhu je dobre nemit rozhazenou aplikacni logiku v databazi i v aplikaci, blbe se to spravuje a udruzuje.

flame: db my mela byt dobra v poskytovani dat, aplikace v praci s nimi a nemichat. Tj. treba autorizaci resit na urovni aplikace, nikoli databaze...
Odpovědět
aura:
49
Jaromír Adámek
Datum: 10. 6. 2008 23:38 Nový
Vložil: Jaromír Adámek
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
Taky nechápu tu část o vložených procedůrách v SQL.

Proč preferují výkonný kód v SQL, místo v PHP, či čemkoliv jiném.

Podle mě to bude nepřehledné (jak píšeš kód na dvou místech, i když někdy se to může hodit...).

Ale hlavně nechápu, jak to může zvýšit bezpečnost, například zvýšit odolnost oproti SQL Injections.

Stored procedury jsem nikdy nepoužíval, může mi to někdo vysvětlit, nějak jednoduše nejlépe?

Já si totiž myslím, že je to blbost.

Jasně, omezení práv beru.

Omezení vstupů beru, a sám je důsledně dělám.

Ale jaký je rozdíl, jestli, když špatně ošetřím vstup pak s tím kódem něco udělám s SQL přes PHP a nebo přes vloženou proceduru přímo v SQL?
Odpovědět
Datum: 11. 6. 2008 4:11 Nový
Vložil: David Grudl (neregistrovaný)
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
Možná jsem váš první komentář nepochopil správně.

Problém SQL injection chápu jako vadu při vytváření SQL příkazů. Řešením je tuto vadu ostranit, nikoliv ošetřovat její důsledky. Ve článku je třeba uveden příklad, kdy lze server "napadnout" hledáním výrazu: ' or 1=1. To je zcela regulérní výraz, který skutečně může někdo hledat. Aplikace jej proto musí korektně vložit do SQL, třeba tak, že před apostrof vloží lomítko nebo jej zdvojí - prostě jak si to konkrétní databáze žádá.

Váš komentář mi naopak vyzněl tak, že není třeba řetězec korektně vložit do SQL, protože stejně nelze získat citlivá data.
Odpovědět
Datum: 10. 6. 2008 21:51 Nový
Vložil: Pavel D. (neregistrovaný)
Titulek: "Kecat umí každý - ukaž kód!" (Linus Torvalds) (Celé vlákno)
Jak pravil Linus: "Kecat umí každý - ukaž mi kód".

Až sem hodíš odkaz na ten tvůj superweb, tak se má smysl bavit. Zatím se tu jen chvástáš, že jsi naprostý bůh.

Nezbývá než si uvědomit, že kdyby tvé řešení skutečně fungovalo, už bys
a) dávno byl v balíku jako konzultant nějaké megafirmy
b) pořádal školení, jak to dělat, a všichni by to po tobě kopírovali.
Odpovědět
Datum: 10. 6. 2008 23:35 Nový
Vložil: Miloš (neregistrovaný)
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
To je řešení dostatečné pouze v případě, že žádný z uživatelů nemá právo žádného zápisu. Jakmile může cokoliv zapisovat, pak je kontrola dat nutností. Zvláště, jde-li o architekturu s tenkým klientem ve formě webového prohlížeče. Není přece problém vsunout do textového řetězce skript nebo odkaz kamkoliv. Pak se provede při čtení na straně uživatele a váš server tomu nezabrání.

Osobně nevím, proč by měl mít uživatel právo posílat jakýkoliv SQL příkaz a dokonce proč by měl mít nějaké právo přístupu do databáze. Databázový server je služba aplikaci, nikoliv uživateli. SQL slouží ke komunikaci mezi aplikací a databází, nikoliv mezi uživatelem a databází. Uživatel nechť má přístup do aplikace a vše se pak musí dít pod její kontrolou.(Pochopitelně běží na serveru). Netvrdím, že je to jediný možný či vhodný model - ale mě se páčí nejvíce.
Odpovědět
Datum: 11. 6. 2008 10:03 Nový
Vložil: uživatel si přál zůstat v anonymitě
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
První odstavec je velice nepěkné paušalizování. Záleží na architektuře a na samotné aplikaci.

S tím se dá souhlasit. Ne každá chyba v aplikaci je zneužitelná a od toho jsou penetrační testy, aby se ukázalo, jestli ty chyby zneužít jdou nebo nejdou.

SQL injection je typ útoku, kterému se dá bránit buďto pečlivým vytvářením aplikace, nebo zvolit takovou architekturu, u které SQL injection nemá smysl.

No, v principu mate pravdu, ale je třeba mít na paměti, že dnes už každá databáze má prostředky pro čtení souborů na disku, případně i pro spouštění kódu. SQL injection nemusí být jen o tom, že něco uložím nebo vyčtu z databáze.

A není radno zapomínat, že injection útoky platí i na další používané technologie - ldap, xpath, ...

Odpovědět
Datum: 10. 6. 2008 11:40 Nový
Vložil: Alois Vitásek (neregistrovaný)
Titulek: ad klaus.cz
Klaus.cz byl reportován krátce po jeho prvním zvolení prezdentem. SQL injection tam je, ale je to fixnuté a tak, že to využít nejde.

Ale trochu osvěty na todle téma nemůže nikdy škodit.

Když se z jednoho jazyka lepí jíný, tak je holt třeba eskejpovat citlivé znaky.
Odpovědět
Datum: 10. 6. 2008 13:16 Nový
Vložil: JirkaV (neregistrovaný)
Titulek: SQL Injection v praxi
Odpovědět
Datum: 10. 6. 2008 13:52 Nový
Vložil: David Grudl (neregistrovaný)
Titulek: Používejte layer (Celé vlákno)
Tady lze doporučit - používejte kvalitní databázový layer (pro PHP třeba dibi ;) a nemusíte se SQL injection vůbec bát. Obrovská výhoda této (až nepochopitelně rozšířené) chyby je ta, že se dá vyřešit na velmi nízké úrovni a pak už na ní není třeba myslet.
Odpovědět
Datum: 10. 6. 2008 14:07 Nový
Vložil: onanym (neregistrovaný)
Titulek: Re: Používejte layer (Celé vlákno)
Jistě jistě ono taky stačí používat nativní PDO, ne nějaké vaše obskurní třídy.
Odpovědět
Datum: 11. 6. 2008 3:44 Nový
Vložil: David Grudl (neregistrovaný)
Titulek: Re: Používejte layer (Celé vlákno)
Samozřejmě spoustě lidí stačí obyčejné PDO. Ale kdo chce něco navíc, používá dibi. V současné době ten nejúúúžasnější databázový layer! Tak to prostě je. S tím nic nenaděláte :-))
Odpovědět
Datum: 11. 6. 2008 8:23 Nový
Vložil: uživatel si přál zůstat v anonymitě
Titulek: Re: Používejte layer (Celé vlákno)
A kto chce nieco naviac, pouziva Javu a hibernate (.net+nhibernate).
Este nejake stupidne argumenty ?
Odpovědět
Datum: 10. 6. 2008 20:15 Nový
Vložil: lecter (neregistrovaný)
Titulek: RE: Na podceňovanou hrozbu SQL injection doplácí i řada českých webů
Kdyz nekdo pouziva hruzu jako MS OLE DB a MS Jet DB, tak necht trpi.
Odpovědět
Datum: 11. 6. 2008 7:47 Nový
Vložil: Hahaha (neregistrovaný)
Titulek: Ja vám nevym. (Celé vlákno)
Tade je to samé prgoš, samé ekjaltion a podobně. A žádná samohana.
Teda chlapí, a co ta SKJŮeL injektse udělá s Lotus Domino Serverem.

Teda to by mne Meďánku náš zajímalo.
Ha ha ha.

Nazdar.

p.s.
kolik jazyků znáš, tolikráte jsi programátorem.
Досвидания
Bye, bye
Odpovědět
Datum: 11. 6. 2008 17:23 Nový
Vložil: klakson (neregistrovaný)
Titulek: Re: Ja vám nevym. (Celé vlákno)
Vubec nic pac to neni SQL databaze ;-)
Odpovědět
Datum: 12. 6. 2008 3:54 Nový
Vložil: trotl (neregistrovaný)
Titulek: RE: Na podceňovanou hrozbu SQL injection doplácí i řada českých webů
Cest praci, siudruzi..bohuzel nechapu o cem je rec...
Odpovědět
aura:
55
Mem
Datum: 12. 6. 2008 12:23 Nový
Vložil: Mem
Titulek: Technická k "SQL" (Celé vlákno)
"Pokud vládnete jazykem SQL, tak začínáte tušit, jak velká je tohle zrada (a malér)" a i v dalších příkladech (xp_cmdshell)

To první není SQL, ale T-SQL, a jedná se o příklady konkrétně pro MS SQL Server, takže je trochu zavádějící to za "SQL" označovat, protože SQL jsou především normy napříč db, a ne jen jedno řešení od MS, ne
Odpovědět
Datum: 13. 6. 2008 22:15 Nový
Vložil: Aim (neregistrovaný)
Titulek: Re: Technická k "SQL" (Celé vlákno)
Ano. Ostatní tu jenom dělají machry, ale skutek utek.
Odpovědět

Sledování názorů

Registrovaným uživatelům nabízíme upozornění na nové názory e-mailem. Prosím, přihlaste se nebo se zaregistrujte.

Přehled názorů

Nastavení kvality: Vlastní Vše 2 3 4 5 6 7 8 9
Jazyk Ra100 10. 6. 2008 7:59
   Re: Jazyk Daniel Dočekal 10. 6. 2008 8:10
   Re: Jazyk M. 10. 6. 2008 8:22
   Re: Jazyk Jakub Suchy 10. 6. 2008 8:35
   Re: Jazyk Petr 10. 6. 2008 8:47
   Re: Jazyk lukas 10. 6. 2008 10:04
   Re: Jazyk Daniel Dočekal 10. 6. 2008 8:54
   Re: Jazyk stoural 10. 6. 2008 8:54
   Re: Jazyk Tomas 10. 6. 2008 9:07
   Re: Jazyk N/A 10. 6. 2008 10:48
   Re: Jazyk polygon 12. 6. 2008 0:11
   rozpálená kamna mofo 10. 6. 2008 10:03
   Re: rozpálená kamna Miloš 10. 6. 2008 19:07
   Re: Jazyk Karuč 10. 6. 2008 11:45
   Re: Jazyk sejc 11. 6. 2008 7:38
Nedělal bych z toho aféru Mirek 10. 6. 2008 9:58
   Re: Nedělal bych z toho aféru anonymní uživatel 10. 6. 2008 10:13
   Re: Nedělal bych z toho aféru czeXit 10. 6. 2008 10:55
   Re: Nedělal bych z toho aféru Mirek 10. 6. 2008 20:05
   Re: Nedělal bych z toho aféru czeXit 13. 6. 2008 11:45
   Re: Nedělal bych z toho aféru pavel 10. 6. 2008 12:53
Hrubě nesouhlasím s prvním odstavcem Karel 10. 6. 2008 11:39
   Re: Hrubě nesouhlasím s prvním odstavcem luky 10. 6. 2008 12:05
   Re: Hrubě nesouhlasím s prvním odstavcem Karel 10. 6. 2008 14:04
   Re: Hrubě nesouhlasím s prvním odstavcem hisaak 10. 6. 2008 20:13
   Re: Hrubě nesouhlasím s prvním odstavcem Maaartin 11. 6. 2008 0:14
   Re: Hrubě nesouhlasím s prvním odstavcem polygon 12. 6. 2008 0:34
   Re: Hrubě nesouhlasím s prvním odstavcem Zdenek 10. 6. 2008 13:19
   Re: Hrubě nesouhlasím s prvním odstavcem Karel 10. 6. 2008 14:10
   Re: Hrubě nesouhlasím s prvním odstavcem Zdenek 10. 6. 2008 14:18
   Re: Hrubě nesouhlasím s prvním odstavcem Karel 10. 6. 2008 15:23
   Re: Hrubě nesouhlasím s prvním odstavcem Daniel Dočekal 10. 6. 2008 15:29
   Re: Hrubě nesouhlasím s prvním odstavcem Karel 10. 6. 2008 15:39
   Re: Hrubě nesouhlasím s prvním odstavcem polygon 12. 6. 2008 0:55
   Re: Hrubě nesouhlasím s prvním odstavcem David Grudl 10. 6. 2008 13:48
   Re: Hrubě nesouhlasím s prvním odstavcem Karel 10. 6. 2008 14:28
   Re: Hrubě nesouhlasím s prvním odstavcem Zdenek 10. 6. 2008 14:43
   Re: Hrubě nesouhlasím s prvním odstavcem Karel 10. 6. 2008 15:26
   Re: Hrubě nesouhlasím s prvním odstavcem mazanek 10. 6. 2008 17:00
   Re: Hrubě nesouhlasím s prvním odstavcem Jaromír Adámek 10. 6. 2008 23:38
   Re: Hrubě nesouhlasím s prvním odstavcem David Grudl 11. 6. 2008 4:11
   "Kecat umí každý - ukaž kód!" (Linus Torvalds) Pavel D. 10. 6. 2008 21:51
   Re: Hrubě nesouhlasím s prvním odstavcem Miloš 10. 6. 2008 23:35
   Re: Hrubě nesouhlasím s prvním odstavcem anonymní uživatel 11. 6. 2008 10:03
ad klaus.cz Alois Vitásek 10. 6. 2008 11:40
SQL Injection v praxi JirkaV 10. 6. 2008 13:16
Používejte layer David Grudl 10. 6. 2008 13:52
   Re: Používejte layer onanym 10. 6. 2008 14:07
   Re: Používejte layer David Grudl 11. 6. 2008 3:44
   Re: Používejte layer anonymní uživatel 11. 6. 2008 8:23
RE: Na podceňovanou hrozbu SQL injection doplácí i řada českých webů lecter 10. 6. 2008 20:15
Ja vám nevym. Hahaha 11. 6. 2008 7:47
   Re: Ja vám nevym. klakson 11. 6. 2008 17:23
RE: Na podceňovanou hrozbu SQL injection doplácí i řada českých webů trotl 12. 6. 2008 3:54
Technická k "SQL" Mem 12. 6. 2008 12:23
   Re: Technická k "SQL" Aim 13. 6. 2008 22:15
Zobrazit kvalitníZobrazit všePřidat