Category Archives: Vyvoj

SQL injection a jiná zvěrstva

Obrátil se na mne klient s prosbou o pomoc při dokončení a rozjetí jejich fungl nového informačního webu. Web jim komerčně (to je v tomto kontextu důležité) programoval nějaký, pravděpodobně nezávislý, vývojář. Web je dokončený (prezenční i administrační část) a požadavkem byla pomoc při revizi současného řešení, optimalizaci, správě reklamních pozic a podobné rutinní záležitosti. Původní vývojář prý totiž ke konci projevoval jistou neochotu a nespolehlivost při řešení poptávaných zadání.

Nutno podotknout, že klient je v tomto směru pole neorané. Jeho představa, že si zaplatí vytvoření webu a je prakticky vše hotovo byla roztomile naivní. Abych rozvedl tu představu: klient si myslel, že lidi tam přijdou sami, že obsah webu se snese z nebe a celé to bude samo od sebe generovat velké zisky. I když na tom posledním něco  je: web ještě není produkční, ale reklamní pozice josu již do jedné rozprodány.

S tímto vědomím jsem vstupoval v jednání, vyžádal si podrobnější informace o projektu a podíval se dané aplikaci na zoubek.

A nyní přijde pointa:

  • do administrace jsem se přihlásil nejprimitivnější formou SQL INJECTION, tedy: ‘ OR 1=1 —
  • laborováním s číselnými paramertry v URL jsem dokázal na straně databáze provádět parádní kouzla
  • při chybě v SQL dotazu se tento i s popisem chyby od mysql serveru naférovku vypsal
  • pri testování XSS a vložení kusu JavaScriptu do kontaktního formuláře jsem rozhodil celou administraci
  • hesla adminů v administraci se vypisovala čistě plaintextově
  • … o tom, že v HTML byla hromada chyb a web nesplňoval ani základní SEO praktiky se asi nemá pod tíhou skutečností výše cenu zmiňovat …

Nutno říct, že uvedené problémy byly jen první čtyři checky, jenž mě z fleku napadly, a všechny dopadly pozitivně resp. negativně.

Byl jsem silně v šoku. Web na první pohled vypadá profesionálně. Moderní layout, stavba HTML na první pohled nevypadala špatně .. s layoutem administrace (celé se to tváří jako Windows Vista) si někdo taky silně vyhrál. A pak tohle. Já to nechápu. Jak si někdo za takto odvedenou práci může brát peníze? A taky si říkám, jakou roli v tomto ohledu asi hrál fakt, že klient dané problematice rozumí na úrovni nula? Že by prodané pozlátko shnilé uvnitř?

Na závěr dvě poznámky:

  1. Vývojář klientovi za úplatu poskytuje také hostingové služby. Když vidím jak vypadá aplikace, je otázkou, jak je na tom zabezpečení hostingu. Ještě jsem to nezkoušel.
  2. Hledání chyb na cizích webech mně baví 🙂

Dodatek (aneb co mně velmi, velmi pobavilo):

"The requested URL /admin/virtualsecurity.php was not found on this server."

Dogmata, absolventi a kvalita výuky

V profesním světě mám několik dogmat. Rád je barvitě sděluji svému okolí, které se mně často ptá na rady jak toto či tamto. Víceméně se jimi i řídím, od toho je v podstatě mám. Jaká jsou to dogmata? Tak tedy:

  • Nikdy (nikdy!) se nespoléhat  na neověřené zdroje a nezadávat jim důležitou práci
  • Nic nedělat ad hoc – plánovat, analyzovat, projektovat (dobře, toto moc neplatí na soukromé projekty …)
  • Vždy počítat s dostatečným časem na testování a ladění (z praxe to se vším všudy bývá plus polovina vývojového času)
  • Vytvářet bezpečné a funkční aplikace
  • Využívat framework(y) a nepsat duplicitní bloky kódu

Teorie hezká. V praxi se občas nebere zcela vážně (kovářova kobyla), ale má své místo. Nicméně jsem si nedávno nad nedodržením výše uvedeného pěkně rozbil tlamu. Začalo to prvními dvěma body, ostatní se k tomu pěkně přisypaly.

Tvořil jsem projekt (soukromý, u jiného bych si to pochopitelně netroufl) na který bylo extrémně málo času (obecně, já na to neměl čas vůbec). Odzkoušený (známý) grafik dodal návrhy, ty se schválily a já řešil co dál. Muselo to být rychle, já neměl čas, všichni vývojáři v mém okolí neměli špetku času. Grafik se nabídl s tím, že má kamaráda (spolubydlícího) který studuje ČVUT a byl by schopný to převést z obrázku na web. Postupem jsme to rozšířili také o oživení kompletního webu plus primitivní CMS. Výhodou bylo, že si to ti dva šmoulové mohli vyřešit pěkně spolu (spolubydlící) a já měl dostat hotový produkt bez námahy a složitého domlouvání (kodér vždy nadává na grafika kvůli tomu, že nepočítá se všemi možnostmi a programátor na kodéra …).

Takový byl plán. Z počátku to mělo dobrý tón, HTML šablony spolu s relativně komplexním JS fungovaly (do kódu jsem raději moc nekoukal, byl ostudný) ale budiž, tam cílovka koukat nebude.

Vše se začalo komplikovat s prvními verzemi oživeného webu. Pomyslná kudla mi prořezala kapsu skrz na skrz. Vygradovalo to ve chvíli, kdy jsem mailem dostal hotovou verzi v zipu. Co bylo v dodané outsorcované práci tak špatně?

  • Ještě nikdy jsem neviděl odpornější kód.
  • Žádný framework, žádná DB třída, html vypisované pomocí echo, české názvy proměnných (někdy i ve skloňovaných variantách).
  • Url klasickým odstrašujícím způsobem: “page=sekce” a nasledně include(xxx/sekce.php) (bez ochrany!).
  • V každém modulu (page=) zvlášť (!) připojení do databáze (i přes použití centrálního nastavení konstant pro DB připojení stejně na několika místech natvrdo).
  • Přibližně 60% duplikovaného kódu
  • Pro jazykovou mutaci je nutné vytvořit paralelně kopii skriptu (page) s veškerým funkčním kódem a HTML

A jako třešnička:

  • Používání session proměnných stylem register_globals=on

To poslední mi pěkně zamotalo hlavu. Dělal jsem na webu vlastnoručně úpravu (potřeboval jsem z DB získat do skriptu o jeden sloupeček více) a vedlejším efektem bylo, že se každý návštěvník “automaticky” přihlásil (přepsání globální proměnné) rovnou s administrátorskými právy. Fajn.

Asi není třeba příliš poukazovat na efekt, že jsem s tím měl nakonec mnohem více práce, než kdybych si to vyřešil sám (a to beze srandy). Následující dva týdny jsem denně přicházel na špeky a disfunkce, které jsem pečlivě reportoval a den co den instaloval nové dodané verze. Navíc to vůči partnerům bylo silně neprofesionální. Přijít na prezentaci aplikace na to, že funguje silně náladově, není zrovna ideální. Vyčerpávající.

Mám z toho všeho dva dojmy. Za prvé: už nikdy nezadám práci neověřenému externistovi (jasně, to už tu bylo). Za druhé (a to je hlavní): jsem v šoku z kvality absolventů. Jistě, člověk může argumentovat, že z jedné špatné zkušenosti nelze soudit. Faktem je, že mám ve svém okolí hned několik známých, kteří zmíněnou školu a konkrétně mě profesně známé obory studují. Častokrát jsem jim pomáhal řešit úlohy do školy. Když jsem ale na vlastní oči (a zkušenost) viděl (zažil) co je tam učí za pakárny, bylo mi mdlo.

Vyučující totiž nedbají na žádný styl. Neznají coding style. Sami někdy ani nerozumí probírané problematice. Oblíbenou formou výuky je funkční rozšíření předané základní verze aplikace (vytvořené vyučujícím). Tato aplikace však v mnoha případech ani nefungovala (když už, tak nikdy ne zcela korektně) a nesla všechny příznaky popsané v bodech výše.

Achjo. Chápu, že profík který si díky své profesionalitě dokáže slušně vydělat nepůjde učit za almužnu. Ale ti, co předávají znalosti by měli mít alespoň nějakou úroveň. Jsem v tomto ohledu rád, že jsem se v tomto oborou nějaké VŠ vyhnul, a veškeré své aktuální know how jsem si nabyl metodou pokus/omyl sám, nebo od profesně zdatnějších kolegů z oboru. To je totiž ta nejlepší škola.

ifarma slaví první narozeniny

Už jsem se dlouho nechválil, a nezapíjel mnohé úspěchy. To vše na úkor dalšího a dalšího hnaní za dalšími a dalšími vytyčenými cíly.

Tentokrát se však přeci jen s jedním úspěchem podělím. Je to právě rok, co jsme spolu se sveekem vdechli život projektu ifarma.cz. A jaká tedy je vůbec bilance tohoto projektu po roce zdárného fungování?

Prvním měřítkem je tento sympatický graf měsíční návštěvnosti:

ifarma, graf návštevnosti

Graf je to jistě pěkný, ale bez měřítka nepříliš vypovídající. Druhým měřítkem budiž hranice denních unikátních návštěvníků překročená včera. Tato hranice jest 16.500 UV.

Pomyslné nádoby cílů byly naplněny, a věřím, že budou ještě velice dlouho přetékat :).

Opět něco málo ifarmy …

Víte jak se pozná zatížená databáze?

Takhle:

“Sloupec votes byl odstraněn (Dotaz zabral 220.4247 sekund)”

Aneb, když jsem se k večeru, po proběhlé návštěvnostní špicce, rozhodl udělat pořádek ve struktuře databáze.
Velikost našeho datového úložiště (mysql) se momentálně nezadržitelně blíží k 1GB, v nedohlednu je můj skromný plán ukládat články bez datumového omezení 🙂

Zvolávám sláva, ó mocná memcache!

ifarma a její puberta

Náš ďábelský GondikoSveekovský projekt pomalu dospívá a vychytává poslední provozní háčky.
To byste ani nevěřili, jaké všechny balasty se mohou v bežných RSSkách webů vyskytovat… Sláva standardům!
Pár dní mi trvalo, než jsem řádně vychytal logaritmus pro perfektní odstranění všemožných ošklivých znaků, a převádění čehokoliv do utf8 a pod.
Háčkem velkým ovšem teď zůstává lemmatizace – aneb převádění kdejakých pádů českých slov na jejich infinitivy. Co tím získám? Perfektní klíčová slova generovaná z titulků a a důmyslné vyhledávání v rozsáhlé databázi. 🙂