Re: [python] Vkladani listu do SQL prikazu
fakt nemam rad, ked niekto nieco komentuje bez toho aby si to poriadne precital. superman wrote: > Napadlo Vás, že v tom listu může být naprosto cokoli? A že když je tam > co nemá být, tak se to dostane do databáze? > > Způsob nabourání se liší od databáze k databázi, ale zkuste si to toho > listu dát třeba pro mysql > > nejaky_list = [")", ";drop database jmeno_database;"] > > A máte vymalováno, uvolníte spoustu místa na disku zrušením totálně celé > databáze. Můžete odložit nákup nového disku, na kterém už docházelo > místo. :-) > > Miloslav Ponkrác > > > > > Jan Janech napsal(a): >> Osobne tam nevidim nic zle. Nie je to "pitome" riesenie, nakolko sa o >> vyplnenie a formatovanie stara DB-API a nie ja. Poprosim o ukazku toho, >> ako to dokaze nejaky cracker naburat. >> >> superman wrote: >> >>> Já se moc omlouvám, ale proti podobně pitomým řešením se musím ozvat. >>> Tedy pokud toužíte po tom dát případnému crackerovi do ruky naprosto >>> ideální nástroj k průniku do vašeho systému tak je toto řešení skvělé. A >>> pokud takto řešíte listy, tak není pro mě problém vám zvenčí třeba >>> zrušit celou databázi a vyčistit vám jí dočista do čista pouhým vstupem >>> zvenku jakožto uživatel. >>> >>> Nehledě na tom, že na některých vstupech v listech to musí selhat tak >>> jako tak. >>> >>> Takhle se to nedá dělat! >>> >>> Miloslav Ponkrác >>> >>> > > ___ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/listinfo/python > > > -- Ing. Jan Janech Katedra softverovych technologii Fakulta riadenia a informatiky Zilinska Univerzita ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Vkladani listu do SQL prikazu
V každé databázi jde zkonstruovat nebezpečný příkaz, v naprosto každé. I té vaší "dospělejší" databázi. Je to o to snažší, že jen málokdo zná úplnou syntaxi SQL pro daný databázový stroj, a jeho zákoutí. A databáze nic nekontroluje, pro ní tím, že jste se přihlásil, a tím, že máte potřebná práva na SQL dotaz, a návazné databáze, tabulky, pohledy, a další databázové objekty veškerá kontrola končí. Jste nalogovaný a máte potřebné role? Databáze dotaz vykoná, ať je jakýkoli. Omlouvám se, že jsem si dovolil uvést příklad na mysql, příště budu uvádět oracle a db2. Sice to většině lidem z konference nebude k užitku, ale vyhnu se aspoň narážkám na mysql. M. Ponkrác > Dne 15. srpen 2008 11:51 Jaroslav Lukesh <[EMAIL PROTECTED]> napsal(a): > >> tak se nestane vůbec nic, maximálně nějaký ohromný sql error. syntaxe dotazů >> má jistá pravidla. Ikdyž dětskou hračku mysql nepoužívám, tak nevím jestli >> to opravdu nedovolí, v kdejaké dospělejší databázi to neprojde. >> >> ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Vkladani listu do SQL prikazu
Dne 15. srpen 2008 11:51 Jaroslav Lukesh <[EMAIL PROTECTED]> napsal(a): > tak se nestane vůbec nic, maximálně nějaký ohromný sql error. syntaxe dotazů > má jistá pravidla. Ikdyž dětskou hračku mysql nepoužívám, tak nevím jestli > to opravdu nedovolí, v kdejaké dospělejší databázi to neprojde. > Zdravim, je mozne, ze tento konkretni pripad neni uplne presny, nicmene, to neznamena, ze obdobnym zpusobem nelze zkonstruovat nebezpecny prikaz vyhovujici syntaxi. Kdykoliv pouzivate vstup od uzivatele jako soucast nejakeho systemoveho/databazeveho prikazu je treba byt opatrny. Vzdy je lepsi (a vetsinou i nutne) vstup od uzivatele zkontrolovat. Kdyz uz pro nic jineho tak pro jistotu. honza. ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Vkladani listu do SQL prikazu
Dobry den, Dne 15. srpen 2008 11:39 superman <[EMAIL PROTECTED]> napsal(a): > nejaky_list = [")", ";drop database jmeno_database;"] > Toto bych resil tak, ze bych napred samotne tagy zkontroloval. Napriklad tak, ze bych z tagu zadanych uzivatelem vymazal vsechny znaky ktere nejsou cislice nebo pismena: def check(string): return filter(lambda x: x.isalpnum(), string) # toto je pouze ukazka Osetreni vstupu od uzivatele stejnak musite nekde udelat. S osetrenymi tagy uz bych nakladal stejne jako v puvodnim priklade (akorat bych mozna pouzil reduce). honza. ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Vkladani listu do SQL prikazu
tak se nestane vůbec nic, maximálně nějaký ohromný sql error. syntaxe dotazů má jistá pravidla. Ikdyž dětskou hračku mysql nepoužívám, tak nevím jestli to opravdu nedovolí, v kdejaké dospělejší databázi to neprojde. - Original Message - From: "superman" <[EMAIL PROTECTED]> Napadlo Vás, že v tom listu může být naprosto cokoli? A že když je tam co nemá být, tak se to dostane do databáze? Způsob nabourání se liší od databáze k databázi, ale zkuste si to toho listu dát třeba pro mysql nejaky_list = [")", ";drop database jmeno_database;"] A máte vymalováno, uvolníte spoustu místa na disku zrušením totálně celé databáze. Můžete odložit nákup nového disku, na kterém už docházelo místo. :-) ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Vkladani listu do SQL prikazu
Musim se Honzy zastat, obavam se, ze jste jeho konstrukci uplne nepochopil. On nevklada pres stringove operace samotne polozky z listu, ale pouze rozkopirovava string "%s" tak, aby nasledne DB API "vyklofala" jednotlive polozky listu sama. Je to sice trochu kuriozni reseni, na druhou stranu tam zadne bezpecnostni riziko opravdu nevidim (a to jsem docela paranoidni). Marek Dne 15. srpen 2008 12:39 superman <[EMAIL PROTECTED]> napsal(a): > Napadlo Vás, že v tom listu může být naprosto cokoli? A že když je tam > co nemá být, tak se to dostane do databáze? > > Způsob nabourání se liší od databáze k databázi, ale zkuste si to toho > listu dát třeba pro mysql > > nejaky_list = [")", ";drop database jmeno_database;"] > > A máte vymalováno, uvolníte spoustu místa na disku zrušením totálně celé > databáze. Můžete odložit nákup nového disku, na kterém už docházelo > místo. :-) > > Miloslav Ponkrác > > > > > Jan Janech napsal(a): > > Osobne tam nevidim nic zle. Nie je to "pitome" riesenie, nakolko sa o > > vyplnenie a formatovanie stara DB-API a nie ja. Poprosim o ukazku toho, > > ako to dokaze nejaky cracker naburat. > > > > superman wrote: > > > >> Já se moc omlouvám, ale proti podobně pitomým řešením se musím ozvat. > >> Tedy pokud toužíte po tom dát případnému crackerovi do ruky naprosto > >> ideální nástroj k průniku do vašeho systému tak je toto řešení skvělé. A > >> pokud takto řešíte listy, tak není pro mě problém vám zvenčí třeba > >> zrušit celou databázi a vyčistit vám jí dočista do čista pouhým vstupem > >> zvenku jakožto uživatel. > >> > >> Nehledě na tom, že na některých vstupech v listech to musí selhat tak > >> jako tak. > >> > >> Takhle se to nedá dělat! > >> > >> Miloslav Ponkrác > >> > >> > > ___ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/listinfo/python > ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Vkladani listu do SQL prikazu
Napadlo Vás, že v tom listu může být naprosto cokoli? A že když je tam co nemá být, tak se to dostane do databáze? Způsob nabourání se liší od databáze k databázi, ale zkuste si to toho listu dát třeba pro mysql nejaky_list = [")", ";drop database jmeno_database;"] A máte vymalováno, uvolníte spoustu místa na disku zrušením totálně celé databáze. Můžete odložit nákup nového disku, na kterém už docházelo místo. :-) Miloslav Ponkrác Jan Janech napsal(a): > Osobne tam nevidim nic zle. Nie je to "pitome" riesenie, nakolko sa o > vyplnenie a formatovanie stara DB-API a nie ja. Poprosim o ukazku toho, > ako to dokaze nejaky cracker naburat. > > superman wrote: > >> Já se moc omlouvám, ale proti podobně pitomým řešením se musím ozvat. >> Tedy pokud toužíte po tom dát případnému crackerovi do ruky naprosto >> ideální nástroj k průniku do vašeho systému tak je toto řešení skvělé. A >> pokud takto řešíte listy, tak není pro mě problém vám zvenčí třeba >> zrušit celou databázi a vyčistit vám jí dočista do čista pouhým vstupem >> zvenku jakožto uživatel. >> >> Nehledě na tom, že na některých vstupech v listech to musí selhat tak >> jako tak. >> >> Takhle se to nedá dělat! >> >> Miloslav Ponkrác >> >> ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Vkladani listu do SQL prikazu
Osobne tam nevidim nic zle. Nie je to "pitome" riesenie, nakolko sa o vyplnenie a formatovanie stara DB-API a nie ja. Poprosim o ukazku toho, ako to dokaze nejaky cracker naburat. superman wrote: > Já se moc omlouvám, ale proti podobně pitomým řešením se musím ozvat. > Tedy pokud toužíte po tom dát případnému crackerovi do ruky naprosto > ideální nástroj k průniku do vašeho systému tak je toto řešení skvělé. A > pokud takto řešíte listy, tak není pro mě problém vám zvenčí třeba > zrušit celou databázi a vyčistit vám jí dočista do čista pouhým vstupem > zvenku jakožto uživatel. > > Nehledě na tom, že na některých vstupech v listech to musí selhat tak > jako tak. > > Takhle se to nedá dělat! > > Miloslav Ponkrác > > >> Ahoj, >> >> ako najjednoduchsie (a zaroven este ako tak rozumne) riesenie vidim: >> >> tmp = ",".join(["%s"]*len(nejakylist)) >> cursor.execute("SELECT WHERE t.tagname IN ("+tmp+")", nejakylist). >> >> Popripade, ak sa niekomu nepaci, ze sa tam robi zbytocny zoznam (napr. >> mne ;) ), tak to iste cez iteratory: >> >> tmp = ",".join("%s" for polozka in nejakylist) >> cursor.execute("SELECT WHERE t.tagname IN ("+tmp+")", nejakylist). >> > > ___ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/listinfo/python > > > -- Ing. Jan Janech Katedra softverovych technologii Fakulta riadenia a informatiky Zilinska Univerzita ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Vkladani listu do SQL prikazu
Já se moc omlouvám, ale proti podobně pitomým řešením se musím ozvat. Tedy pokud toužíte po tom dát případnému crackerovi do ruky naprosto ideální nástroj k průniku do vašeho systému tak je toto řešení skvělé. A pokud takto řešíte listy, tak není pro mě problém vám zvenčí třeba zrušit celou databázi a vyčistit vám jí dočista do čista pouhým vstupem zvenku jakožto uživatel. Nehledě na tom, že na některých vstupech v listech to musí selhat tak jako tak. Takhle se to nedá dělat! Miloslav Ponkrác > Ahoj, > > ako najjednoduchsie (a zaroven este ako tak rozumne) riesenie vidim: > > tmp = ",".join(["%s"]*len(nejakylist)) > cursor.execute("SELECT WHERE t.tagname IN ("+tmp+")", nejakylist). > > Popripade, ak sa niekomu nepaci, ze sa tam robi zbytocny zoznam (napr. > mne ;) ), tak to iste cez iteratory: > > tmp = ",".join("%s" for polozka in nejakylist) > cursor.execute("SELECT WHERE t.tagname IN ("+tmp+")", nejakylist). > ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Vkladani listu do SQL prikazu
Ahoj, ako najjednoduchsie (a zaroven este ako tak rozumne) riesenie vidim: tmp = ",".join(["%s"]*len(nejakylist)) cursor.execute("SELECT WHERE t.tagname IN ("+tmp+")", nejakylist). Popripade, ak sa niekomu nepaci, ze sa tam robi zbytocny zoznam (napr. mne ;) ), tak to iste cez iteratory: tmp = ",".join("%s" for polozka in nejakylist) cursor.execute("SELECT WHERE t.tagname IN ("+tmp+")", nejakylist). slush wrote: > Zdravim vsechny, > > nedavno se tu resilo, jakym zpusobem posilat promenne do SQL. Dostal > jsem se k podobnemu problemu - totiz jakym zpusobem vkladat do SQL ne > jednotlive retezce, ale cele listy. Uvedu priklad: > > nejakylist = ['tag1', 'tag2'] > cursor.execute("SELECT WHERE t.tagname IN (%s)''', nejakylist) > > Toto samozrejme nefunguje, protoze zastupna promenna "%s" hleda v > "nejakylist" pouze string, nikoliv list. Potreboval bych, aby se pole > "nejakylist" do SQL vlozilo s nasledujici syntaxi: > > SELECT WHERE t.tagname IN ("tag1","tag2") > > Tady konkretne to resim v Djangu (from django.db import connection), ale > myslim, ze to je dotaz i pro obecny Python. > > Diky za kazde nakopnuti, > Marek > > > > > ___ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/listinfo/python -- Ing. Jan Janech Katedra softverovych technologii Fakulta riadenia a informatiky Zilinska Univerzita ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Vkladani listu do SQL prikazu
DB Api Djanga samozrejme znam. Prave proto vim, ze soucasna 1.0 alpha nezvlada agregovane dotazy. Vzhledem k tomu, ze jeden takovy potrebuji, musel jsem sahnout po starem dobrem SQL. Protoze jsem se na tom ale nechtel zaseknout, nakonec jsem to implementoval pomoci Django DB API a agregacni funkce jsem nasimuloval v Pythonu (fuj!). Mam to ted v denicku jako velke FIXME, protoze s rustem velikosti tabulek to zacne byt neunosne pomale :(. Snad mezitim najdu nejake elegantnejsi reseni. Marek 2008/8/14 Tomas Fulajtar <[EMAIL PROTECTED]> > Zdravim, > > pokud se to ma pouzivat v Djangu, tak se podivejte do dokumentace na sekci > > http://www.djangoproject.com/documentation/db-api/#field-lookups > > viz IN. > > Napr. pro objekt Osoba, chci fitrovat jmena: > > Osoba.objects.filter(jmeno_in=["Karel","Pepa"]) > > > Tomas Fulajtar > > > --- On Thu, 8/14/08, slush <[EMAIL PROTECTED]> wrote: > > > From: slush <[EMAIL PROTECTED]> > > Subject: Re: [python] Vkladani listu do SQL prikazu > > To: "Konference PyCZ" > > Date: Thursday, August 14, 2008, 4:32 PM > > > > > > > [tag for tag in nejakylist] > > > > > > > > Tohle jsem mozna nepochopil. Nevim, co bych tim mel ziskat. > > > > > cursor.execute("SELECT WHERE t.tagname IN > > (%s)", join(nejakylist, > > "','") ) > > > > tohle je samozrejme prvni vec, ktera me napadla. Problem je > > SQL injection. > > Muselo by se to resit manualne a ja neverim, ze to sql > > rozhrani s moznosti > > listu nepocita. > > > > > prevedte list na string a oholte mu ty hranaté > > závorky > > > > Tohle reseni je zajimave! Jen ne moc elegantni :). No pokud > > se nepovede nic > > lepsiho, zkusim to touhle cestou. > > > > Zatim, > > Marek > > ___ > > Python mailing list > > Python@py.cz > > http://www.py.cz/mailman/listinfo/python > > > > ___ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/listinfo/python > ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Vkladani listu do SQL prikazu
Zdravim, pokud se to ma pouzivat v Djangu, tak se podivejte do dokumentace na sekci http://www.djangoproject.com/documentation/db-api/#field-lookups viz IN. Napr. pro objekt Osoba, chci fitrovat jmena: Osoba.objects.filter(jmeno_in=["Karel","Pepa"]) Tomas Fulajtar --- On Thu, 8/14/08, slush <[EMAIL PROTECTED]> wrote: > From: slush <[EMAIL PROTECTED]> > Subject: Re: [python] Vkladani listu do SQL prikazu > To: "Konference PyCZ" > Date: Thursday, August 14, 2008, 4:32 PM > > > > > [tag for tag in nejakylist] > > > > > Tohle jsem mozna nepochopil. Nevim, co bych tim mel ziskat. > > > cursor.execute("SELECT WHERE t.tagname IN > (%s)", join(nejakylist, > "','") ) > > tohle je samozrejme prvni vec, ktera me napadla. Problem je > SQL injection. > Muselo by se to resit manualne a ja neverim, ze to sql > rozhrani s moznosti > listu nepocita. > > > prevedte list na string a oholte mu ty hranaté > závorky > > Tohle reseni je zajimave! Jen ne moc elegantni :). No pokud > se nepovede nic > lepsiho, zkusim to touhle cestou. > > Zatim, > Marek > ___ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/listinfo/python ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Vkladani listu do SQL prikazu
> > > prevedte list na string a oholte mu ty hranaté závorky > > Tohle reseni je zajimave! Jen ne moc elegantni :). No pokud se nepovede nic > lepsiho, zkusim to touhle cestou. > Tak ne, tohle neni cesta, kterou bych se chtel vydat. Pripada mi, ze vstup od uzivatele by mel byt osetreny robustneji nez nejake hratky s orezavanim stringu. Jeden z prvnich problemu, na ktery jsem totiz narazil byl napriklad list unicode stringu. Tam to nefungovalo a vyzadovalo by to dalsi hacky. Marek ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Vkladani listu do SQL prikazu
> > > [tag for tag in nejakylist] > > Tohle jsem mozna nepochopil. Nevim, co bych tim mel ziskat. > cursor.execute("SELECT WHERE t.tagname IN (%s)", join(nejakylist, "','") ) tohle je samozrejme prvni vec, ktera me napadla. Problem je SQL injection. Muselo by se to resit manualne a ja neverim, ze to sql rozhrani s moznosti listu nepocita. > prevedte list na string a oholte mu ty hranaté závorky Tohle reseni je zajimave! Jen ne moc elegantni :). No pokud se nepovede nic lepsiho, zkusim to touhle cestou. Zatim, Marek ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Vkladani listu do SQL prikazu
prevedte list na string a oholte mu ty hranaté závorky - Original Message - From: slush nedavno se tu resilo, jakym zpusobem posilat promenne do SQL. Dostal jsem se k podobnemu problemu - totiz jakym zpusobem vkladat do SQL ne jednotlive retezce, ale cele listy. Uvedu priklad: nejakylist = ['tag1', 'tag2'] cursor.execute("SELECT WHERE t.tagname IN (%s)''', nejakylist) Toto samozrejme nefunguje, protoze zastupna promenna "%s" hleda v "nejakylist" pouze string, nikoliv list. Potreboval bych, aby se pole "nejakylist" do SQL vlozilo s nasledujici syntaxi: SELECT WHERE t.tagname IN ("tag1","tag2") ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Vkladani listu do SQL prikazu
je to trochu salamunske riesenie, ale napada ma toto (neskusal som, mozno sa tam objavi nejaky problem): from string import join cursor.execute("SELECT WHERE t.tagname IN (%s)", join(nejakylist, "','") ) tzn. urobis z toho listu nieco ako tag1','tag2','tag3 a toto nasledne hodis MySQLdb. ten by to tam mal vlozir ako 'tag1','tag2','tag3' (teda na zaciatok a na koniec prida ' ) -----Pôvodná správa- Od: slush [EMAIL PROTECTED] Komu: "Konference PyCZ" Predmet: [python] Vkladani listu do SQL prikazu Zdravim vsechny, nedavno se tu resilo, jakym zpusobem posilat promenne do SQL. Dostal jsem se k podobnemu problemu - totiz jakym zpusobem vkladat do SQL ne jednotlive retezce, ale cele listy. Uvedu priklad: nejakylist = ['tag1', 'tag2'] cursor.execute("SELECT WHERE t.tagname IN (%s)''', nejakylist) Toto samozrejme nefunguje, protoze zastupna promenna "%s" hleda v "nejakylist" pouze string, nikoliv list. Potreboval bych, aby se pole "nejakylist" do SQL vlozilo s nasledujici syntaxi: SELECT WHERE t.tagname IN ("tag1","tag2") Tady konkretne to resim v Djangu (from django.db import connection), ale myslim, ze to je dotaz i pro obecny Python. Diky za kazde nakopnuti, Marek ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Vkladani listu do SQL prikazu
nakopnu ;-) [tag for tag in nejakylist] Tomas Dne 14.8.2008 14:40, slush napsal(a): > Zdravim vsechny, > > nedavno se tu resilo, jakym zpusobem posilat promenne do SQL. Dostal > jsem se k podobnemu problemu - totiz jakym zpusobem vkladat do SQL ne > jednotlive retezce, ale cele listy. Uvedu priklad: > > nejakylist = ['tag1', 'tag2'] > cursor.execute("SELECT WHERE t.tagname IN (%s)''', nejakylist) > > Toto samozrejme nefunguje, protoze zastupna promenna "%s" hleda v > "nejakylist" pouze string, nikoliv list. Potreboval bych, aby se pole > "nejakylist" do SQL vlozilo s nasledujici syntaxi: > > SELECT WHERE t.tagname IN ("tag1","tag2") > > Tady konkretne to resim v Djangu (from django.db import connection), > ale myslim, ze to je dotaz i pro obecny Python. > > Diky za kazde nakopnuti, > Marek > > > > ___ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/listinfo/python ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] Vkladani listu do SQL prikazu
Zdravim vsechny, nedavno se tu resilo, jakym zpusobem posilat promenne do SQL. Dostal jsem se k podobnemu problemu - totiz jakym zpusobem vkladat do SQL ne jednotlive retezce, ale cele listy. Uvedu priklad: nejakylist = ['tag1', 'tag2'] cursor.execute("SELECT WHERE t.tagname IN (%s)''', nejakylist) Toto samozrejme nefunguje, protoze zastupna promenna "%s" hleda v "nejakylist" pouze string, nikoliv list. Potreboval bych, aby se pole "nejakylist" do SQL vlozilo s nasledujici syntaxi: SELECT WHERE t.tagname IN ("tag1","tag2") Tady konkretne to resim v Djangu (from django.db import connection), ale myslim, ze to je dotaz i pro obecny Python. Diky za kazde nakopnuti, Marek ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python