Bezpečnosť
MNews 2 je na svete už 11 dní, dúfam, že všeobecne panuje spokojnosť s novými funkciami a novým vzhľadom. Verím, že sa nám podarilo dlhým obdobím testovania vychytať všetky výraznejšie chyby, ktoré sa mohli vyskytnúť, svedčia o tom aj vo väčšine pochvalné komentáre. Dnes nepíšem článok s konkrétnym návodom, či dokonca novou verziou, dnes by som chcel spísať len pár mojich poznámok k 2ke ohľadom bezpečnosti. Bude to veľa nudnej teórie, ale snáď to niekoho zaujme
Bezpečnosť funkcií
Aj keď sa programovaniu venujem len na amatérskej úrovni, vo voľnom čase, už od prvej verzie sa snažím dbať na bezpečnosť v maximálnej možnej miere. Snažím sa nezabudnúť na nijakú blbosť, ktorá by mohla systému uškodiť a v súčastnosti hľadám aj niekoho skúsenejšieho, kto by systém prevetral úplne, aby som si mohol byť istý na 99% (na stovku si nemôže byť nik istý). V texte bude veľmi často spomínaný hash, či hashovacia funkcia, pokiaľ netušíte čo to je, viac sa dozviete napríklad na wikipedii.
Už od prvej verzie MNews sú napríklad heslá hashované pomocou funkcie sha1 (silnejšia obdoba md5), takže je veľmi ťažké dostať tieto heslá z hashovanej do čitateľnej podoby. S novou verziou však prišli aj nové problémy a to v nových funkciách: trvalé prihlásenie, upload a zálohovanie.
Trvalé prihlásenie
Pred tým, ako som vytvoril túto funkciu som sa rozhodoval medzi 2 možnosťami: trvalé prihlásenie možné na viacerých počítačoch naraz, alebo trvalé prihlásenie možné len z jedného počítača. Nakoniec padlo rozhodnutie na obmedzenejšie, ale z môjho pohľadu bezpečnejšie riešenie - povolenie trvalého prihlásenia len z jedného počítača.
Táto funkcia je veľmi striktná a prísna, preto niekedy človek nadobudne aj pocit, že nefunguje. Pravdou je, že funguje až príliš presne, avšak na svoju funkcionalitu je prísna. Trvalé prihlásenie je totiž obmedzené množstvom faktorov, v krátkosti:
- do cookies sa ukladá login užívateľa a samostatne generovaný hash (do cookies sa neukladá žiadne samostatné heslo - ani v čitateľnej, ani v zahashovanej podobe)
- vygenerovaný hash sa skladá zo 4 častí (použitý prehliadač, zahashované heslo, čas prihlásenia, IP adresa), ktoré sú následne zahashované pomocou sha1 funkcie.
- pri prihlasovaní cez trvalé prihlásenie sú tak tieto časti porovnávané - tj musí sa zhodovať IP adresa a prehliadač, keď bol tento hash na trvalé prihlásenie vygenerovaný. Pokiaľ sa nezhoduje, systém užívateľa neprihlási a automaticky zruší možnosť ďalšieho trvalého prihlásenia s daným hashom.
- pri každom prihlásení cez túto funkciu je vygenerovaný nový hash, takže hash v databáze ostáva uložený len na čas nevyhnutne potrebný.
- ak sa prihlásite z iného počítača do systému, hash na trvalé prihlásenie sa zruší - tak aj keď sa vrátite späť k svojmu počítaču, trvalé prihlásenie už nebude fungovať.
Ako sami vidíte, funkcia je naozaj veľmi restriktívna užívateľovi dovolí prihlasovať sa len z jedného počítača. Myslím si však, že tieto obmedzujúce prvky prispievajú len k väčšej bezpečnosti pri použití tejto funkcie. Aj keby došlo ku krádeži cookie s hashom, tak trvalé prihlásenie nebude fungovať.
Vyskytli sa u vás nejaké problémy s touto funkciou? Ako sa vám páči? Dajte vedieť do komentárov!
Zálohovanie
Zálohovanie mala byť jednoduchá funkcia, ktorá umožní vytvoriť zip súbor, ktorý sa uloží na server, a v ktorom bude zabalený obsah adresára "data", aby pri prípadnom probléme sa údaje dali obnoviť zo zálohy. Až do verzie RC2 som nevidel žiadne bezpečnostné riziká, ktoré by mohli vzniknúť pri používaní tejto funkcie.
Zmenilo sa to, keď som sa rozhodol ochrániť adresáre, ktoré sa nachádzajú v adresári "data" a to tak, že do nich vygenerujem prázdny súbor index.html, aby nebolo možné prehliadať ich obsah. Zabránil som tak síce možnosti pozrieť si aj zoznam súborov v adresári "backups", kde sa ukladajú zálohy, avšak dovtedy vygenerovaný zip mal formát backup-yyyy-mm-dd.zip (y - rok, m - mesiac, d - deň). Nedal sa síce pozrieť zoznam súborov, avšak meno súboru so zálohou sa dalo veľmi ľahko uhádnuť a tak by si ktokoľvek stiahol zálohu a dostal sa ku kompletnej databáze článkov, užívateľov, ... Riešením bolo pridanie náhodného reťazca k názvu súboru. Generovaný zip súbor ma tak podobu backup-yyy-mm-dd-rrrrrrrrr.zip, kde rrrrrrrrr je 9 miestny, náhodne generovaný reťazec. Na priamy download zálohy tak musíte vedieť dátum jej vytvorenia a hodnotu reťazca. Alebo sa jednoducho prihlásite do administrácie ako admin a stiahnete si poslednú zálohu v sekcii zálohovania
Ostatné
Funkcia uploadu je klasickou, ničím zvláštnou funkciou, ktorá v súčastnosti len kontroluje, či zasielaný súbor je skutočne obrázkom (zisťuje na základe prípony a rozmerov obrázku). Plánuje sa ďalšie rozširovanie o ajaxový multiupload a upload média súborov (videá, flash, mp3) - až vtedy to začne byť zaujímavé.
Zvláštnou funkciou je aj zaheslovanie stránky - možnosť vstúpiť na vytvorenú stránku je buď po zadaní správneho hesla, alebo prostredníctvom pripísanie kľúča do url adresy. Kľúč je jedinečný pre každý deň, mení sa vždy o polnoci (napríklad ak niekomu chcete poskytnúť vstup na stránku bez toho, aby sa dozvedel heslo - taký blud, ktorý poteší). Viac o tejto funkcii sa dozviete pri upravovaní zaheslovanej stránky v sekcii Info.
Ak na jednej doméne máte MNews nainštalované 2 krát, len v iných adresároch, nemôžete sa pohybovať medzi týmito dvoma administráciami - MNews kontroluje, pre ktorú inštaláciu aká session platí. Dobrým príkladom je demo a administrácia na tejto stránke.
Nabudúce, ak bude mať opäť náladu sa rozpíšem o použiteľnosti, respektíve malých drobnostiach, na ktoré som sa snažil myslieť pri návrhu systému .
Komentáre
potrebuju poradit co se tyce editoru...na strankach pouzivam na pozadi cernou barvu a v editoru je jako pozadi bila barva da se to nejak zmenit ze bych nekde neco zmenil v nejakem souboru a bylo by cerne? Takhle nevidim svetle barvy pri editovani at uz clanku nebo stranek. Diky moc vsem za jakoukoliv pomoc
Stránku rieš pomocou CSS, tak nemusíš vždy upravovať farbu textu. Pozadie vo WYSIWYG editore sa nedá meniť
Sice nejsem ten expert, kterého hledáš (také jsem amatér), ale myslím si, že MNEWS je velmi dobře postavený a zabezpečený systém.