Názory k článku Na podceňovanou hrozbu SQL injection doplácí i řada českých webů
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.
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.
ale takovym tim zpusobem "sakra, jak se pouzivaji ty parametry? ... tady nekde byl priklad!" ;-)
Vložil: Miloš (neregistrovaný)
Titulek: Re: rozpálená kamna (Celé vlákno)
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.
Jinak v .NET je DLINQ, v rámci kterého toto opravdu nelze přejít, ale to zase nelze použít vždy.
Vložil: Mirek (neregistrovaný)
Titulek: Nedělal bych z toho aféru (Celé vlákno)
Vložil: uživatel si přál zůstat v anonymitě
Titulek: Re: Nedělal bych z toho aféru (Celé vlákno)
Vložil: czeXit (neregistrovaný)
Titulek: Re: Nedělal bych z toho aféru (Celé vlákno)
prosim Te, pochlub se tu posli mi nejaky linky na weby co jsi delal ;)
Vložil: Mirek (neregistrovaný)
Titulek: Re: Nedělal bych z toho aféru (Celé vlákno)
Vložil: czeXit (neregistrovaný)
Titulek: Re: Nedělal bych z toho aféru (Celé vlákno)
ktery vyraz ze mam googlit? "Mirek (neregistrovaný)"?
Vložil: pavel (neregistrovaný)
Titulek: Re: Nedělal bych z toho aféru (Celé vlákno)
Vložil: Karel (neregistrovaný)
Titulek: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
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".
Vložil: luky (neregistrovaný)
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
Vložil: Karel (neregistrovaný)
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
Vložil: hisaak (neregistrovaný)
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
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).
Vložil: Maaartin (neregistrovaný)
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
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).
Vložil: polygon (neregistrovaný)
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
Vložil: Zdenek (neregistrovaný)
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
Vložil: Karel (neregistrovaný)
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
Vložil: Zdenek (neregistrovaný)
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
Takze najednou tohle neplati? ;-)
Rovnez vase zadost je usmevna. Predstava k uspesnemu utoku nestaci. Kazda konkretni aplikace ma sve chyby a sve uzivatele... ;-)
Vložil: Karel (neregistrovaný)
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
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.
83
Vložil: Daniel Dočekal
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
> 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 :)
Vložil: Karel (neregistrovaný)
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
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".
Vložil: polygon (neregistrovaný)
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
Zkratka receno bezpecnost je treba vnimat komplexne, ne jen z pohledu jednoho systemu.
Vložil: David Grudl (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
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í.
Vložil: Karel (neregistrovaný)
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
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.
Vložil: Zdenek (neregistrovaný)
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
Vložil: Karel (neregistrovaný)
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
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".
Vložil: mazanek (neregistrovaný)
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
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...
49
Vložil: Jaromír Adámek
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
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?
Vložil: David Grudl (neregistrovaný)
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
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.
Vložil: Pavel D. (neregistrovaný)
Titulek: "Kecat umí každý - ukaž kód!" (Linus Torvalds) (Celé vlákno)
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.
Vložil: Miloš (neregistrovaný)
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
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.
Vložil: uživatel si přál zůstat v anonymitě
Titulek: Re: Hrubě nesouhlasím s prvním odstavcem (Celé vlákno)
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, ...
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.
Vložil: David Grudl (neregistrovaný)
Titulek: Používejte layer (Celé vlákno)
Vložil: onanym (neregistrovaný)
Titulek: Re: Používejte layer (Celé vlákno)
Vložil: David Grudl (neregistrovaný)
Titulek: Re: Používejte layer (Celé vlákno)
Vložil: uživatel si přál zůstat v anonymitě
Titulek: Re: Používejte layer (Celé vlákno)
Este nejake stupidne argumenty ?
Vložil: lecter (neregistrovaný)
Titulek: RE: Na podceňovanou hrozbu SQL injection doplácí i řada českých webů
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
Vložil: klakson (neregistrovaný)
Titulek: Re: Ja vám nevym. (Celé vlákno)
Vložil: trotl (neregistrovaný)
Titulek: RE: Na podceňovanou hrozbu SQL injection doplácí i řada českých webů
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
Vložil: Aim (neregistrovaný)
Titulek: Re: Technická k "SQL" (Celé vlákno)
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.

