11) Používejte pro předávání parametrů databázi prepared statements, která jsou pro to určená a kromě vyššího výkonu také zamezí drtivé většině SQL injection.
Jenže to by PHP frameworky museli programovat lidé, kteří o databázích něco vědí a nemají nezměrnou touhu stále znovu a znovu vynalézat šišaté kolo.
Názory k článku
Děravé databáze: věčná láska hackerů
Flasi (neregistrovaný)
---.hq.iol.cz
5. 1. 2010 9:08
Nový
Re: 11)
celé vlákno
Nebo to rovnou pište v prostředích, kde při práci s databází patří používání typově bezpečných parametrů ke slušnému vychování - jako jsou např. .NET nebo Java.
A pro zasmání:
http://xkcd.com/327/
A pro zasmání:
http://xkcd.com/327/
webdev (neregistrovaný)
---.pilsfree.net
8. 1. 2010 7:44
Nový
Re: 11)
celé vlákno
to je samozrejme blbost, SQLi lze pouzit i v Jave nebo .NET navic tyhle dve veci maji svejch starosti dost se sebou nepotrebujou ani SQLi ;-)
Flasi (neregistrovaný)
---.ct.cz
8. 1. 2010 10:42
Nový
Re: 11)
celé vlákno
Nepíši, že SQL injection nemůže postihnout aplikaci napsanou v Javě, nebo .NETu.
Píši, že používání parametrů u SQL příkazů je v těchto prostředích "součást slušného vychování". Tedy, že v těchto přostředích se k eliminaci rizika SQL injekce stačí chovat podle elemetárních tutoriálů. Pochopitelně, když někdo SQL injekci hrozně moc chce, tak mu v tom Java ani .NET bránit nebudou a poskládat SQL dotaz ze stringů ze vstupních polí ho nechají.
Píši, že používání parametrů u SQL příkazů je v těchto prostředích "součást slušného vychování". Tedy, že v těchto přostředích se k eliminaci rizika SQL injekce stačí chovat podle elemetárních tutoriálů. Pochopitelně, když někdo SQL injekci hrozně moc chce, tak mu v tom Java ani .NET bránit nebudou a poskládat SQL dotaz ze stringů ze vstupních polí ho nechají.
Pavel Stehule (neregistrovaný)
---.nic.cz
5. 1. 2010 9:11
Nový
Re: 11)
celé vlákno
Prepared Statement zamezi >>>ve vsech<<< pripadech SQL injection, nikoliv v drtive vetsine.
pepak (neregistrovaný)
---.phoenix.cz
5. 1. 2010 9:16
Nový
Re: 11)
celé vlákno
Nikoliv. Jsou případy, kdy je potřeba použít parametr a přitom nejde použít prepared statement - typicky například
"SELECT * FROM tabulka ORDER BY $uzivatelem_urcene_pole".
"SELECT * FROM tabulka ORDER BY $uzivatelem_urcene_pole".
krtek (neregistrovaný)
---.vodafone.cz
5. 1. 2010 9:40
Nový
Re: 11)
celé vlákno
kde $uzivatelem_urcene_pole je urcite hodnota z ciselniku, ze jo? ;-)
pepak (neregistrovaný)
---.phoenix.cz
5. 1. 2010 10:14
Nový
Re: 11)
celé vlákno
Třeba. Jakým způsobem je zajištěno ošetření proti SQL injection je celkem nepodstatné pro ten účel, který demonstruji - že existují SQL dotazy, kde potřebuji použít parametr a přitom nelze použít prepared statement.
krtek (neregistrovaný)
---.vodafone.cz
5. 1. 2010 21:35
Nový
Re: 11)
celé vlákno
No, já se Vám právě snažil naznačit, že to není pravda.
I u dymamicky skládaného dotazu lze použít prepared statement.
I u dymamicky skládaného dotazu lze použít prepared statement.
Pavel Stehule (neregistrovaný)
---.nic.cz
5. 1. 2010 9:43
Nový
Re: 11)
celé vlákno
No, a pak se lidé diví, že SQL injection je tak časté. Měl jsem dodat, SQL je ochranou proti SQL injection na správně použitém SQL příkazu. Dynamický ORDER BY je něco, co bych si nikdy nedovolil napsat, a také to nikomu nedoporučuji.
Pokud chcete bezpečně řešit takový dotaz, pak Vám nezbývá než SQL příkaz namnožit:
if col = ... THEN
SELECT FROM ORDER BY 1;
else
SELECT FROM ORDER BY 2;
atd
Pokud chcete bezpečně řešit takový dotaz, pak Vám nezbývá než SQL příkaz namnožit:
if col = ... THEN
SELECT FROM ORDER BY 1;
else
SELECT FROM ORDER BY 2;
atd
5. 1. 2010 11:34
Nový
Re: 11)
celé vlákno
Haha, jedno řešení lepší než druhé
Problém je v tom, že dnes dělá programátora každý jouda bez vzdělání.
Problém je v tom, že dnes dělá programátora každý jouda bez vzdělání.
Pavel Stehule (neregistrovaný)
---.nic.cz
5. 1. 2010 12:30
Nový
Re: 11)
celé vlákno
Rád se poučím o optimálním řešení:
* které bude bezpečné,
* kde se Vám budou chytat indexy,
* které bude čitelné.
* které bude bezpečné,
* kde se Vám budou chytat indexy,
* které bude čitelné.
5. 1. 2010 13:17
Nový
Re: 11)
celé vlákno
Přesně tak. U řešení Pavla Stěhuleho si mohu být jistý, že mi tam nevleze dotaz, který by položil databázový server. To mi určitě stojí za to, že napíšu o pár řádek víc.
5. 1. 2010 15:00
Nový
Re: 11)
celé vlákno
Vy ale nepíšete jen o pár řádek víc. Vy kopíruju celý dotaz. Předem vím jak to dopadne. Až ho budete měnit, na jeden z výskytů zcela jistě zapomenete.
Takže prosím běžně nad svými programátorskými znalostmi onanovat na jakpsatweb :)
Takže prosím běžně nad svými programátorskými znalostmi onanovat na jakpsatweb :)
Pavel Stehule (neregistrovaný)
---.nic.cz
5. 1. 2010 15:34
Nový
Re: 11)
celé vlákno
Od toho je testování. Ať už unit testy nebo regresní testy.
Pokud se vyhnu dynamickému SQL, tak poměrně snadno mohu otestovat syntaktickou správnost všech SQL dotazů, které se vyskytují v aplikaci. Dynamické SQL není testovatelné.
Samozřejmě, že tu proti sobě jdou dvě strategie - úspora kódu X efektivitě a bezpečnosti. Souhlasím, můžete udělat chybu. Na druhou stranu - dynamické SQL Vás před chybami neochrání - testovat musíte tak jako tak - a navíc riskujete děravost aplikace.
Jedna věc je, když píšete lokální z internetu nedostupné aplikace - riziko SQL injektáže není až tak velké. Jen riskujete, že Vám uživatelé vygenerují pomalý dotaz, což patrně přežijete. Psát dobré internetové aplikace ovšem vyžaduje docela dost znalostí - pohybujete se v mnohem rizikovějším prostředí a přetížit SQL server náporem uživatelů je mnohem menší problém - tudíž web s trochou větší návštěvností je mnohem lépe optimalizován než typické vnitropodnikové aplikace.
Pokud se vyhnu dynamickému SQL, tak poměrně snadno mohu otestovat syntaktickou správnost všech SQL dotazů, které se vyskytují v aplikaci. Dynamické SQL není testovatelné.
Samozřejmě, že tu proti sobě jdou dvě strategie - úspora kódu X efektivitě a bezpečnosti. Souhlasím, můžete udělat chybu. Na druhou stranu - dynamické SQL Vás před chybami neochrání - testovat musíte tak jako tak - a navíc riskujete děravost aplikace.
Jedna věc je, když píšete lokální z internetu nedostupné aplikace - riziko SQL injektáže není až tak velké. Jen riskujete, že Vám uživatelé vygenerují pomalý dotaz, což patrně přežijete. Psát dobré internetové aplikace ovšem vyžaduje docela dost znalostí - pohybujete se v mnohem rizikovějším prostředí a přetížit SQL server náporem uživatelů je mnohem menší problém - tudíž web s trochou větší návštěvností je mnohem lépe optimalizován než typické vnitropodnikové aplikace.
5. 1. 2010 16:05
Nový
Re: 11)
celé vlákno
Pomíjíte, že téměř každá SQL má detailní možnosti nastavení práv, takže každá databáze může mít jednoho db uživatele pro web (pouze prohlížení), jednoho pro administraci (zápis) a dalšího pro databázové příkazy (třeba zrovna ten drop tabulky)
Jenže který hosting by tohle uměl a který programátor by to používal?
Jenže který hosting by tohle uměl a který programátor by to používal?
5. 1. 2010 16:10
Nový
Re: 11)
celé vlákno
Třeba vlastní databázový server? :)
Různé urovně práv nevyřeší potenciální přetížení databázového serveru.
Různé urovně práv nevyřeší potenciální přetížení databázového serveru.
Pavel Stehule (neregistrovaný)
---.nic.cz
5. 1. 2010 16:17
Nový
Re: 11)
celé vlákno
To nepomíjím. Pomocí práv lze minimalizovat škody způsobené SQL injektáží - nicméně nastavením práv se rizika SQL injektáže nezbavíte - pokud nepřistoupíte k dost razantní strategii a neobalíte všechny SQL příkazy uloženou procedurou, která běží v security definer modu - čímž byste běžného uživatele odřízl.
Nastavení práv v SQL databázi lze pouze minimalizovat dopady. Ale již jen to, že se Vám pomocí SQL injektáže útočník dostane k uživatelským datům, je problém, a tomu se nastavením práv nevyhnete. Všimněte si - většina problémů způsobených SQL injektáží není o tom, že by někdo pozměnil strukturu, ale o tom, že někdo získal data, která získat neměl.
Nastavení práv v SQL databázi lze pouze minimalizovat dopady. Ale již jen to, že se Vám pomocí SQL injektáže útočník dostane k uživatelským datům, je problém, a tomu se nastavením práv nevyhnete. Všimněte si - většina problémů způsobených SQL injektáží není o tom, že by někdo pozměnil strukturu, ale o tom, že někdo získal data, která získat neměl.
5. 1. 2010 16:08
Nový
Re: 11)
celé vlákno
Pokud jsou dotazy u sebe, jako že v příkladu byly, tak si troufám tvrdit, že se na 90% nepřehlédnu. Zbytek snad odhalí testování. Pokud dovolím sestavit SQL dynamicky, neotestuji pravděpodobně všechny možnosti, které mi od uživatele mohou přijít, což je potenciální díra v aplikaci.
Osobně raději vezmu duplicitu kódu než kód, který do databáze pustí něco neočekávaného.
Netvrdím, že bych kopíroval celý dotaz. Pravděpodobně bych ho rozdělil na několik částí. Zde ale už porušuji čitelnost a trochu i bezpečnost, protože nemohu scannováním zdrojáku otestovat syntaktickou správnost všech dotazů.
Pokud máme v debatě pokračovat dál, rád bych slyšel odpověď na Pavlovu otázku s ohledem na 3 zmíněná kritéria.
Osobně raději vezmu duplicitu kódu než kód, který do databáze pustí něco neočekávaného.
Netvrdím, že bych kopíroval celý dotaz. Pravděpodobně bych ho rozdělil na několik částí. Zde ale už porušuji čitelnost a trochu i bezpečnost, protože nemohu scannováním zdrojáku otestovat syntaktickou správnost všech dotazů.
Pokud máme v debatě pokračovat dál, rád bych slyšel odpověď na Pavlovu otázku s ohledem na 3 zmíněná kritéria.
Filip Jirsák (neregistrovaný)
---.oksystem.cz
5. 1. 2010 16:19
Nový
Re: 11)
celé vláknoVy ale nepíšete jen o pár řádek víc. Vy kopíruju celý dotaz. Předem vím jak to dopadne. Až ho budete měnit, na jeden z výskytů zcela jistě zapomenete.To je jenom věc toho, jak to napíšete – a do komentáře se to asi napíše v této formě, protože je to nejsrozumitelnější. jinak se to dá samozřejmě napsat jako šablona, kam doplníte vlastní parametr (tedy ne zadaný uživatelem), nebo to můžete mít jako uloženou proceduru na serveru a té předáte jako parametr jenom hodnotu z výčtového typu. Pořád je to tisíckrát lepší než nechat uživatele psát si vlastní SQL příkazy.
webdev (neregistrovaný)
---.pilsfree.net
8. 1. 2010 7:52
Nový
Re: 11)
celé vlákno
a neni potom jednodussi proste vstupni data otestovat, orezat a pokud neodpovidaji pozadavku tak proste zahodit??
Jak to tak pozoruju tady se vymejsli kolo v dobe kdy je davno auto na silnici.
Jak to tak pozoruju tady se vymejsli kolo v dobe kdy je davno auto na silnici.
Pavel Stehule (neregistrovaný)
---.17.broadband12.iol.cz
8. 1. 2010 20:16
Nový
Re: 11)
celé vlákno
Jak otestujete na spravnost obsah varcharu?
Format lze testovat pouze i ciselnych, logickych a datumovych typu.
Format lze testovat pouze i ciselnych, logickych a datumovych typu.
petr_p (neregistrovaný)
2002:93fb:17--:----:----:----:----:----
5. 1. 2010 17:12
Nový
Re: 11)
celé vlákno
Programovací jazyky s preprocesorem už vymizely?
uživatel si přál zůstat v anonymitě
---.adsl.dial-up.cz
11. 1. 2010 9:42
Nový
Re: 11)
celé vlákno
sql_query = ...dotaz bez ORDER...
if OrderParameterIsValid( $user_order_input ) then sql_query = sql_query + order by $user_order_input
Jak vypada IsValid myslim neni moc dulezite, v PHP to osobne resim tim ze mam array s validnimi hodnotami a pak staci udelat array_search nebo array_key_exists.
Neni zadny duplicitni kod a je to myslim obstojne citelne. (IMHO je to lip citelne nez vas spagetovy if if if if.. kod)
"chytat indexy" - to je snad vec DB enginu, aby si dotaz zoptimalizoval (kdyz se mu udelaji patricne indexy do tabulek)? (samozrejme v krajnim pripade jde udelat dalsi if ktery se postara o specialni pripad)
if OrderParameterIsValid( $user_order_input ) then sql_query = sql_query + order by $user_order_input
Jak vypada IsValid myslim neni moc dulezite, v PHP to osobne resim tim ze mam array s validnimi hodnotami a pak staci udelat array_search nebo array_key_exists.
Neni zadny duplicitni kod a je to myslim obstojne citelne. (IMHO je to lip citelne nez vas spagetovy if if if if.. kod)
"chytat indexy" - to je snad vec DB enginu, aby si dotaz zoptimalizoval (kdyz se mu udelaji patricne indexy do tabulek)? (samozrejme v krajnim pripade jde udelat dalsi if ktery se postara o specialni pripad)
webdev (neregistrovaný)
---.pilsfree.net
8. 1. 2010 7:48
Nový
Re: 11)
celé vlákno
a takhle porad dokola az do rekneme order by 567 ?? no tak to jste kanon chudak vas sql server
uživatel si přál zůstat v anonymitě
---.41.broadband10.iol.cz
5. 1. 2010 18:19
Nový
Re: 11)
celé vlákno
No v PHP k obraně můžete využít pole, kde $uzivatelem_urcene_pole je index do asociativního pole, kde je teprve uložen název pole. Například takto
$table = {'kod' => 'id', 'jmeno' => 'name'};
$sql = "SELECT * FROM tabulka ORDER BY {$table[$uzivatelem_urcene_pole]}".
Pokud $uzivatelem_vlozene_pole je něco jiného, vrati se asi null ...
$table = {'kod' => 'id', 'jmeno' => 'name'};
$sql = "SELECT * FROM tabulka ORDER BY {$table[$uzivatelem_urcene_pole]}".
Pokud $uzivatelem_vlozene_pole je něco jiného, vrati se asi null ...
uživatel si přál zůstat v anonymitě
---.41.broadband10.iol.cz
5. 1. 2010 18:36
Nový
Re: 11)
celé vlákno
No a ta hvězdička taky není bezpečná, dá se nahradit takto.
"SELECT {implode(',',$table)} FROM table ORDER BY {$table[$uzivatelem_vlozene_pole]}"
a klauzuli s polem lze nahradit jednoducho funkcí, kde bude korektně ošetřena neexistence indexu do pole.
"SELECT {implode(',',$table)} FROM table ORDER BY {$table[$uzivatelem_vlozene_pole]}"
a klauzuli s polem lze nahradit jednoducho funkcí, kde bude korektně ošetřena neexistence indexu do pole.
uživatel si přál zůstat v anonymitě
---.customer.poda.cz
5. 1. 2010 9:18
Nový
Re: 11)
celé vlákno
Nerekl bych ze u prepared statements se zvysuje vykon. Je stim spojene vyssi rezie takze to muze mit zcela opacny efekt.
pepak (neregistrovaný)
---.phoenix.cz
5. 1. 2010 9:39
Nový
Re: 11)
celé vlákno
To leda v nějakých hodně zvláštních databázích.
Pavel Stehule (neregistrovaný)
---.nic.cz
5. 1. 2010 9:49
Nový
Re: 11)
celé vlákno
Až na malé výjimky nemá smysl uvažovat o Prepared Statement kvůli výkonu - ve většině případů je výkon stejný nebo může být i horší (zase tak často se SQL příkazy neopakují a optimalizace na dnešních strojích už neznamená takové zdržení). Ten soudobý smysl je v ochraně vůči SQL injection. Podobně se chovají tzv. Parametrized Queries - moderní databáze nabízejí obé - PQ mají výhody PP bez jejich nevýhod. Pokud používáte PQ, tak se musíte hodně snažit - v podstatě to nejde, abyste napsal SQL injection zranitelný dotaz. dalším argumentem pro PQ je čitelnost zápisu.
Ivan (neregistrovaný)
165.72.200.---
5. 1. 2010 16:22
Nový
Re: 11)
celé vlákno
No minimalne na Oracle maji Prepared Statementy velky vyznam pro vykon.
1. vytvoreni exkucniho planu ma slozitost O(n!) kde n je pocet tabulek v joinu. Proto DB vygeneruje max. 80000 exekucnich planu a z nich zvoli nejlepsi.
2. Vytvoreni exekucniho planu vyzaduje exkluzivni zamek na nekterych sdilenych strukturach. Tim muzete zbytecne brzdit ostatni konexe. Vytvoreni exekucniho planu vyzaduje sdileny zamek jinych strukturach. To muze zbytecne zvysovat mnozstvi zprav mezi nody DB clusteru.
3. SQL prikazy se velice casto opakuji a na normalni DB se pomer mezi hard a soft parse pohybuje okolo 1:1000.
1. vytvoreni exkucniho planu ma slozitost O(n!) kde n je pocet tabulek v joinu. Proto DB vygeneruje max. 80000 exekucnich planu a z nich zvoli nejlepsi.
2. Vytvoreni exekucniho planu vyzaduje exkluzivni zamek na nekterych sdilenych strukturach. Tim muzete zbytecne brzdit ostatni konexe. Vytvoreni exekucniho planu vyzaduje sdileny zamek jinych strukturach. To muze zbytecne zvysovat mnozstvi zprav mezi nody DB clusteru.
3. SQL prikazy se velice casto opakuji a na normalni DB se pomer mezi hard a soft parse pohybuje okolo 1:1000.
Pavel Stehule (neregistrovaný)
---.nic.cz
5. 1. 2010 16:37
Nový
Re: 11)
celé vlákno
Všechny kombinace se určitě nezkoušejí - viz http://redbook.cs.berkeley.edu/redbook3/lec7.html případně hledejte na googlu "dynamické programování".
Čím složitější SQL příkaz, tím méně by se Vám měl v db vyskytovat. Totéž - pokud se v db objevují opakující se SQL příkazy, tak to povětšinou znamená, že se někde udělala chyba - např. špatně konfigurované Hibernate. Konečně u prepared statement hrozí riziko neoptimálních prováděcích plánů z důvodů optimalizace na slepo.
Čím složitější SQL příkaz, tím méně by se Vám měl v db vyskytovat. Totéž - pokud se v db objevují opakující se SQL příkazy, tak to povětšinou znamená, že se někde udělala chyba - např. špatně konfigurované Hibernate. Konečně u prepared statement hrozí riziko neoptimálních prováděcích plánů z důvodů optimalizace na slepo.
router (neregistrovaný)
---.net.upc.cz
5. 1. 2010 21:46
Nový
Re: 11)
celé vlákno
Kola se znovu-vynalézají dnes a denně :) Má to své důvody..
Ja.rek (neregistrovaný)
---.25.broadband15.iol.cz
5. 1. 2010 9:13
Nový
Dibi
celé vlákno
Uplne staci pouzivat dibi - http://dibiphp.com/cs/
nbmb (neregistrovaný)
77.104.234.---
5. 1. 2010 11:39
Nový
dekuji
celé vlákno
Dekuji za clanek. Tusil jsem, ze to takhle nejak funguje.
Mimochodem, Matlab take ma cosi, cemu rika Web Server (pres html formular zadate parametry vypoctu, odeslete Matlabu, ten neco spocita a vrati HTML s vysledkem nebo i obrazek s grafem) a tam lze vytvorit napadnutelne skripty. Na jedne univerzite se mi tak podarilo si na dany server vzdalene nainstalovat do jejich woken vlastni ftp server, ale to byl opravdu extrem.
Mimochodem, Matlab take ma cosi, cemu rika Web Server (pres html formular zadate parametry vypoctu, odeslete Matlabu, ten neco spocita a vrati HTML s vysledkem nebo i obrazek s grafem) a tam lze vytvorit napadnutelne skripty. Na jedne univerzite se mi tak podarilo si na dany server vzdalene nainstalovat do jejich woken vlastni ftp server, ale to byl opravdu extrem.
CrayXMP (neregistrovaný)
---.alliante.cz
5. 1. 2010 13:15
Nový
SQL Injection (čti es kvé el)
celé vlákno
.. a já měl 20 let za to, že jak v britské tak i americké angličtině se "q" čte jako [kju:] ...
no asi existuje ještě bohemská angličtina, která kreativně mixuje "indžekšn" s "kvé"... :))
no asi existuje ještě bohemská angličtina, která kreativně mixuje "indžekšn" s "kvé"... :))
uživatel si přál zůstat v anonymitě
62.168.56.---
5. 1. 2010 15:46
Nový
Re: SQL Injection (čti es kvé el)
celé vlákno
v americké angličtině se ovšem SQL čte jako síkl...
smal (neregistrovaný)
---.net.upc.cz
6. 1. 2010 1:25
Nový
Re: SQL Injection (čti es kvé el)
celé vlákno
Pokud vim tak nejen v americke
Zet (neregistrovaný)
---.103.broadband10.iol.cz
5. 1. 2010 15:48
Nový
Husty autor
celé vlákno
Tak, a ted se autor muze citit, jako drsny igigi! Ukazal, ze i ON dokaze neco tak velkeho a ze igigi neni zadny borec! (/ironie)
Zatleskejme autorovi clanku a podporme tak jeho ego!
Je to borec, ze jde v igigiho slepejich.. Vse nazorne ukazal i pro blbecky (takze ted kazde pako bude dropovat databaze.. skvele) a zverejnil strukturu tabulky - jako igigi, proste WOW!
Seriously, get a life!
Zatleskejme autorovi clanku a podporme tak jeho ego!
Je to borec, ze jde v igigiho slepejich.. Vse nazorne ukazal i pro blbecky (takze ted kazde pako bude dropovat databaze.. skvele) a zverejnil strukturu tabulky - jako igigi, proste WOW!
Seriously, get a life!
Pavel Stehule (neregistrovaný)
---.nic.cz
5. 1. 2010 16:25
Nový
Re: Husty autor
celé vlákno
Proč se rozčilujete? Mnohem důkladnější popis se povaluje všude na netu. Cenzura nic neřeší. Pro ukrajinské, ruské, čínské, pákistánské crackery SQL injektáž rozhodně není novinkou. Pro místní uživatele nebo programátory je potřeba naopak osvěta. Kdyby tyto články vycházely 10x denně, tak jedině dobře.
router (neregistrovaný)
---.net.upc.cz
5. 1. 2010 21:26
Nový
Re: Husty autor
celé vlákno
Kašli na to, tím stejně ničeho nedosáhneš. Neboj se, že bys přišel o svou zábavu - podobné články vychází už aspoň 10 let a stále to funguje :) jelikož lidi se prostě nezmění, ikdyž jim to naservíruješ pod nos :)
5. 1. 2010 17:50
Nový
RE: Děravé databáze: věčná láska hackerů
celé vlákno
Jen nevim co se tu resi injektaz pokud pouzivate addslashes tak nemuzete mit problem...
nemluve o magic quotes ktere teda osobne nesnasim.
jinak s prepare si zkuste hledat neco jako sloupec like '%a%b%c%d%'
nepouzivat addslashes to je jako pouzivat include $_GET['stranka'];
nemluve o magic quotes ktere teda osobne nesnasim.
jinak s prepare si zkuste hledat neco jako sloupec like '%a%b%c%d%'
nepouzivat addslashes to je jako pouzivat include $_GET['stranka'];
Filip Jirsák (neregistrovaný)
---.oksystem.cz
5. 1. 2010 18:10
Nový
RE: Děravé databáze: věčná láska hackerů
celé vláknoJen nevim co se tu resi injektaz pokud pouzivate addslashes tak nemuzete mit problem...Ale můžete…
addslashes() je právě příklad, kdy se jeden problém vyřeší tak, že se vytvoří jiný, který je minimálně stejně velký. addslashes funguje jedině v případě, že jej použijete na všech potřebných místech a nikde jinde, a na vše právě jednou. Používání addslashes je nouze nejvyšší a je dobré jedině pro případ, kdy opravdu nemůžete použít parametrizované dotazy (přičemž jediný přípustný důvod, proč je nemůžete použít, je, že je vámi používaná knihovna neumí).
Tomas (neregistrovaný)
---.sh.cvut.cz
5. 1. 2010 18:24
Nový
RE: Děravé databáze: věčná láska hackerů
celé vlákno
Nehlede na to, ze addslashes() trpi problemem ruznych kodovani a samo o sobe tak nemusi byt bezpecne. Kdyz uz escape v PHP, tak mysql_real_escape_string(), pg_real_escape_string() a varianty.
5. 1. 2010 19:36
Nový
RE: Děravé databáze: věčná láska hackerů
celé vlákno
To je ale zpusobeno nevhodnym pouzivanim magic quotes a addslashes kdy si to zdvojite. nebo kdyz to pouzivate jinde nez pri skladani SQL.
OK vyuziti mysqli::escape_string je mozna lepsi ikdyz seznam kodovanych znaku je
NUL (ASCII 0), \n, \r, \, ', ", and Control-Z.
takze nevim jak chcete resit kodovani.
Ale stejne tak funguje prepare exec ze jej musite pouzit vsude. navic pri tvorbe filtru no potes..
OK vyuziti mysqli::escape_string je mozna lepsi ikdyz seznam kodovanych znaku je
NUL (ASCII 0), \n, \r, \, ', ", and Control-Z.
takze nevim jak chcete resit kodovani.
Ale stejne tak funguje prepare exec ze jej musite pouzit vsude. navic pri tvorbe filtru no potes..
uživatel si přál zůstat v anonymitě
---.adsl.dial-up.cz
11. 1. 2010 9:55
Nový
RE: Děravé databáze: věčná láska hackerů
celé vlákno
Myslim ze je lepsi pouzivat framework typu nette+dibi, kde je jiz opravdu docela slozite napsat kod ktery neni bezpecny (i kdyz i to jde), magic quotes a addslashes je prece jen tezsi uhlidat, resp. vyzaduje to od programatora praci navic. U kvalitniho frameworku je to opacne, praci navic musite udelat pokud to nechcete bezpecne.
(konkretne u dibi je teda jeste dulezite aby clovek psal SQL dotazy pres parametry a ne primo jako jeden string, u samotneho nette snad nebezpecny kod napsat omylem nejde, pokud nenapisete nekam do sablony "!" omylem, co je velmi nepravdepodobne .. aha, jeste je dobre parametrizovat pripustne znaky v nastaveni URL routeru pres regexpy, tam je dalsi slabsi misto ktere v soucinnosti s jinou slabomyslnosti v kodu muze nakonec udelat i neco nebezpecneho .. zbytek funguje dost dobre i bez toho ze by jste nad tim premysleli)
(konkretne u dibi je teda jeste dulezite aby clovek psal SQL dotazy pres parametry a ne primo jako jeden string, u samotneho nette snad nebezpecny kod napsat omylem nejde, pokud nenapisete nekam do sablony "!" omylem, co je velmi nepravdepodobne .. aha, jeste je dobre parametrizovat pripustne znaky v nastaveni URL routeru pres regexpy, tam je dalsi slabsi misto ktere v soucinnosti s jinou slabomyslnosti v kodu muze nakonec udelat i neco nebezpecneho .. zbytek funguje dost dobre i bez toho ze by jste nad tim premysleli)
Shean (neregistrovaný)
193.179.187.---
6. 1. 2010 15:59
Nový
Upřesním a zkrátím
celé vlákno
Podle mě je tu jediný problém, a to že se nepoužívají parametrizované sql dotazy, např. select * from tabulka where id=:id
Přitom je to i rychlejší, protože dotaz je kompilován jen jednou.
Těch rad od autora je tam spousta, protože si není jistý, jak se bránit. Tak doufám, že si přečte tento příspěvek.
Jinak, existují specializované firmy, které také dokáží otestovat zabezpečení webové aplikace.
Přitom je to i rychlejší, protože dotaz je kompilován jen jednou.
Těch rad od autora je tam spousta, protože si není jistý, jak se bránit. Tak doufám, že si přečte tento příspěvek.
Jinak, existují specializované firmy, které také dokáží otestovat zabezpečení webové aplikace.
DaLe (neregistrovaný)
---.cdif.cable.ntl.com
7. 1. 2010 1:45
Nový
Odkaz na o2bs.com
celé vlákno
404. Jaká to náhoda. :P
uživatel si přál zůstat v anonymitě
---.adsl.dial-up.cz
11. 1. 2010 9:56
Nový
Re: Odkaz na o2bs.com
celé vlákno
v te URL je navic tecka, takze problem je na strane autora clanku.
Tiskni