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 21:21 | Nová verze Ladislav Hagara | Komentářů: 0
včera 11:44 | Zajímavý projekt

Na Indiegogo byla spuštěna kampaň na podporu herní mini konzole a multimediálního centra RetroEngine Sigma od Doyodo. Předobjednat ji lze již od 49 dolarů. Požadovaná částka 20 000 dolarů byla překonána již 6 krát. Majitelé mini konzole si budou moci zahrát hry pro Atari VCS 2600, Sega Genesis nebo NES. Předinstalováno bude multimediální centrum Kodi.

Ladislav Hagara | Komentářů: 0
včera 00:10 | Nová verze

Byla vydána verze 4.7 redakčního systému WordPress. Kódové označením Vaughan bylo vybráno na počest americké jazzové zpěvačky Sarah "Sassy" Vaughan. Z novinek lze zmínit například novou výchozí šablonu Twenty Seventeen, náhledy pdf souborů nebo WordPress REST API.

Ladislav Hagara | Komentářů: 1
6.12. 12:00 | Zajímavý projekt

Projekt Termbox umožňuje vyzkoušet si linuxové distribuce Ubuntu, Debian, Fedora, CentOS a Arch Linux ve webovém prohlížeči. Řešení je postaveno na projektu HyperContainer. Podrobnosti v často kladených dotazech (FAQ). Zdrojové kódy jsou k dispozici na GitHubu [reddit].

Ladislav Hagara | Komentářů: 26
6.12. 11:00 | Bezpečnostní upozornění

Byly zveřejněny informace o bezpečnostní chybě CVE-2016-8655 v Linuxu zneužitelné k lokální eskalaci práv. Chyba se dostala do linuxového jádra v srpnu 2011. V upstreamu byla opravena minulý týden [Hacker News].

Ladislav Hagara | Komentářů: 2
5.12. 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ářů: 6
5.12. 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ářů: 50
5.12. 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ářů: 10
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ářů: 17
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
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (23%)
 (29%)
 (7%)
 (5%)
 (3%)
Celkem 788 hlasů
 Komentářů: 50, poslední 29.11. 15:50
Rozcestník
Reklama

Dotaz: Kontrola sql dotazu v php

2.3.2012 12:36 Orlando
Kontrola sql dotazu v php
Přečteno: 712×
Zdravím všechny, prosím o kontrolu sql dotazu. Poradí prosím někdo, jestli takto napsaný sql dotaz splňuje dostatečné zabezpečení jelikož data posílá z formuáře uživatel. Třeba u toho datumu si nejsem vůbec jistej :-( Děkuji všem za pomoc, obracím se zde, jelikož neexistují sránky, které by nabízely validní a zabezpečené příklady sql dotazů a byli z roku více než 2002 :-) Ještě jednou moc děkuji.
<?php

     $_POST['name'] = htmlspecialchars($_POST['name']);
     $_POST['last'] = htmlspecialchars($_POST['last']);
     $_POST['pass'] = htmlspecialchars($_POST['pass']);

     $query = "INSERT INTO `registrace` (`name`, `last`, `pass`, `datum`, `status`) VALUE
                                             ('".mysql_real_escape_string($_POST['name'])."',
                                              '".mysql_real_escape_string($_POST['last'])."',
                                              '".mysql_real_escape_string($_POST['pass'])."',
                                              NOW(),
                                              ".intval(0).")";
?>

Řešení dotazu:


Odpovědi

ScheRas avatar 2.3.2012 13:45 ScheRas | skóre: 16
Rozbalit Rozbalit vše Re: Kontrola sql dotazu v php
Pokud máte tím datem na mysli volání funkce NOW(), tak to by mělo být v pořádku. Do toho totiž uživatel vůbec nezasahuje, tudíž není možnost, jak s ní ovlivnit chod databáse. A ostatní? Pokud neposíláte výstup do javascriptu, nebo něco podobného, tak je to v pohodě. Jen bych doporučil definovat u htmlspecialchars() také kódování. Viz dokumentace
2.3.2012 15:23 Orlando
Rozbalit Rozbalit vše Re: Kontrola sql dotazu v php
U toho datumu jsem myslel, jesli se má dát do nějakých uvozovek, apostrofů nebo tak něco. Jinak tedy ten htmlspecialchars() by měl vypadat takto? Děkuji
     $_POST['name'] = htmlspecialchars($_POST['name'], 'UTF-8');
     $_POST['last'] = htmlspecialchars($_POST['last'], 'UTF-8');
     $_POST['pass'] = htmlspecialchars($_POST['pass'], 'UTF-8');
2.3.2012 15:41 Kit
Rozbalit Rozbalit vše Re: Kontrola sql dotazu v php
Do pole $_POST nikdy nezapisuj. Raději použij další proměnné $name, $last, $pass. Kromě získání vyšší přehlednosti tím ušetříš i trochu paměti.

htmlspecialchars() se nepoužívá při zápisu do DB, ale až před prezentací v HTML.
ScheRas avatar 2.3.2012 15:56 ScheRas | skóre: 16
Rozbalit Rozbalit vše Re: Kontrola sql dotazu v php
Musí to vypadat takto, protože podle dokumentace se na druhém místě při zápisu očekává něco jiného. Tedy:
htmlspecialchars($nazev ,none, 'UTF-8');
ScheRas avatar 2.3.2012 16:00 ScheRas | skóre: 16
Rozbalit Rozbalit vše Re: Kontrola sql dotazu v php
A jak už bylo řečeno, je blbost používat htmlspecialchars() při vkládání dat do databáze. To jsem měl asi zmínit dřív.
2.3.2012 15:19 Filip Jirsák | skóre: 66 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Kontrola sql dotazu v php
Těžko říct, to záleží na tom, co dělá funkce mysql_real_escape_string, například zda používá syntaxi, která do posledního puntíku odpovídá parseru MySQL, kterou právě používáte. Já bych na to nespoléhal, a raději bych použil parametrizovaný dotaz, který je bezpečnější, podle mne přehlednější a snáze se používá, a ještě umožní dělat lepší optimalizace (prostě samá pozitiva a sociální jistoty).
$stmt = $dbh->prepare("INSERT INTO `registrace` (`name`, `last`, `pass`, `datum`, `status`) VALUES (?, ?, ?, now(), 0)");
if ($stmt->execute(array($_POST['name'], $_POST['last'], $_POST['pass']))) {
  …
}
htmlspecialchars() bych si nechal až na případný výstup, zvlášť u toho hesla je to spíš chyba – když uživatel zadá heslo „I<3you“, asi bude při přihlašování psát také „I<3you“ a ne „I&lt;3you“.
2.3.2012 15:44 Orlando
Rozbalit Rozbalit vše Re: Kontrola sql dotazu v php
Tak jsem to zkusil použít, ale vrací mi to error: Fatal error: Call to a member function prepare() on a non-object in.... objektové programování neovládám, tak netuším o co jde..
2.3.2012 15:51 Filip Jirsák | skóre: 66 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Kontrola sql dotazu v php
Ten příklad samozřejmě nebude fungovat takhle sám o sobě, je potřeba se připojit k databázi atd. V $pdh jsem předpokládal objekt připojení k databázi, třeba výsledek volání
$dbh = new PDO('mysql:host=localhost;dbname=db', 'user', 'pwd');
Podívejte se na dokumentaci PHP Data Objects.

ScheRas avatar 2.3.2012 16:23 ScheRas | skóre: 16
Rozbalit Rozbalit vše Re: Kontrola sql dotazu v php
Tak čistě teoreticky by uživatel mohl dále zadávat ono "I<3you", ale muselo by se při porovnávání s db také použít htmlspecialchars(). Ale ve výsledku je to tady zbytečné používat samozřejmě.
2.3.2012 16:48 Kit
Rozbalit Rozbalit vše Re: Kontrola sql dotazu v php
Teoreticky ano, ale jako záznam v DB by to vypadalo dost blbě. Dále by se s tím obtížně pracovalo, pokud bychom někde potřebovali původní string, například při výpisu do textového souboru. Pokud bych chtěl jen první 2 znaky, místo očekávaného "I<" bych dostal "I&". Pokud bych měl limit délky jména na 8 znaků, "I<3you" by se de facto zkrátilo na "I<3yo" apod.

Funkce htmlspecialchars() slouží k ošetření výstupu řetězce do HTML.
ScheRas avatar 3.3.2012 00:37 ScheRas | skóre: 16
Rozbalit Rozbalit vše Re: Kontrola sql dotazu v php
Jak říkám, použití htmlspecialchars() není na místě. Prostě jsem se soustředil pouze na to, říct, jestli je to v pohodě ošetřený a neřešil jsem, jestli je na místě použít zrovna tuto escapovací proměnou.
xkucf03 avatar 3.3.2012 00:22 xkucf03 | skóre: 45 | blog: xkucf03
Rozbalit Rozbalit vše Re: Kontrola sql dotazu v php
Ve výsledku je to hlavně špatně, protože máš pak databázi zasviněnou daty ve formátování pro jeden konkrétní výstup (HTML).

BTW: Bohužel tu mám po ruce jeden software za X milionů, kde to experti přesně takhle udělali – výsledkem je, že systém odesílá e-maily a v jejich předmětech (nebo i jinde) jsou HTML entity :-/ Což samozřejmě žádný poštovní klient neinterpretuje jako původní znaky, protože v e-mailu se zapisují jinak než v HTML.
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-Výuka.cz, Nekuřák.net
2.3.2012 15:34 Kit
Rozbalit Rozbalit vše Re: Kontrola sql dotazu v php
Trochu bych to zkrátil, protože htmlspecialchars() se používá na výstupu a rozhodně se nezapisuje do pole $_POST.
$query = "INSERT INTO `registrace`
  (`name`, `last`, `pass`, `datum`, `status`) VALUES
  ('".mysql_real_escape_string($_POST['name'])."',
  '".mysql_real_escape_string($_POST['last'])."',
  '".mysql_real_escape_string($_POST['pass'])."',
  NOW(),0);";
Ovšem parametrizovaný dotaz by vypadal mnohem lépe a bezpečněji.
2.3.2012 22:06 Orlando
Rozbalit Rozbalit vše Re: Kontrola sql dotazu v php
Parametrizované dotazy vypadají opravdu zajímavě - leč to obnáší další učení a učení na které nemám momentálně čas a hlavně si nemůžu dovolit nějaky bug před dokončením aplikace. Jinak člověk se učí celý život ale co by mě hodně moc pomohlo, jo to, že kdyby byl někdo tak hodný a nastínil mě jak může někdo pomocí formuláře smazat mysql, nevěřím, že to je vážně tak jednoduché :-( Zase kdybych věděl jak to funguje, jistě bych jinak přemýšlel nad bezpečností. Problém je v tom, že google na takové dotazy zarytě mlčí :-( Sice jsem něco našel na WIKI ale to jsou spíše hodně povrchní nic neříkající informace. Opravdu bych přišel o data. Jinak hrozí opravdu jen ošetření dat které odesílá uživatel? Jiná hrozba není? Díky za pomoc.
2.3.2012 22:32 Kit
Rozbalit Rozbalit vše Re: Kontrola sql dotazu v php
Parametrizované dotazy mi umožnily zahodit učení o obskurním ošetřování vstupů různými mysql_real_escape_string() a jinými funkcemi závislými na použité databázi.

Smazání databáze přes formulář jsem viděl v reálu a není to ani moc složité. Ovšem popisovat to nebudu, protože díky systematickému používání parametrizovaných dotazů mě to už přestalo zajímat.

Hrozeb je samozřejmě víc. Stačí, když se někomu v důsledku chyby v aplikaci vytratí z SQL dotazu při mazání záznamu WHERE i s podmínkou apod.
xkucf03 avatar 3.3.2012 00:29 xkucf03 | skóre: 45 | blog: xkucf03
Rozbalit Rozbalit vše Re: Kontrola sql dotazu v php
jak může někdo pomocí formuláře smazat mysql
Takhle: Maminčiny exploity :-)

Útočník využije dvou tvých chyb:
  • Stačí na jediném místě zapomenout správně escapovat vstup.
  • Nerespektuješ zásadu minimálních práv: každý subjekt (v tomto případě aplikace resp. uživatel, pod kterým pracuje) by měl mít pouze ta práva, která skutečně potřebuje. Aplikace obvykle nepotřebuje mazat tabulky, často ani nepotřebuje mazat data v těch tabulkách – proto by ani neměla mít příslušná práva.
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-Výuka.cz, Nekuřák.net
3.3.2012 16:00 Orlando
Rozbalit Rozbalit vše Re: Kontrola sql dotazu v php
To máte sice pravdu, ale na druhou stranu jestli zakážu v mysql mazání dat nic nevyřeším, jelikož pokud mi útočník db smaže, nebo ji přepíše nějakými nahodnými znaky bude ve finále úplně jedno, v obou případech následuje konec! Jelikož přepisování dat aplikace umožňovat musí... Co by pomohlo, nebo aspoň minimalizovalo problém by bylo to, že by šlo nastavit každé tabulce jiné práva, ale toho se obávám, že to asi nejde... :-(
xkucf03 avatar 3.3.2012 17:02 xkucf03 | skóre: 45 | blog: xkucf03
Rozbalit Rozbalit vše Re: Kontrola sql dotazu v php
Vždyť taky na každou tabulku můžou být jiná práva – některé budou jen pro čtení, jiné budou i pro zápis a některé třeba nepůjdou ani číst a bude se k nim přistupovat jen přes uložení procedury. Některé databázové systémy dokonce umožňují nastavovat práva pro jednotlivé sloupečky.

Jinak co se týče smazání dat, tak existuje jednoduché řešení – zálohovat.

Neříkám, že je to všespásné – nějaká práva aplikace potřebuje a ta se dají zneužít, pokud získá útočník přístup – ale přesto se tuhle zásadu vyplatí dodržovat.
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-Výuka.cz, Nekuřák.net
3.3.2012 09:55 Filip Jirsák | skóre: 66 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Kontrola sql dotazu v php
Myslím, že naučit se používat parametrizované dotazy a použít je bude nakonec rychlejší, než kontrolovat veškerý starý kód na správné použití escapovacích funkcí. A jako bonus získáte přehlednější a snáze udržovatelný kód a mnohem větší jistotu, že máte přístup k databázi ošetřen správně.

A příklad, co se může stát? Když vám někdo do formuláře vyplní do políčka name text "Pepa", je to něco, s čím počítáte a z čeho vznikne následující dotaz:
INSERT INTO `registrace` (`name`, `last`, `pass`, `datum`, `status`)
  VALUE ('Pepa', 'Novák', 'neřeknu', NOW(), 0)
Taky vám tam ale může vyplnit tohle:
', 'Novák', 'neřeknu', NOW(), 0); DROP DATABASE;  -- 
A pak dostanete (bez escapování) tenhle příkaz:
INSERT INTO `registrace` (`name`, `last`, `pass`, `datum`, `status`)
  VALUE ('Pepa', 'Novák', 'neřeknu', NOW(), 0);
DROP DATABASE;
  -- ', 'Novák', 'neřeknu', NOW(), 0)
Záleží pak na tom, co dělá escapovací funkce -- ale pokud se přes ni podaří protlačit data, aby dala takovýhle výsledek, provede se dotaz úplně stejně. Ta escapovací funkce je přitom závislá na spoustě věcí -- verze MySQL databáze, kódování vstupu a výstupu atd. Těžko to bude ve všech kombinacích fungovat správně jen tak bez nějakého dalšího nastavování. Takže náhodný kolemjdoucí, který jen zkusí zadat jednu variantu textu do formuláře, vám databázi asi nesmaže, ale pokud bude mít někdo motivaci, zjistí si verzi databáze, PHP, kódování vstupů a výstupů, má už mnohem větší šanci na úspěch.
3.3.2012 15:48 Orlando
Rozbalit Rozbalit vše Re: Kontrola sql dotazu v php
Hm, bez urážky, jestli jsem to dobře pochopil tak říkáte tohle?
User vyplnil text Pepa

formulář bude tedy vypad takto
<input type="text name="name" value="Pepa" /">

a v php dostanu tohle
echo $_POST['name']; // Pepa
ale taky to může být takto
User vyplnil text ', 'Novák', 'neřeknu', NOW(), 0); DROP DATABASE;  -- 

formulář bude tedy vypad takto
<input type="text name="name" value="', 'Novák', 'neřeknu', NOW(), 0); DROP DATABASE;  -- " /">

a v php dostanu tohle
echo $_POST['name']; // ', 'Novák', 'neřeknu', NOW(), 0); DROP DATABASE;  -- 
Pochopil jsem to správně? Jestli ano tak k tomu mám dvě věci (z pohledu lajka)
1) znaky ',()0;- nemají ve jménu co dělat //lenost programátora
2) aby tohle uhodl, musel by být kouzelník 
Pokud to tedy shrnu, tak pokud programátor ošetří třeba pomocí reg. výrazu input name jake znaky může user použít, tak nemusí již dál nic řešit, jelikož útočník nemá sebemenší šanci se nějak nabourat. Ale třeba se mi snažíte říct něco úplně jiného a já to nepochopil. Děkuji

xkucf03 avatar 3.3.2012 17:15 xkucf03 | skóre: 45 | blog: xkucf03
Rozbalit Rozbalit vše Re: Kontrola sql dotazu v php
znaky ',()0;- nemají ve jménu co dělat //lenost programátora
Tohle je až druhotný problém. V první řadě nesmíš dovolit, aby se vstup od uživatele vykonával jako SQL dotaz – smí být pouze parametrem dotazu, který jsi napsal a zkontroloval ty. Tohle je základ.

Jestli kontrolovat povolené znaky a dělat nějaká další omezení, to je věc druhá – nicméně to se nedělá (nemělo by) kvůli bezpečnosti (tu zajistíš viz výše), ale kvůli nějakému většímu pořádku v datech – např. zakážeš mezery, aby uživatel nenacpal jméno a příjmení do jednoho políčka a správně je rozepsal do dvou. Taky můžeš omezit znaky na A-Ž. Jenže pak ti tam přijde člověk např. s francouzským jménem a tam jsou i jiné znaky, takže se nebude moci registrovat. A podobné zbytečné problémy, na které sis sám zadělal. Tahle omezení doporučuji stanovovat s rozvahou a nestavět na nich bezpečnost – ta by měla stát na těch parametrizovaných dotazech.

A další věc je výstup aplikace – v případě webové je to (X)HTML – tam je potřeba zase ošetřit znaky, aby útočník do tvé aplikace nevložil např. svoje JavaSkripty. Sice když omezíš znaky ve jméně na A-Ž, tak tam skript nevloží, ale je to špatné řešení – spolehlivé je všechny výstupy escapovat – buď ručně voláním funkce nebo použít nějaký šablonovací nástroj. To je spolehlivé a opět je ti jedno, že někdo do jména zadal jakkoli nesmyslné znaky – stránku ti to nenaruší a ostatní uživatele neohrozí.

aby tohle uhodl, musel by být kouzelník
Najdi si něco o „SQL injection“ – skutečně to takhle chodí a útočník nemusí být kouzelník – hodně věcí je předvídatelných a zbytek se dá dohledat postupným zkoušením – když někdo takhle zprasí aplikaci, tak často taky neskrývá chybové hlášky, tzn. zobrazí se chybová hláška, kterou vyplivla SQL databáze – a z ní útočník získá další zajímavé informace. Pak je tu schéma, ze kterého zjistí názvy tabulek a sloupečků atd.
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-Výuka.cz, Nekuřák.net
3.3.2012 17:44 Filip Jirsák | skóre: 66 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Kontrola sql dotazu v php
znaky ',()0;- nemají ve jménu co dělat //lenost programátora
Nojo, ale vždyť vy to tam nikde ošetřené nemáte.
aby tohle uhodl, musel by být kouzelník
Nemusel. MySQL při některých nastaveních zkonvertuje kdeco do kdejakého sloupečku, spousta sloupců může mít povolenu hodnotu NULL, mají výchozí hodnoty -- takže může stačit uhodnout počet sloupců, což je na pár pokusů. Zvlášť když budete chybové zprávy vypisovat do stránky.
3.3.2012 18:15 Kit
Rozbalit Rozbalit vše Re: Kontrola sql dotazu v php
formulář bude tedy vypad takto
<input type="text name="name" value="', 'Novák', 'neřeknu', NOW(), 0); DROP DATABASE;  -- " /">
Formulář tak rozhodně vypadat nebude. To je jen naivní představa některých vývojářů. Možná to tak prezentuje nějaký debugger.
1) znaky ',()0;- nemají ve jménu co dělat //lenost programátora
To bych chtěl vidět, jak to chceš ošetřovat. Proč by někdo nemohl mít v nickname "0"? Které z několika desítek tisíc znaků jsou podle tebe závadné? Rozhodně jsi všechny nevyjmenoval.
2) aby tohle uhodl, musel by být kouzelník
Takového "kouzelníka" jsem viděl při akci. Ani nebyl moc znalý ani šikovný, ale v druhém panelu si otevřel nějakou stránku s nápovědou a bylo to.
Pokud to tedy shrnu, tak pokud programátor ošetří třeba pomocí reg. výrazu input name jake znaky může user použít, tak nemusí již dál nic řešit, jelikož útočník nemá sebemenší šanci se nějak nabourat.
Tak takový regulární výraz bych chtěl vidět. Navíc tím poškodíš i to, co poškodit nesmíš. Například velmi často se ve jméně vyskytuje apostrof. Když to změníš, tak si někdo může stěžovat. Nebo snad chceš dotyčnému vystavit občanku s backslashem před apostrofem ve jméně?

Také jsem si nechal jedno "nedobytné" fórum rozbít od jednoho testera. Povedlo se mu to 3x, počtvrté už ne. Ovšem stále jsem neměl plnou jistotu, že mám ošetřeno všechno. Těch znaků, které mi to fórum úspěšně demolovaly, bylo mnohem víc, než zmíněné ',()0;-.

Nakonec neošetřuji žádné a tester to vzdal. Stačilo použít parametrizované dotazy a už si neškrtl. Kód programu se zkrátil a zjednodušil. Co víc si přát?
2.3.2012 22:09 Orlando
Rozbalit Rozbalit vše Re: Kontrola sql dotazu v php
Jinak se naskýtá otázka, je programování v php budoucnost, když si to samo php nedokáže ohlídat? A jistě za ty léta ví kde je zakopaný pes....
2.3.2012 22:16 Kit
Rozbalit Rozbalit vše Re: Kontrola sql dotazu v php
Ale PHP si to dokáže ohlídat velmi dobře. Stačí použít ovladač MySQLi nebo PDO. Původní ovladač MySQL se drží už jen z historických důvodů, na nové projekty se nepoužívá.
xkucf03 avatar 3.3.2012 00:33 xkucf03 | skóre: 45 | blog: xkucf03
Rozbalit Rozbalit vše Re: Kontrola sql dotazu v php
Ale tyhle chyby můžeš dělat v libovolném jazyce – žádný ti nezabrání v tom, aby sis SQL řetězec „poslepoval“ z neošetřených vstupů a poslal do databáze. PHP má parametrizované dotazy už pěknou řádku let. Takže jakkoli můžu mít k PHP výhrady, tohle není jeho chyba, ale chyba programátorů – bastlířů.
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-Výuka.cz, Nekuřák.net
3.3.2012 09:38 Filip Jirsák | skóre: 66 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Kontrola sql dotazu v php
Samo PHP neví, co chcete udělat. Pokud nějak poskládáte SQL příkaz a předáte ho PHP k provedení, PHP očekává, že ten příkaz chcete provést, a nemá šanci poznat, jestli mu nepředáváte nějaký příkaz, který ve skutečnosti provést nechcete.

Jenže vy ve skutečnosti nechcete skládat různé SQL příkazy, chcete provádět stále jeden a týž příkaz a jenom měnit jeho parametry. A k tomu právě slouží MySQLi nebo PDO. Pak už si to PHP dokáže ohlídat, protože mu dáte zvlášť příkaz a zvlášť parametry, takže může zajistit, aby parametry nebyly interpretovány jako nějaký příkaz.

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.