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 05:11 | Komunita

    Během tradiční ceremonie k oslavě Dne vzniku samostatného československého státu (28. října) byl vyznamenán medailí Za zásluhy (o stát v oblasti hospodářské) vývojář 3D tiskáren Josef Průša. Letos byly uděleny pouze dvě medaile Za zásluhy o stát v oblasti hospodářské, druhou dostal informatik a manažer Ondřej Felix, který se zabývá digitalizací státní správy.

    Gréta | Komentářů: 0
    dnes 04:44 | Nová verze

    Tor Browser, tj. fork webového prohlížeče Mozilla Firefox s integrovaným klientem sítě Tor přednastavený tak, aby přes tuto síť bezpečně komunikoval, byl vydán ve verzi 15.0. Postaven je na Firefoxu ESR 140.

    Ladislav Hagara | Komentářů: 0
    včera 16:44 | Nová verze

    Bylo oznámeno (cs) vydání Fedora Linuxu 43. Ve finální verzi vychází šest oficiálních edic: Fedora Workstation a Fedora KDE Plasma Desktop pro desktopové, Fedora Server pro serverové, Fedora IoT pro internet věcí, Fedora Cloud pro cloudové nasazení a Fedora CoreOS pro ty, kteří preferují neměnné systémy. Vedle nich jsou k dispozici také další atomické desktopy, spiny a laby. Podrobný přehled novinek v samostatných článcích na stránkách Fedora Magazinu: Fedora Workstation, Fedora KDE Plasma Desktop, Fedora Silverblue a Fedora Atomic Desktops.

    Ladislav Hagara | Komentářů: 0
    včera 15:22 | IT novinky

    Elon Musk oznámil (𝕏) spuštění internetové encyklopedie Grokipedia (Wikipedia). Zatím ve verzi 0.1. Verze 1.0 prý bude 10x lepší, ale i ve verzi 0.1 je podle Elona Muska již lepší než Wikipedia.

    Ladislav Hagara | Komentářů: 10
    včera 05:44 | Komunita

    PSF (Python Software Foundation) po mnoha měsících práce získala grant ve výši 1,5 milionu dolarů od americké vládní NSF (National Science Foundation) v rámci programu "Bezpečnost, ochrana a soukromí open source ekosystémů" na zvýšení bezpečnosti Pythonu a PyPI. PSF ale nesouhlasí s předloženou podmínkou grantu, že během trvání finanční podpory nebude žádným způsobem podporovat diverzitu, rovnost a inkluzi (DEI). PSF má diverzitu přímo ve svém poslání (Mission) a proto grant odmítla.

    Ladislav Hagara | Komentářů: 22
    včera 04:55 | Nová verze

    Balík nástrojů Rust Coreutils / uutils coreutils, tj. nástrojů z GNU Coreutils napsaných v programovacím jazyce Rust, byl vydán ve verzi 0.3.0. Z 634 testů kompatibility Rust Coreutils s GNU Coreutils bylo úspěšných 532, tj. 83,91 %. V Ubuntu 25.10 se již používá Rust Coreutils místo GNU Coreutils, což může přinášet problémy, viz například nefunkční automatická aktualizace.

    Ladislav Hagara | Komentářů: 0
    27.10. 21:00 | IT novinky

    Od 3. listopadu 2025 budou muset nová rozšíření Firefoxu specifikovat, zda shromažďují nebo sdílejí osobní údaje. Po všech rozšířeních to bude vyžadováno někdy v první polovině roku 2026. Tyto informace se zobrazí uživateli, když začne instalovat rozšíření, spolu s veškerými oprávněními, která rozšíření požaduje.

    Ladislav Hagara | Komentářů: 0
    27.10. 17:11 | Humor

    Jste nuceni pracovat s Linuxem? Chybí vám pohodlí, které vám poskytoval Microsoft, když vás špehoval a sledoval všechno, co děláte? Nebojte se. Recall for Linux vám vrátí všechny skvělé funkce Windows Recall, které vám chyběly.

    Ladislav Hagara | Komentářů: 1
    27.10. 16:11 | Komunita

    Společnost Fre(i)e Software oznámila, že má budget na práci na Debianu pro tablety s cílem jeho vyžívání pro vzdělávací účely. Jako uživatelské prostředí bude použito Lomiri.

    Ladislav Hagara | Komentářů: 1
    26.10. 17:11 | IT novinky

    Proběhla hackerská soutěž Pwn2Own Ireland 2025. Celkově bylo vyplaceno 1 024 750 dolarů za 73 unikátních zranitelností nultého dne (0-day). Vítězný Summoning Team si odnesl 187 500 dolarů. Shrnutí po jednotlivých dnech na blogu Zero Day Initiative (1. den, 2. den a 3. den) a na YouTube.

    Ladislav Hagara | Komentářů: 5
    Jaké řešení používáte k vývoji / práci?
     (36%)
     (47%)
     (20%)
     (19%)
     (23%)
     (17%)
     (21%)
     (17%)
     (18%)
    Celkem 279 hlasů
     Komentářů: 14, poslední 14.10. 09:04
    Rozcestník

    Dotaz: PHP ochrana pred SQL injection

    2.10.2014 21:11 Peter
    PHP ochrana pred SQL injection
    Přečteno: 854×
    Dobrý deň vám prajem.

    Riešim ochranu mojej malej PHP aplikácie a pre uľahčenie programovania a aby som proste nezabudol ošetrovať každý vstup od používateľa som si dal do súboru funkcie.php (ktorý je includovaný hned na začiatku z každého iného súboru) na začiatok toto:
    foreach($_GET as $K=>$V) { $_GET[$K]=Safe($V); }
    foreach($_POST as $K=>$V) { $_POST[$K]=Safe($V); }
    foreach($_COOKIE as $K=>$V) { $_COOKIE[$K]=Safe($V); }
    
    function Safe($Value) { return trim(str_replace(array("'",'"',"`"),'',$Value)); }
    
    samotná premenná v SQL dotaze je samozrejme v úvodzovkách
    select ID from pouzivatel where (meno="$_POST[meno]" and heslo="$_POST[heslo]")
    
    Pokiaľ ma moje slabé vedomosti neklamú, tak SQL injection sa robí práve cez "http vstupy" do aplikácie ($_REQUEST nepoužívam nikde) a týmto by to malo byť úplne ošetrené. Alebo sa kruto mýlim? Ak áno, na čo ešte treba myslieť?

    Ak by to niekoho zaujímalo, tak znaky " ' ` odstraňujem pomocou str_replace preto, lebo som si istý, že ich používateľ nebude nikdy potrebovať.

    Vopred vám veľmi pekne dakujem za odpovede a podnety.

    Řešení dotazu:


    Odpovědi

    2.10.2014 21:31 Kit | skóre: 46 | Brno
    Rozbalit Rozbalit vše Re: PHP ochrana pred SQL injection
    To vše je zbytečné a zavádějící. Dá se to udělat mnohem jednodušeji:
    <?php
    $db = new PDO('...');
    $select = $db->prepare("SELECT id FROM pouzivatel WHERE meno=? AND heslo=?");
    $select->execute(array($_POST[meno], $_POST[heslo]));
    
    Do superglobálních proměnných $_GET, $_POST a $_COOKIE nikdy nic nezapisuj. Jsou určeny pouze pro čtení.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    2.10.2014 21:58 Peter
    Rozbalit Rozbalit vše Re: PHP ochrana pred SQL injection
    No ta aplikácia je veľmi stará, teda pdo nepoužíva, ale klasické mysql_query. Ak sa raz dokopem do toho aby som ju prekopal, tak samozrejme myslím na prepare, ale teraz to musím zatiaľ riešiť tak ako to riešim.

    Z toho vyplýva: prečo je to podľa teba zbytočné a zavádzajúce? A prečo do superglobálnych premien nesmie nikdy zapisovať? Samozrejme, že chápem a akceptujem, že zložité čachre-machre so superglobálnymi premenami možu viesť a vedú k prúseru, ale čo je zlé na tomto jednoduchom zápise? Veľmi by som ocenil keby mi niekto nastienil pozadie, lebo voľajako teraz nevydím súvislosti (áno, som hlúpy, ale nikto z neba učený nespadol).

    Ciže moja otázka stále platí. Pomože mi ten môj výmysel, alebo nie?

    Veľmi pekne ti dakujem za pomoc a ochotu.
    2.10.2014 22:16 Kit | skóre: 46 | Brno
    Rozbalit Rozbalit vše Re: PHP ochrana pred SQL injection
    Místo funkce Safe() alespoň použij funkci mysql_real_escape_string(), která to na rozdíl od té tvé udělá dobře.

    Zapisování do těchto superglobálních proměnných je plýtváním pamětí a výkonem. Navíc tím modifikuješ vstupní data, což je nežádoucí. Takový program pak mlží. Jsou to vstupní proměnné.

    Tvůj výmysl ti nepomůže.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    2.10.2014 22:25 Peter
    Rozbalit Rozbalit vše Re: PHP ochrana pred SQL injection
    ten Safe samozrejme plánujem rozšíriť o dalšie testy.

    Pamäte a výkonu je na túto aplikáciu až až.

    Stále som sa nedozvedel prečo je modifikácia vstupných dát nežiadúca, ak viem čo robím a čo modifikujem.

    A to najdôležitejšie - prečo mi ten výmysel nepomôže? Ale teraz ma zaujíma fakt čisto technické hľadisko a nie ideologické. Je mi jasné čo je podľa teba lepšie a ja s tebou plne súhlasím. Ale fakt sa teraz bavme o otázke tak ako bola položená. Ak riešim problém s riadením na aute je jasné, že najideálnejšie je kúpiť si nové auto a nebabrať sa so šrotom - ale zatiaľ to nové auto proste nie je.

    Velmi pekne ti dakujem za trpezlivosť.
    2.10.2014 22:33 Kit | skóre: 46 | Brno
    Rozbalit Rozbalit vše Re: PHP ochrana pred SQL injection
    Modifikace vstupních proměnných je nežádoucí, protože tím výrazně zhoršuješ čitelnost programu. Data se ošetřují až těsně před použitím.

    Už jsem ti napsal, že máš použít funkci mysql_real_escape_string(), která byla vyvinuta přesně pro tento účel a dělá to dobře. Nevynalézej kolo.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    2.10.2014 22:51 Peter
    Rozbalit Rozbalit vše Re: PHP ochrana pred SQL injection
    V poriadku - predpokladajme, že som zmenil Safe za mysql_real_escape_string. Dalej po prečítaní X diskusií na tému modifikácie superglobálnych premien na stackexchange.com mi je jasné prečo je toto riešenie nevhodné. Ale ja sa pýtam, odkliadnúc od toho, že je to nevhodné a nesprávne (čoho som si vážne vedomí a v budúcnosti to plánujem prerobiť) je toto moje aktuálne riešenie technicky funkčné? Ochráni ma to plne pred SQL injection? Ano? Nie?

    Ja viem, že to musíš mať ťažké s takými exotmi ako ja, ale aj tak dakujem za ochotu.
    Aleš Janda avatar 2.10.2014 23:17 Aleš Janda | skóre: 23 | blog: kýblův blog | Praha
    Rozbalit Rozbalit vše Re: PHP ochrana pred SQL injection
    Ochrání tě jenom tam, kde do SQL dotazu vkládáš proměnnou mezi uvozovky. Což možná neděláš u čísel - takže čísla chce ošetřit zvlášť. Jenže to závisí na konkrétní proměnné.

    Takže je nejlepší projít ta místa, kde to vstupuje do SQL dotazu, a ošetřit to přímo tam podle kontextu.
    3.10.2014 08:13 Filip Jirsák
    Rozbalit Rozbalit vše Re: PHP ochrana pred SQL injection
    Místo funkce Safe() alespoň použij funkci mysql_real_escape_string(), která to na rozdíl od té tvé udělá dobře.
    Možná. Pokud funguje úplně stejně jako parser SQL v MySQL a pokud je úplně stejně nakonfigurovaná. Stačí třeba jen se neshodnout ve vstupním kódování, a už to může být problém. Ano, je lepší použít tuhle funkci než nějakou svou samo-domo velmi přibližnou, ale já bych tu funkci rozhodně za 100% bezpečnou nepovažoval.
    Řešení 1× (Šangala)
    AraxoN avatar 3.10.2014 13:13 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
    Rozbalit Rozbalit vše Re: PHP ochrana pred SQL injection
    Pomože mi ten môj výmysel, alebo nie?
    Nie, Tvoj výmysel prinesie viac problémov než úžitku. Prestaň špekulovať a urob to čo je správne - mysql_real_escape_string() alebo PDO.
    Josef Kufner avatar 3.10.2014 00:33 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: PHP ochrana pred SQL injection
    Podívej se na to, k čemu jsou magic quotes a proč už byly z PHP odstraněny.

    Mršíš tím data, způsobuješ problémy s dvojitým escapováním a neřešíš data, která jsi načetl odjinud, například z databáze. Také to nefunguje, pokud chceš přijatá data použít jinde. Dále pak nepředáváš té funkci informaci o nastavení způsobu komunikace s databází, což může mít vliv na to, co je potřeba ošetřit.

    Přepiš to, aby to používalo PDO a prepared statements. Beztak je to natolik děravé, že to nelze pustit do světa.
    Hello world ! Segmentation fault (core dumped)
    3.10.2014 08:43 Peter
    Rozbalit Rozbalit vše Re: PHP ochrana pred SQL injection
    1.) http://forum.root.cz/index.php?topic=9790.0 (hlavne ten prý odsek)

    2.) je to môj kód v ktorom sa hrabem výlučne ja, čiže viem o každej premennej úplne všetko, odkiaľ pochádza, kam ide, čo bude obsahovať, ... Mimochodom - tak v databáze predpokladám čisté dáta. Jedná sa mi o SQL injection a keby útočník dokázal vložiť dáta priamo do databázy, tak mu už je predsa jedno či aplikácia má dieru alebo nie.

    3.) čo ma spôsob komunikácie spoločné s tým o čo sa mi tu jedná? Mimochodom "set character set utf8" a "set names utf8" mám default (ak ti ide o toto)

    4.) mám x nových projektov kde samozrejme používam všetky nové vymoženosti - OOP, PDO, prepare, ... ale toto je jeden veľmi starý projekt ktorý používam ja a moja rodina a našiel som v ňom pár neošetrených vstupov, tak som to chcel poriešiť globálne (pričom ešte raz opakujem - keďže viem ako ten program presne pracuje a to do bodky, tak som si plne vedomí čo spôsobí ten môj výmysel). A možno sa ti to zdá zvláštne, ale ja mám aj rodinu, priateľov a prácu ktorej sa musím venovať a fakt si teraz nemienim brať dovolenku a stráviť týždeň nad prepisovaním blbostí.

    5.) poslednú vetu nekomentujem, keďže je evidentné kam smeruje táto debata.

    6.) neviem čo je také ťažké pochopiť jednoduchú otázku a namiesto ideologických kecov riešiť prísne technickú stránku veci. Ja mám vo zvyku už X rokov dávať každú premennú pri sql query do úvodzoviek (select X from table where ID="$_POST[ID]") a keďže predpokladám, že SQL injection sa celé točí v prvom rade okolo úvodzoviek (" ') a http vstupov ($_GET, $_POST, $_COOKIE, $_REQUEST - nepoužívam) tak predpokladám, že úplným odstránením úvodzoviek z premennej dosiahnem to čo chcem. A práve preto používam odstránenie a nie escapovanie, lebo som si plne vedomí čo by escapovanie spôsobilo. Áno, som prasa, som bastlič, som + dosaď si čo chceš + ale mňa zaujíma technické riešenie problému a nie ideologické dristy!
    Josef Kufner avatar 3.10.2014 09:30 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: PHP ochrana pred SQL injection
    Nejsou to ideologické kecy, jsou to technické kecy.

    Databáze "čistá" data neobsahuje a nikdy obsahovat nebude, neboť SQL injection tak nefunguje. Navíc se podívej ještě na cross site scripting a cross site request forgery. Jsem si celkem jist, že to tam budeš mít také.

    Přepis na PDO není nijak zcestný, tak jako tak musíš projít všechny dotazy do databáze a opravit je, zda tam budeš cpát mysql_real_escape_string nebo vyměníš volání funkce vyjde nastejno, pokud si přpravíš vhodný wrapper okolo PDO, aby odpovídal starému kódu, tak to bude i znatelně jednodušší.

    Tvůj zvyk s úvozovkami SQL injection neřeší, ba naopak, takto zranitelnost na SQL injection vzniká.

    A ten první odkaz si rač vetnout za klobouk, vše co v této diskuzi je, je k tématu. Prostě to jen děláš blbě a bylo ti to řečeno.
    Hello world ! Segmentation fault (core dumped)
    3.10.2014 11:14 Peter
    Rozbalit Rozbalit vše Re: PHP ochrana pred SQL injection
    Databáze "čistá" data neobsahuje a nikdy obsahovat nebude, neboť SQL injection tak nefunguje.
    A ako teda funguje?
    Navíc se podívej ještě na cross site scripting a cross site request forgery. Jsem si celkem jist, že to tam budeš mít také.
    Áno, a ešte navyše k tomu som škaredý, koktavý a všeobecne nehodný používať počítač.
    Přepis na PDO není nijak zcestný, tak jako tak musíš projít všechny dotazy do databáze a opravit je, zda tam budeš cpát mysql_real_escape_string nebo vyměníš volání funkce vyjde nastejno, pokud si přpravíš vhodný wrapper okolo PDO, aby odpovídal starému kódu, tak to bude i znatelně jednodušší.
    Od začiatku tvrdím, že si plne uvedomujem, že toto riešenie je jediné správne a čisté a zároveň tvrdím, že to aj plánujem urobiť. Ja sa vôbec nehádam o tom, že niečo iné by malo byť jednoduchšie, lepšie a čo ja viem aké ešte. Sám v iných - nových - projektoch používam PDO s prepared, ... takže je mi ohľadom toho všetko jasné.
    Tvůj zvyk s úvozovkami SQL injection neřeší, ba naopak, takto zranitelnost na SQL injection vzniká.
    Ako?
    A ten první odkaz si rač vetnout za klobouk, vše co v této diskuzi je, je k tématu. Prostě to jen děláš blbě a bylo ti to řečeno.
    Nie, ten odkaz sedí ako "riť na šerbeľ". Krútime sa tu dookola s niečim čo mi je plne jasné, čo akceptujem, nepopieram a sám využívam. Ale na pôvodnú otázku som odpoveď stále nedostal a toto je kameň úrazu. To je až také ťažké pochopiť?

    Ja som sa pýtal na jednu veľmi jednoduchú vec - ak zmažem v $_GET, $_POST, $_COOKIE úvodzovky (" ' `) aké má útočník ďalšie možnosti čo sa týka SQL injection??? Alebo jedina správna odpoveď je typu: "to ťa nemusí zaujímať, si hlupák, nemal by si používať pc, nieto ešte patlať nejake akožeprogramy"?

    To ste vy géniovia fakt tak nepoužitelný v reálnom živote, že máte problém chápať jednoduché otázky?
    3.10.2014 14:57 Lucius
    Rozbalit Rozbalit vše Re: PHP ochrana pred SQL injection
    Nejsem sice genius ani se mi to nechce vymyslet, ale umim si predstavit treba nejake podstrceni subselectu apod. - tedy smazat uvozovky neni podle me ochranou proti sql injection.
    rADOn avatar 6.10.2014 18:27 rADOn | skóre: 44 | blog: bloK | Praha
    Rozbalit Rozbalit vše Re: PHP ochrana pred SQL injection
    Josef se vyzná a místo vymýšlení narovnáváku na ohejbák bys měl pečlivě číst co ti napsal. To co jsi vymyslel je jen primitivní reimplementace magic_quotes. Jetli si myslíš že nemá pravdu, tak jen do toho – napiš Lerdorfovi ať je vrátí zpátky.
    "2^24 comments ought to be enough for anyone" -- CmdrTaco
    3.10.2014 09:41 Kit | skóre: 46 | Brno
    Rozbalit Rozbalit vše Re: PHP ochrana pred SQL injection
    1. Jak ten odkaz souvisí s tématem?
    2. Čistá data v databázi? Utopie.
    3. Máš nastavený i jazyk? Asi ne, že?
    4. Místo týdne strávíš dva. To se vyplatí!
    5. Ano, směřuje k PDO.
    6. Technické řešení problému jsi dostal. Teď už se bavíme jen o tom, že nejsi ochoten ho přijmout a stále hledáš alternativy. Klidně hledej dál...
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    3.10.2014 11:27 Peter
    Rozbalit Rozbalit vše Re: PHP ochrana pred SQL injection
    Jak ten odkaz souvisí s tématem?
    Tak, že ja sa pýtam na to ako čo najjednoduchšie, najrýchlejšie a najkrajšie zakryť zhrdzavené podbehy na aute a odpoveď je stále tá istá - kúp si nové auto.
    Čistá data v databázi? Utopie.
    Prečo? Keď nedovolím zapísať nejakú háveď tak je jasné, že tu hávaď nemám ani ako prečítať. A ak má útočník iný prístup k db, tak mu asi bude jedno čo ja robím v programe.
    Máš nastavený i jazyk? Asi ne, že?
    Teraz trošičku som mimo čo myslíš, ale ak "utf8_general_ci", tak áno
    Místo týdne strávíš dva. To se vyplatí!
    ??? Čo prosím? Ja teraz riešim nechutný hack aby som sa minútu hnusne/nechutne zaplátal dieru tak čo potom tie 2 týždne?
    Ano, směřuje k PDO.
    Nie, smeruje to k urážke, lebo som si dovolil pýtať sa na otázku, na ktorú som stále nedostal odpoveď.
    Technické řešení problému jsi dostal. Teď už se bavíme jen o tom, že nejsi ochoten ho přijmout a stále hledáš alternativy. Klidně hledej dál...
    Technické riešenie - to správne - som ani dostať nemusel, lebo som o ňom vedel už pred položením otázky - opakujem ešte raz - ohľadom PDO je mi všetko jasné. Odpoveď na moju otázku ale proste stále jednoznačne neprišla. Čo na to povedať.
    3.10.2014 11:39 Kit | skóre: 46 | Brno
    Rozbalit Rozbalit vše Re: PHP ochrana pred SQL injection
    Neustále se ptáš, jak se máš střílet do nohy. My se ti to jen snažíme rozmluvit.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    3.10.2014 09:20 Peter
    Rozbalit Rozbalit vše Re: PHP ochrana pred SQL injection
    Pre pouzivatela GSNAK:

    Tato otazka nie je ani nahodou vyriesena, toboz nie odpovedov ktoru si oznacil. Ak nie si schopny vidiet dovod preco, vysvetlovat ti to nema zmysel.

    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.