Bezpečnostný checklist skúseného programátora
Online verzia nášho ťaháku , podľa ktorého si môžeš skontrolovať, či tvoj projekt spĺňa základné bezpečnostné zásady a požiadavky. Aktuálne pracujeme na jeho rozšírení o ďalšie témy - ak chceš vedieť, kedy bude update online, sleduj naše sociálne siete.
Výber softvéru (programu, knižnice, aplikácie)
Používaš na vývoj správny softvér? Mal by byť jednoduchý, spoľahlivý, efektívny (rýchly a s malou spotrebou RAM), mať pravidelné aktualizácie a nevyžadovať na svoj chod ďalšie programy. Ako ho spoznáš?
Je obsiahnutý v inštaláciách distribúcii ako CentOS, Fedora, Debian a pod. Takéto balíčky používa veľa ľudí a ich bezpečnosť je preverená ďalšími vývojármi - odborníkmi.
Má webovú stránku s možnosťou hlásenia chýb a archív stiahnutí starších verzií.
Je dostupná jeho EOL verzia s dlhodobou podporou.
Má aktívny vývoj a viac vývojárov. Skontrolovať si to môžeš napr. podľa posledných commitov.
Nemá priveľa otvorených chýb bez riešenia.
Je open source alebo má otvorenú licenciu. Takto je väčšia pravdepodobnosť, že ho firma odrazu nezruší. Pri closed source aplikácii sa môže stať, že sa nenájde nový vývojár, ktorý by ďalej riešil jej údržbu, a tým pádom appka zaniká.
Nemá závislosti. Funguje samostatne, bez potreby doinštalovania ďalších programov na jej prevádzku. Ak tieto závislosti existujú, neinštaluj ich cez pip/npm, ale radšej požiadaj o inštaláciu z distribúcie. Pozor, každú ručne doinštalovanú knižnicu treba pravidelne aktualizovať a sledovať, či k nej nepribudli ďalšie závislosti.
Poverenia, dáta, autentifikácia
Databáza
Skontroluj si fungovanie zálohovania. Nastav čo najnižší interval, nikdy nevieš, kedy sa niečo pokazí doslova z minúty na minútu. A vyskúšaj si aj to, či vieš zálohu bez problémov obnoviť. Bude ti na nič, ak ju nedokážeš nasadiť späť.
Je tvoj projekt v súlade s aktuálnym GDPR? Pozri si pre istotu aktuálny zákon o ochrane osobných údajov (zvykne sa meniť) a uprav, čo treba, ešte teraz. Pomôže ti to vyhnúť sa mastnej pokute.
Ako sú na tom používateľské heslá? Zahashované? Použi napríklad bezpečný algoritmus bcrypt.
Uchovávaš niekde citlivé údaje v celom znení (emaily, adresy…), napríklad kvôli newsletteru? Ak ich už musíš mať, vytvor si ešte aj zoznam všetkých miest, kde sa nachádzajú (mailchimp databáza, office dokument, šanón v druhej zásuvke). Je to užitočné v prípade útokov aj úradných kontrol.
Zabráň SQL-injection. Skontroluj si použitie správnych príkazov. Napríklad ak používaš NPM, nedávaj tam npm-mysql ale nasaď npm-mysql2, ktorý podporuje “prepared statements”.
Aplikácie
Nepoužívaj innerHTML - ak chceš upravovať obsah HTML, použi radšej textContent, innerText alebo setHTML().
Keď je pre teba dôležité zobraziť content ako HTML kód, predtým, ako upravíš DOM, poriadne vstup verifikuj a to napríklad pomocou opensource knižnice DOMPurify a jej funkcie sanitize().
Ak máš nasadený React, vyhni sa bezhlavému používaniu property dangerouslySetInnerHtml.
Dáta kontrolované používateľom zakóduj - zabrániš tým exekúcii škodlivých kódov HTML parserom pri zobrazení v aplikácii. Ak používaš jeden z pokročilejších frameworkov, ako React, máš čiastočne vyhrané - tie už disponujú automatickým escapovaním a kódovaním.
Nezabudni na ochranu proti botom a všetky formuláre ošetri reCaptchou.
Pred odoslaním používateľských vstupov na server dáta prečisti od potenciálnych škodlivých častí kódu (je to napr. aj ochrana proti SQL Injection). Najjednoduchší spôsob, ako to docieliť, je opäť pomocou DOMPurify.sanitize().
Skontroluj si aj chybové hlášky. Na produkcii z nich vyhoď detaily, ktoré môžu hackeri zneužiť, a vypni tu aj debug. Namiesto toho nastav detailný zápis do logov pre správnu diagnostiku. Osobné informácie o používateľoch odtiaľ ale radšej vynechaj.
Maj správne cookies. Ak obsahujú citlivé dáta, musia byť nastavené ako httpOnly.
Nastav si striktnú Content Security Policy (CSP). Nikdy never všetkému, čo odošle server - nastav CSP hlavičku a striktne kontroluj zdroje, ktoré môže tvoja appka načítať.
Chráň v hlavičkách. V odpovediach klientov používaj hlavičku X-XSS-Protection, prípadne to pokry striktne definovanou CSP so zákazom využívania inline JavaScriptu. Tiež nezabudni na použitie CSRF tokenov.
Nepoužívaj GET s citlivými údajmi alebo tokenmi v URL , pretože sa logujú na serveri a proxy.
Definuj, ktoré externé súbory je možné na stránku doťahovať a odkiaľ. Pokiaľ na to nemáš nástroj, využi štandardné pravidla zo `same-origin policy`.
APIs
Cloud a Server
Tipy na záver
Zdroje