abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
včera 22:00 | Komunita

Přibližně před měsícem bylo oznámeno, že linuxová distribuce SUSE Linux Enterprise Server (SLES) běží nově také Raspberry Pi 3 (dokumentace). Obraz verze 12 SP2 pro Raspberry Pi 3 je ke stažení zdarma. Pro registrované jsou po dobu jednoho roku zdarma také aktualizace. Dnes bylo oznámeno, že pro Raspberry Pi 3 je k dispozici také nové openSUSE Leap 42.2 (zprávička). K dispozici je hned několik obrazů.

Ladislav Hagara | Komentářů: 1
včera 06:00 | Zajímavý software

OMG! Ubuntu! představuje emulátor terminálu Hyper (GitHub) postavený na webových technologiích (HTML, CSS a JavaScript). V diskusi k článku je zmíněn podobný emulátor terminálu Black Screen. Hyper i Black Screen používají framework Electron, stejně jako editor Atom nebo vývojové prostředí Visual Studio Code.

Ladislav Hagara | Komentářů: 26
včera 06:00 | Zajímavý článek

I letos vychází řada ajťáckých adventních kalendářů. QEMU Advent Calendar 2016 přináší každý den nový obraz disku pro QEMU. Programátoři se mohou potrápit při řešení úloh z kalendáře Advent of Code 2016. Kalendáře Perl Advent Calendar 2016 a Perl 6 Advent Calendar přinášejí každý den zajímavé informace o programovacím jazyce Perl. Stranou nezůstává ani programovací jazyk Go.

Ladislav Hagara | Komentářů: 7
3.12. 16:24 | Nová verze

Byla vydána Mageia 5.1. Jedná se o první opravné vydání verze 5, jež vyšla v červnu loňského roku (zprávička). Uživatelům verze 5 nepřináší opravné vydání nic nového, samozřejmě pokud pravidelně aktualizují. Vydání obsahuje všechny aktualizace za posledního téměř půldruhého roku. Mageia 5.1 obsahuje LibreOffice 4.4.7, Linux 4.4.32, KDE4 4.14.5 nebo GNOME 3.14.3.

Ladislav Hagara | Komentářů: 14
3.12. 13:42 | Pozvánky

V Praze probíhá konference Internet a Technologie 16.2, volné pokračování jarní konference sdružení CZ.NIC. Konferenci lze sledovat online na YouTube. K dispozici je také archiv předchozích konferencí.

Ladislav Hagara | Komentářů: 0
2.12. 22:44 | Komunita

Joinup informuje, že Mnichov používá open source groupware Kolab. V srpnu byl dokončen dvouletý přechod na toto řešení. V provozu je asi 60 000 poštovních schránek. Nejenom Kolabu se věnoval Georg Greve ve své přednášce Open Source: the future for the European institutions (SlideShare) na konferenci DIGITEC 2016, jež proběhla v úterý 29. listopadu v Bruselu. Videozáznam přednášek z hlavního sálu je ke zhlédnutí na Livestreamu.

Ladislav Hagara | Komentářů: 25
2.12. 15:30 | Zajímavý projekt

Společnost Jolla oznámila v příspěvku Case study: Sailfish Watch na svém blogu, že naportovala Sailfish OS na chytré hodinky. Využila a inspirovala se otevřeným operačním systémem pro chytré hodinky AsteroidOS. Použita je knihovna libhybris. Ukázka ovládání hodinek na YouTube.

Ladislav Hagara | Komentářů: 15
2.12. 14:15 | Nová verze

Byla vydána verze 7.1.0 skriptovacího jazyka PHP používaného zejména k vývoji dynamických webových stránek. Jedná se o první stabilní verzi nejnovější větvě 7.1. Přehled novinek v dokumentaci. Podrobnosti v ChangeLogu. K dispozici je také příručka pro přechod z PHP 7.0.x na PHP 7.1.x.

Ladislav Hagara | Komentářů: 5
2.12. 12:55 | Nová verze

Google Chrome 55 byl prohlášen za stabilní. Nejnovější stabilní verze 55.0.2883.75 tohoto webového prohlížeče přináší řadu oprav a vylepšení (YouTube). Opraveno bylo také 36 bezpečnostních chyb. Mariusz Mlynski si například vydělal 22 500 dolarů za 3 nahlášené chyby (Universal XSS in Blink).

Ladislav Hagara | Komentářů: 4
2.12. 11:55 | Pozvánky

Máte rádi svobodný software a hardware nebo se o nich chcete něco dozvědět? Přijďte na 135. sraz spolku OpenAlt, který se bude konat ve čtvrtek 8. prosince od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Sraz bude tentokrát tématický. Bude retro! K vidění budou přístroje jako Psion 5mx nebo Palm Z22. Ze svobodného hardwaru pak Openmoko nebo čtečka WikiReader. Přijďte se i vy pochlubit svými legendami, nebo alespoň na pivo. Moderní hardware má vstup samozřejmě také povolen.

xkucf03 | Komentářů: 1
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (24%)
 (29%)
 (7%)
 (5%)
 (3%)
Celkem 774 hlasů
 Komentářů: 50, poslední 29.11. 15:50
Rozcestník
Reklama

Dotaz: Mysql: injection

4.4.2011 13:08 junak
Mysql: injection
Přečteno: 2184×
Ahoj, může mi prosím někdo názorně ukázat, jak opravit tento dotaz proti mysql injection?

$sql = mysql_query("SELECT * FROM category WHERE parent=0");

Pročetl jsem kde co ale bud jsem fakt debil, nebo potřebuji názornou ukázku. Díky za pomoc

Řešení dotazu:


Odpovědi

4.4.2011 13:11 blondak | skóre: 36 | blog: Blondak | Čáslav
Rozbalit Rozbalit vše Re: Mysql: injection
Vzhledem k tomu, že do tohoto dotazu nevstupují uživatelsky zadávaná data, je to trochu off-topic.
Každý problém ma své logické, snadno pochopitelné nesprávné řešení.
Marián Oravec avatar 4.4.2011 13:34 Marián Oravec | skóre: 22 | Nitra
Rozbalit Rozbalit vše Re: Mysql: injection
V tomto prípade SQL injection nehrozí. Inak by to bolo v tomto prípade:

$sql = mysql_query("SELECT * FROM category WHERE parent = " . $_GET['parent_id']);

Potom by bolo treba ošetriť vstup takto:

$sql = mysql_query("SELECT * FROM category WHERE parent = " . mysql_real_escape_string($_GET['parent_id']));
Mám rád elektro, ale vypočujem si aj iné...
Marián Oravec avatar 4.4.2011 13:36 Marián Oravec | skóre: 22 | Nitra
Rozbalit Rozbalit vše Re: Mysql: injection
Oprava:

$sql = mysql_query("SELECT * FROM category WHERE parent = '" . mysql_real_escape_string($_GET['parent_id']) . "'");
Mám rád elektro, ale vypočujem si aj iné...
Řešení 1× (pht)
Heron avatar 4.4.2011 13:56 Heron | skóre: 50 | blog: root_at_heron | Olomouc
Rozbalit Rozbalit vše Re: Mysql: injection
A úplně nejlepší je použít prepared statement.
4.4.2011 16:33 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: Mysql: injection
Přesně tak, nic jiného ani nebrat. Nevím proč je tady tolik odpovědí zabývajících se escapováním :-(

Viz např. Prepared Statements in PHP and MySQL
In Ada the typical infinite loop would normally be terminated by detonation.
4.4.2011 16:54 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Mysql: injection
Celkem jsou tu dvě „escape“ reakce, z čehož je druhá jen oprava první :).
Jinak to, že je to třeba ošetřit, ještě neznamená, že výše uvedená metoda je jediný správný způsob. Rád používám i očíslované parametry a větší škálu typů, proto používám raději vlastní PHP třídu, která v případě MySQL používá nejčastěji jen 'query'.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
4.4.2011 14:09 junak
Rozbalit Rozbalit vše Re: Mysql: injection
Moc děkuji a co když tedy ten dotaz nebude přess GET ale POST ?

$sql = mysql_query("SELECT * FROM category WHERE parent = " . $_POST['parent_id']);

Hrozí tady něco? Předpokládám, že POST podstrčit neůjde..
4.4.2011 14:14 blondak | skóre: 36 | blog: Blondak | Čáslav
Rozbalit Rozbalit vše Re: Mysql: injection
Post podstrčit jde, zásada je taková, ničemu, co podchází od uživatele nevěřit.
Každý problém ma své logické, snadno pochopitelné nesprávné řešení.
4.4.2011 14:19 junak
Rozbalit Rozbalit vše Re: Mysql: injection
to jmyslite takto?

http://neco.neco/$_POST['neco']="podstrcene_value";

Děkuji.
4.4.2011 14:25 Filip Jirsák | skóre: 66 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Mysql: injection
Ne. Vytvoříte si HTML formulář s políčkem neco a action tohoto formuláře namíříte na váš web. Drsňáci ani nepotřebují ten formulář a rovnou to vyťukají přes telnet. Předpokládám tedy, že se bavíme o webové aplikaci – to jste asi zapomněl napsat.
Heron avatar 4.4.2011 14:20 Heron | skóre: 50 | blog: root_at_heron | Olomouc
Rozbalit Rozbalit vše Re: Mysql: injection
POST samozřejmně podstrčit jde. Jak píše předřečník, každý vstup od uživatele (nebo lépe a obecně: každý vstup do aplikace) je nutno konktrolovat a zabezpečit.

Takhle napsaný dotaz je přímo ukázkovým příkladem toho, jak by se to dělat nemělo (a to nejen k vůli tomu SQL injection).
4.4.2011 14:27 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Mysql: injection
Mezi POST a GET není v tomto směru rozdíl.
Pro Vás černá skříňka (POST) je pro ostatní otevřená kniha… :)
Můžete to ošulit jako (v případě 32bit integeru):
$sql = mysql_query("SELECT * FROM category WHERE parent = " . intval($_POST['parent_id']));
Nicméně, každý vstup od uživatele je třeba ošetřit (včetně hidden input-ů atd., prostě cokoliv co posílá klient-prohlížeč), to co si definujete sám, musíte vědět sám co je třeba a kde ošetřovat (velká spousta chyb software je zapříčiněna neošetřenými vstupy).
SQL injection se lze úspěšně bránit pomocí prepared statement, nicméně to neznamená, že není třeba ošetřovat vstup.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
4.4.2011 15:20 mich | skóre: 16
Rozbalit Rozbalit vše Re: Mysql: injection
Možná by se hodilo něco si nejdříve zjistit o HTTP ne rovnou začít mastit weby.
je to teď v módě, na žive o tom furt píšou
4.4.2011 14:17 Filip Jirsák | skóre: 66 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Mysql: injection
SQL injection znamená, že do SQL příkazu přímo vkládáte neošetřený vstup uživatele. Uživatel vám pak může změnit prováděný příkaz. Např. pokud by váš kód obsahoval SELECT * FROM category WHERE parent=$parent (kde $parent by byl vstup od uživatele), mohl by vám uživatel do parent vložit „hodnotu“ 0; DELETE FROM category, takže ve výsledku by se provedly dva příkazy SELECT * FROM category WHERE parent=0; DELETE FROM category. ve vašem kódu žádný vstup od uživatele nemáte, takže SQL injection nehrozí.
4.4.2011 14:23 junak
Rozbalit Rozbalit vše Re: Mysql: injection
Dekuji

V tomto pripade tedy o SQL injection nehrozi ale vstupy od uzivatele budou taky, cili se na to musim zamerit.

Vsude se pise, ze uzivatel podstrci to nebo on, ale nikde se nepise jak to podstrci, vzdyt nema jak, jedine co me napada je, ze veskere napadeni je mozne jen pres URL, nebo se pletu?
Marián Oravec avatar 4.4.2011 14:29 Marián Oravec | skóre: 22 | Nitra
Rozbalit Rozbalit vše Re: Mysql: injection
Mám rád elektro, ale vypočujem si aj iné...
4.4.2011 14:31 Filip Jirsák | skóre: 66 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Mysql: injection
Může změnit cokoli, co od něj načítáte. Pokud načítáte parametry z URL, může změnit ty, pokud načítáte hodnoty z formuláře posílaného POSTem, může změnit hodnoty formuláře, pokud jako vstup používáte část URL, může změnit to.

Např. místo
http://www.example.com/view.php?parent_id=0
pošle (s příslušným escapováním)
http://www.example.com/view.php?parent_id=0;DELETE FROM catalog
Místo
<form>
<input name="parent_id" value="0">
</form>
pošle
<form>
<input name="parent_id" value="0; DELETE FROM catalog">
</form>
Místo
http://www.example.com/view/0
pošle (s příslušným escapováním
http://www.example.com/view/0; DELETE FROM catalog
Jak psal nahoře Heron, nejlepší je použít prepared statements.
4.4.2011 14:46 junak
Rozbalit Rozbalit vše Re: Mysql: injection
Budiz, ale kde vezme utocnik nazev tabulky? Aby ji mohl smazat?
4.4.2011 14:53 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Mysql: injection
Asi nevolíte jako název 'asdfasdlfkasfopkewklweoppok'.
A taky byla uvedena nejednoduší možnost.
Přistupte k tomu tak, že to co Vás v nejhorším snu nenapadne, je jen 0.1 % toho co je možné.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
4.4.2011 15:00 Filip Jirsák | skóre: 66 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Mysql: injection
Uhodne, zjistí ji v chybovém výpisu, zavolá nejdřív SHOW TABLES a přečte si jej ve vrácené stránce… Nejde vůbec o to, co konkrétně v té databázi spustí za příkaz a co k němu potřebuje znát (třeba volání DROP DATABASE teoreticky parametr nepotřebuje a může smazat aktuální databázi). Jde o to, že tímhle způsobem umožníte útočníkovi spustit libovolný SQL příkaz, na který má práva uživatel, pod kterým k databázi přistupujete. Máte databázi zabezpečenou tak, že to ničemu nevadí? Zveřejníte klidně přístupové údaje k té databázi včetně její adresy? Pokud ano, pak se SQL injection nemusíte bát. Webové aplikace jsou ale zpravidla dělané tak, že databáze není moc zabezpečená a nepředpokládá se, že do ní bude mít přímý přístup někdo jiný, než správce. O zabezpečení se pak stará webová aplikace, která je mezi databází a útočníkem.
4.4.2011 18:31 Sten
Rozbalit Rozbalit vše Re: Mysql: injection
Ale on nemusí vůbec mazat tabulku. Úplně stačí když jako jméno uvede:
' OR 1=1 --
což by váš skript mohl snadno vložit do dotazu jako:
SELECT 1 FROM `users` WHERE `user` = '${_POST["user"]}' AND `password` = crypt('${_POST["password"]}')
A útočník se hned může přihlásit jako libovolný uživatel :-)
4.4.2011 14:36 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Mysql: injection
Pravděpodobně pracujete s mylným předpokladem, že na stránku Vám přijde vstup který jste si sám nadefinoval na stránce zdrojové.
Odeslat požadavek na server z jakýmkoliv obsahem či jakýmkoliv způsobem (zde GET/POST) může kdokoliv a jakkoliv.
Pokud je zmiňované $parent třeba $_POST['parentid'] nebo $_GET['parentid'] a je to váš <select> a v <option> jste si zvolil jen čísla, ještě neznamená, že vám dojde vybrané číslo. Klidně Vám tam může dojít místo '3' zmiňované '3; DELETE FROM table'.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
5.4.2011 10:55 R
Rozbalit Rozbalit vše Re: Mysql: injection
Pekne vysvetlenie, az na to, ze to v PHP+MySQL nefunguje. Pretoze v mysql_query moze byt len jeden SQL prikaz.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.