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í
×

dnes 11:00 | Zajímavý software
Na Good Old Games je v rámci aktuálních zimních slev zdarma k dispozici remasterovaná verze klasické point&click adventury Grim Fandango, a to bez DRM a pro mainstreamové OS včetně GNU/Linuxu. Akce trvá do 14. prosince, 15:00 SEČ.
Fluttershy, yay! | Komentářů: 6
dnes 07:22 | Pozvánky

Konference InstallFest 2018 proběhne o víkendu 3. a 4. března 2018 v Praze na Karlově náměstí 13. Spuštěno bylo CFP. Přihlásit přednášku nebo workshop lze do 18. ledna 2018.

Ladislav Hagara | Komentářů: 0
včera 20:22 | Nová verze

Před měsícem byla vydána Fedora 27 ve dvou edicích: Workstation pro desktopové a Atomic pro cloudové nasazení. Fedora Server byl "vzhledem k náročnosti přechodu na modularitu" vydán pouze v betaverzi. Finální verze byla naplánována na leden 2018. Plán byl zrušen. Fedora 27 Server byl vydán již dnes. Jedná se ale o "klasický" server. Modularita se odkládá.

Ladislav Hagara | Komentářů: 6
včera 10:22 | Zajímavý článek

Lukáš Růžička v článku Kuchařka naší Růži aneb vaříme rychlou polévku z Beameru na MojeFedora.cz ukazuje "jak si rychle vytvořit prezentaci v LaTeXu, aniž bychom se přitom pouštěli do jeho bezedných hlubin".

Ladislav Hagara | Komentářů: 13
včera 07:22 | Komunita

Od 26. do 29. října proběhla v Bochumi European Coreboot Conference 2017 (ECC'17). Na programu této konference vývojářů a uživatelů corebootu, tj. svobodné náhrady proprietárních BIOSů, byla řada zajímavých přednášek. Jejich videozáznamy jsou postupně uvolňovány na YouTube.

Ladislav Hagara | Komentářů: 0
11.12. 19:22 | Nová verze

Ondřej Filip, výkonný ředitel sdružení CZ.NIC, oznámil vydání verze 2.0.0 open source routovacího démona BIRD (Wikipedie). Přehled novinek v diskusním listu a v aktualizované dokumentaci.

Ladislav Hagara | Komentářů: 0
11.12. 09:22 | Pozvánky

V Praze dnes probíhá Konference e-infrastruktury CESNET. Na programu je řada zajímavých přednášek. Sledovat je lze i online na stránce konference.

Ladislav Hagara | Komentářů: 2
9.12. 20:11 | Nová verze

Byl vydán Debian 9.3, tj. třetí opravná verze Debianu 9 s kódovým názvem Stretch a Debian 8.10, tj. desátá opravná verze Debianu 8 s kódovým názvem Jessie. Řešeny jsou především bezpečnostní problémy, ale také několik vážných chyb. Instalační média Debianu 9 a Debianu 8 lze samozřejmě nadále k instalaci používat. Po instalaci stačí systém aktualizovat.

Ladislav Hagara | Komentářů: 9
9.12. 00:44 | Nová verze

Po 6 měsících vývoje od vydání verze 0.13.0 byla vydána verze 0.14.0 správce balíčků GNU Guix a na něm postavené systémové distribuce GuixSD (Guix System Distribution). Na vývoji se podílelo 88 vývojářů. Přibylo 1 211 nových balíčků. Jejich aktuální počet je 6 668. Aktualizována byla také dokumentace.

Ladislav Hagara | Komentářů: 4
8.12. 21:33 | Nová verze

Po půl roce vývoje od vydání verze 5.9 byla vydána nová stabilní verze 5.10 toolkitu Qt. Přehled novinek na wiki stránce. Současně byla vydána nová verze 4.5.0 integrovaného vývojového prostředí (IDE) Qt Creator nebo verze 1.10 nástroje pro překlad a sestavení programů ze zdrojových kódů Qbs.

Ladislav Hagara | Komentářů: 0
Jak se vás potenciálně dotkne trend odstraňování analogového audio konektoru typu 3,5mm jack z „chytrých telefonů“?
 (8%)
 (1%)
 (1%)
 (1%)
 (75%)
 (14%)
Celkem 974 hlasů
 Komentářů: 45, poslední 1.12. 19:00
    Rozcestník

    Dotaz: Oprava sql dotazu pomoci implode v PHP

    29.12.2011 00:56 Orlando
    Oprava sql dotazu pomoci implode v PHP
    Přečteno: 2109×
    Ahoj, neporadil by prosím někdo jak pomocí implode docílit tohoto? Vím, že chyba je v učně označeném textu, ale nedokážu s tím už fakt hnout :(
    $set["nazev"] = "aaa"; 
    $set["url"] = "bbb"; 
    $set["cat"] = "ccc"; 
    $set["stat"] = "ddd"; 
     
    mysql_query("UPDATE cat SET ".implode("=".implode($set).", ", array_keys($set))." WHERE id = '".$_POST['id']."'");
    tohle potřebuji vyplodit :(
    mysql_query("UPDATE cat SET nazev="aaa", url="bbb", cat="ccc", stat="ddd" WHERE id = '".$_POST['id']."'");
    ale už vážně nevím jak dál :( Děkuji předem za ochotu a pomoc


    Řešení dotazu:


    Odpovědi

    29.12.2011 08:50 Jan Trávníček | skóre: 10 | blog: ehonza | Existuje
    Rozbalit Rozbalit vše Re: Oprava sql dotazu pomoci implode v PHP
    Hmmm pomocí implode bych se asi ani nepokoušel. Zkusil bych využít funkce sprintf (http://php.net/manual/en/function.sprintf.php) Doufám že z dokumentace je způsob jasný.

    Pokud by to bylo jen trochu možné využil bych místo připojení pomocí mysql připojení pomocí PDO, které umožňuje oddělit sql dotaz a parametry a tím zvýšit bezpečnost aplikace.
    To mess up a Linux box, you need to work at it; to mess up your Windows box, you just have to work on it.
    pavlix avatar 29.12.2011 09:18 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Oprava sql dotazu pomoci implode v PHP
    Není tohle typický adept na SQL injection?
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    29.12.2011 22:27 K
    Rozbalit Rozbalit vše Re: Oprava sql dotazu pomoci implode v PHP
    Treba ma vstupy osetrene nekde pred tim, potom to injection nebude ;)
    29.12.2011 22:52 Kit
    Rozbalit Rozbalit vše Re: Oprava sql dotazu pomoci implode v PHP
    ... WHERE id = '".$_POST['id']."' ...
    Takhle ošetření vstupu rozhodně nevypadá.
    Jendа avatar 30.12.2011 07:01 Jendа | skóre: 74 | blog: Výlevníček | JO70FB
    Rozbalit Rozbalit vše Re: Oprava sql dotazu pomoci implode v PHP
    Třeba na začátku kontroluje, že má v id jenom číslo, a když ne, tak skončí :).</troll>
    Why did the multithreaded chicken cross the road? to To other side. get the
    30.12.2011 08:32 K
    Rozbalit Rozbalit vše Re: Oprava sql dotazu pomoci implode v PHP
    co treba:
    if($_POST['id'] == 12) {
       ... WHERE id = '".$_POST['id']."' ...
    }
    else {
       die("franto mas to blbe");
    }
    
    btw: nerikam, ze je to stastne reseni a videl jsem i horsi reseni, ale jde to Jen rikam ze nez se zacne odsuzovat nekdo za neco tak treba by to chtelo odpoved: hele mas chybu v tom a tom tak ti to nejede a chtelo by to resit radeji tak nebo onak

    A ne mu nadavat do volu a sql inj a ja nevim ceho jeste.

    Odpovidat na konkretni dotaz nebudu protoze uz tu na to nekdo odpovedel s tema apostrofama.
    30.12.2011 10:39 Kit
    Rozbalit Rozbalit vše Re: Oprava sql dotazu pomoci implode v PHP
    Číslo se do apostrofů nedává. Zmíněné ošetření vstupních parametrů je sice možné, ale podle typu dotazu ho v daném případě považuji za málo pravděpodobné.

    Ten původní příklad skoro mohl fungovat, kdyby začínal takto:
    $set["nazev"] = "'aaa'"; 
    $set["url"] = "'bbb'";
    ...
    Ale to by se Orlando nedozvěděl, jaké že tam má chyby a následně by je ještě dlouho opakoval. Navíc je tam ještě pár dalších chyb, které jsou hezky vidět, když se místo funkce mysql_query() použije obyčejné echo.
    Řešení 1× (Jan Drábek)
    29.12.2011 09:52 Kit
    Rozbalit Rozbalit vše Re: Oprava sql dotazu pomoci implode v PHP
    Myšlenkový postup je zralý na to, aby se jeho autor přestal zabývat touto ptákovinou a podíval se na parametrizované dotazy, které tyhle záležitosti řeší systémově bez rizika SQL injection.
    29.12.2011 11:57 Orlando
    Rozbalit Rozbalit vše Re: Oprava sql dotazu pomoci implode v PHP
    To jste mi poradili, všichni plnou hubu SQL injection ale, že by někdo poradil to ne, jediné co tady tazatel poslední dobou dostane je vysmech!!!
    29.12.2011 12:03 Filip Jirsák | skóre: 67 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: Oprava sql dotazu pomoci implode v PHP
    Vždyť vám poradili PDO a parametrizované SQL.
    29.12.2011 12:30 Orlando
    Rozbalit Rozbalit vše Re: Oprava sql dotazu pomoci implode v PHP
    To ano, ale dotaz zněl: Oprava sql dotazu pomoci implode v PHP ne pomocí nějakého PDO či parametrizované SQL. V obou případech stejně nevím co to znamená.. Tak, že jsem stejně žádnou radu nedostal.
    pepe_ avatar 29.12.2011 12:35 pepe_ | skóre: 47
    Rozbalit Rozbalit vše Re: Oprava sql dotazu pomoci implode v PHP

    Tady ti stejně každej bude jen naznačovat že jsi nula a až si to vyřešíš sám tak každej řekne že stejně máš špatnou koncepci. Nečekej že by ti zde někdo řekl "má se to dělat tak a tak a tady je ukázka".  Poradna zde klesla na "bouchněte si..." .

    Řešení 1× (Jan Drábek)
    Heron avatar 29.12.2011 12:59 Heron | skóre: 51 | blog: root_at_heron | Olomouc
    Rozbalit Rozbalit vše Re: Oprava sql dotazu pomoci implode v PHP
    Jenže ono je to opravdu špatně. Poradna nemá mít za cíl poradit, jak nabít zbraň ve chvíli, kdy se dotyčný tak akorát střelí do vlastní nohy. Naopak, cílem je poradit, jak to udělat dobře, a to tu zaznělo. Rozhranní PHP PDO a připravené dotazy. Pokud těmto pojmům nerozumí, může se zeptat na seznam vhodné literatury. Výsledkem potom bude jednak správně napsaný program a také nové znalosti.
    30.12.2011 08:45 K
    Rozbalit Rozbalit vše Re: Oprava sql dotazu pomoci implode v PHP
    Miluju lidi co napisou "hello word" za pouziti 30 objektu, protoze je to "spravne" misto aby napsali echo("hello word"); protoze to je prece spatne (ikdyz se po nich nic vic nechce).

    Chci tim rict ze odpoved by mela byt: Nemas tam apostrofy a imho lepsi reseni by bylo pouzit napr. PDO protoze ti osetri sql inj. ktery ti zde hrozi jestli nemas poradne osetrene vstupy.

    Normalne se takhle nevyjadruju ale odpovedi a komentare lidi zde ktere jsem povazoval za rozumne a odborniky me v tehle diskuzi vazne docela nakrkly.

    A aby nekdo nenapadal moji anonymitu: http://www.basak.cz, o PHP neco vim a jak rikam, neobhajuju jeho reseni, ja bych to resil jinak, ale reaguji na to jak je zde napadan.
    Heron avatar 30.12.2011 08:59 Heron | skóre: 51 | blog: root_at_heron | Olomouc
    Rozbalit Rozbalit vše Re: Oprava sql dotazu pomoci implode v PHP

    V produkční praxi nikdo po nikom "hello world" nechce. A u každého projektu, který začíná jako "hello world" s apostrofy hrozí, že se potom začne používat a růst a potom tam ten bezpečnostní průser zůstane. Proto si myslím, že je nutné, dělat věci správně již od začátku.

    Odpověď, kterou bys tady rád viděl, je hned úplně první. Tazatel odpoveď dostal a mohl se zeptat, co to je PDO a Prepared statement. Celá diskuse vnikla na základně jeho odmítavé reakce a já sám reaguji nikoliv na původní dotaz (ten už tu byl několikrát odpovězen), ale na reakci ohledně smyslu poradny. A trván na tom, poradna má sloužit k tomu, aby se věci dělali správně. Ne jen poradit, jak rozchodit nějaký bastl.

    pavlix avatar 30.12.2011 16:31 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Oprava sql dotazu pomoci implode v PHP
    Miluju lidi co napisou "hello word" za pouziti 30 objektu, protoze je to "spravne" misto aby napsali echo("hello word"); protoze to je prece spatne (ikdyz se po nich nic vic nechce).
    Miluju lidi, kteří přijdou do diskuze psát totální sračky a cítí se při tom strašně inteligentně.
    Chci tim rict ze odpoved by mela byt: Nemas tam apostrofy a imho lepsi reseni by bylo pouzit napr. PDO protoze ti osetri sql inj. ktery ti zde hrozi jestli nemas poradne osetrene vstupy.
    Takové odpovědi jsem tu viděl a dotyčný nad nimi ohrnuje nos.
    A aby nekdo nenapadal moji anonymitu: http://www.basak.cz, o PHP neco vim a jak rikam, neobhajuju jeho reseni, ja bych to resil jinak, ale reaguji na to jak je zde napadan.
    Přijde mi, že si pleteš napadeného s člověkem, který kouše do podané ruky. To se lidem stává a nevyčítám ti to, jen tě na to upozorňuju.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    pavlix avatar 29.12.2011 13:11 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Oprava sql dotazu pomoci implode v PHP
    Nečekej že by ti zde někdo řekl "má se to dělat tak a tak a tady je ukázka".
    Jestli sis nevšiml, an on nechce poradit, jak se to dělat má. Ale chce poradit, jak se to dělat nemá. Nad tím tady dost možná nikdo nebude chtít ztrácet čas, ať si zaplatí doučko, jestli chce někoho, kdo bude pracovat podle jeho představ.
    Poradna zde klesla na "bouchněte si..." .
    Tak sis bouchnul do poradny, a co dál?
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    29.12.2011 14:42 Kit
    Rozbalit Rozbalit vše Re: Oprava sql dotazu pomoci implode v PHP
    Další (censored), který nic nepochopil. Všichni jsme mu navrhovali řešení, jak by to mělo vypadat. Kdyby alespoň napsal, že parametrizované dotazy z nějakého důvodu mít nemůže (standardní ovladač je AFAIK neumí). Ale on neví co to je a ani nechce vědět, co to je. Když byl upozorněn na SQL injection, tak ho to nezajímá, stále se chce střílet do nohy. Jestli někdo z něho dělá nulu, tak to dělá on sám.

    A pak se ozveš s nic neříkajícím blábolem, že je tato poradna špatná. Přitom jsi mu nijak nepomohl. Nenapsal jsi ani jeden řádek kódu a žvaníš tady o poklesu Poradny.
    pavlix avatar 30.12.2011 00:04 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Oprava sql dotazu pomoci implode v PHP
    Běžně se takovým říká trollové.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    30.12.2011 00:29 Kit
    Rozbalit Rozbalit vše Re: Oprava sql dotazu pomoci implode v PHP
    No jo, místo (censored) jsem mohl napsat troll. Možná bych tím ušetřil i pár dalších vět s definicí trolla. Vlastně spíš parametrizovaného trolla :-)
    Řešení 1× (Jan Drábek)
    29.12.2011 13:45 Filip Jirsák | skóre: 67 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: Oprava sql dotazu pomoci implode v PHP
    Když nevíte, co to znamená, tak si to najděte. Když si aspoň základ přečtete a něco vám nebude jasné, klidně se ptejte dál.

    Pokud víte, že se ten dotaz má opravit pomocí implode, nechápu, na co se ptáte. Několik lidí tady si myslí, že je to potřeba opravit jinak, a napsali vám jak.

    Když se v poradně zeptáte, jak zatlouct hřebík, že to určitě nějak půjde šroubovákem, buďte rád, že jste se dozvěděl, že na zatloukání hřebíků se používá kladivo a šroubovákem vám to moc dobře nepůjde. Pokud na použití šroubováku k zatloukání trváte, je to váš problém, ale nedivte se, že nikdo nechce trávit čas vymýšlením toho, jak by takovou hloupost šlo udělat.
    pavlix avatar 29.12.2011 13:12 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Oprava sql dotazu pomoci implode v PHP
    To jste mi poradili, všichni plnou hubu SQL injection ale, že by někdo poradil to ne, jediné co tady tazatel poslední dobou dostane je vysmech!!!
    Trhni si nohou a jdi se zeptat maminky. Co jiného ti na to mám říct, aby to bylo ještě slušné?
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    29.12.2011 13:35 Kit
    Rozbalit Rozbalit vše Re: Oprava sql dotazu pomoci implode v PHP
    To, že odpovědi považuješ za výsměch, značí, že se skutečně chceš střílet do nohy. A ty 3 vykřičníky říkají, že jsi ignorant. Tudy cesta nevede.

    Kdyby sis ten výsledný dotaz získaný funkcí implode() vypsal, zjistil bys, že vkládané řetězce máš bez apostrofů a to je špatně. Navíc vůbec nemáš ošetřenu proměnnou $_POST['id']. SQL injection bys zanedbat neměl. Až přijdeš o databázi, budeš nám tu brečet.

    Zkus to třeba takto:
    $id=intval($_POST['id']);
    $set[]=sprintf("%s='%s'","nazev",mysql_real_escape_string($nazev);
    $set[]=sprintf("%s='%s'","url",mysql_real_escape_string($url);
    $query="UPDATE cat SET ".implode(", ",$set)." WHERE id=$id;";
    
    Dá se to zjednodušit pomocí funkce array_map(), ale to by na tebe bylo asi moc náročné. Ale jak už jsem psal (nejen já), použití parametrizovaného dotazu je mnohem jednodušší.

    A ještě něco: Připadá mi velmi podivné, když někdo stringy nedává do apostrofů a čísla jimi obaluje. Má to být přesně naopak.
    29.12.2011 17:48 Orlando
    Rozbalit Rozbalit vše Re: Oprava sql dotazu pomoci implode v PHP
    Když to tak čtu, tak vlastně ten MySQL manuál je k hovnu a všechny uvedené příklady v něm jsou nebezpečné... Se divím, že MySQL ještě vůbec někdo poučívá, když zcela triviální dotaz jako je UPDATE
    mysql_query("UPDATE `cat` SET 
    `nazev` = '".mysql_real_escape_string($_POST["nazev"])."', 
    `url` = '".mysql_real_escape_string($_POST["url"])."' 
    WHERE `id` = ".intval($_POST["id"])."");
    je k ničemu a nejde bezpečně použít. Fakt to nechápu :-(
    29.12.2011 18:47 Kit
    Rozbalit Rozbalit vše Re: Oprava sql dotazu pomoci implode v PHP
    Tohle vypadá mnohem lépe než první příklad a přiznám se, že v něm bezpečnostní díru nevidím.

    Kdybys použil parametrizovaný dotaz, vypadalo by to asi takto:
    $update=$db->prepare("UPDATE cat SET nazev=:nazev, url=:url WHERE id=:id;");
    $update->execute(array(':nazev'=>$_POST['nazev'],':url'=>$_POST['url'],':id'=>$_POST['id']));
    
    Řekl bych, že tohle je velmi blízko tvému původnímu požadavku. Jen je potřeba opustit zastaralý ovladač mysql a naučit se PDO. Existuje i kratší zápis, ale ten v manuálu snadno najdeš. Místo názvů parametrů jsou pak jen otazníky a parametry jsou poziční.
    29.12.2011 22:25 Filip Jirsák | skóre: 67 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: Oprava sql dotazu pomoci implode v PHP
    Abyste to chápal, musel byste si nejprve zjistit, co to SQL injection je. Stačí si přečíst aspoň první odkaz, co vám vrátí Google… Pak zjistíte, že SQL injection se netýká dotazu samotného, ale způsobu jeho sestavení – takže psát v souvislosti s SQL injection o triviálním dotazu je nesmysl.

    Ten váš příklad používá PHP hack mysql_real_escape(), který – pokud použijete správnou verzi PHP se správnou verzí MySQL – pravděpodobně bude fungovat. Lepší je ale dělat to rovnou správně a použít parametrické dotazy.
    30.12.2011 08:57 K
    Rozbalit Rozbalit vše Re: Oprava sql dotazu pomoci implode v PHP
    Tak to se schvalne podivam jak je to resene v tom PDO interne kdyz mysql_... funkce jsou tak strasne nebezpecne. To neni ironie, vazne me to zajima.
    Jendа avatar 30.12.2011 06:59 Jendа | skóre: 74 | blog: Výlevníček | JO70FB
    Rozbalit Rozbalit vše Re: Oprava sql dotazu pomoci implode v PHP
    Všimni si, že ve tvém příkladu je
    "WHERE id = '".$_POST['id']."'"
    zatímco v citovaném
    "WHERE `id` = ".intval($_POST["id"]).""
    Why did the multithreaded chicken cross the road? to To other side. get the
    30.12.2011 11:59 Kit
    Rozbalit Rozbalit vše Re: Oprava sql dotazu pomoci implode v PHP
    Je to sice už zodpovězeno, ale stejně mě napadlo ještě jedno řešení:
    function dvojice($key,$val) {
      $value=mysql_real_escape_string($val);
      return "$key='$value'";
    }
    
    $id=intval($_POST['id']);
    $query="UPDATE cat SET ".implode(", ",array_map('dvojice',array_keys($set),$set))." WHERE id=$id;";
    Je to jen momentální nápad, jak by se to také dalo udělat. Dalo by se to upravit i do podoby vhodné pro parametrizované dotazy.

    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.