Bezpečnost pro vývojáře

From mediawiki.org
This page is a translated version of the page Security for developers and the translation is 100% complete.
Prezentace bezpečnostního inženýra Wikimedia Foundation Chrise Steippa z WMF Tech Days 2012

Jako vývojář MediaWiki máte odpovědnost za psaní zabezpečeného kódu ve stylu, který lze snadno kontrolovat a auditovat. Tento článek se zaměřuje na problémy související se zabezpečením a na osvědčené postupy používané vývojáři MediaWiki k řešení těchto bezpečnostních problémů. Pro problémy se stylem kódování si prosím přečtěte kódovací konvence MediaWiki.

Každý vývojář MediaWiki by si měl pozorně přečíst tento článek, bez ohledu na úroveň svých zkušeností s vývojem webových aplikací PHP, a pravidelně se s tímto materiálem seznamovat. Kromě toho by si každý vývojář měl pozorně přečíst články o Cross-site scripting (XSS) (skriptování napříč weby), Cross-site request forgery (CSRF) (falšování požadavků napříč weby) a SQL injection , z nichž každý poskytuje podrobnější vysvětlení každého těchto běžných typů zranitelnosti. Kontrolní seznam zabezpečení pro vývojáře poskytuje užitečný odkaz pro běžné vývojové úkoly.

Proč záleží na bezpečnosti

Zabezpečení webových aplikací je v kabelovém světě kritickým problémem. Webové stránky s chybami zabezpečení jsou klíčovou součástí nezákonné globální infrastruktury malwaru, spamu a phishingu. Pastevci botů procházejí web, hledají webové stránky s bezpečnostními chybami a poté je využívají k jejich zneužití. Unesená webová stránka bude návštěvníkům distribuovat malware (viry), a to buď prostřednictvím zranitelností prohlížeče, nebo otevřeně prostřednictvím sociálního inženýrství. Stažený malware promění počítač klienta v "zombie", který je součástí celosvětové sítě organizovaného zločinu zaměřeného na krádeže údajů o bankovních účtech, rozesílání spamu a vymáhání peněz z webových stránek s hrozbami odmítnutí služby.

Prokazatelné zabezpečení

Nestačí se ujistit, že jste perfektní a že váš kód nemá žádné bezpečnostní chyby. Každý dělá chyby. Veškerý základní kód MediaWiki a velká část kódu rozšíření MediaWiki je kontrolován zkušenými vývojáři, aby ověřili jeho bezpečnost. To je dobrá praxe a měla by být podporována.

Pište kód tak, aby byl prokazatelně bezpečný, takže recenzent může snadněji poznat, že je bezpečný. Nepište kód, který vypadá podezřele, ale po pečlivém prozkoumání je bezpečný. Takový kód způsobuje zbytečnou úzkost recenzentů.

Přehled bezpečnostních zranitelností a útoků

Tento dokument se silně zaměřuje na následující útoky a bezpečnostní rizika. Každý vývojář MediaWiki by měl být s těmito problémy obeznámen a měl by jim alespoň částečně rozumět.

Skriptování mezi stránkami (XSS)

Podrobné informace o tom, jak se vyhnout zranitelnostem XSS v MediaWiki, najdete v článku Skriptování napříč weby. Chyby zabezpečení cross-site scripting (XSS) umožňují útočníkovi vložit na web škodlivý kód. Chyby zabezpečení XSS jsou způsobeny tím, že webová aplikace správně neuniká daty z externích zdrojů (jako jsou GET data, POST data, RSS kanály nebo adresy URL). Rozsah útoků, které lze provést prostřednictvím XSS, je velmi rozmanitý, od neškodných žertů až po ukradení účtu ověřeného uživatele.

Primární obrana: Aby se zabránilo útokům XSS, základní principy jsou:

  • Ověřte svůj vstup
  • Escapujte svůj výstup

Můžete přeskočit ověření, ale nikdy nemůžete přeskočit escapování. Vše escapujte. Escapujte co nejblíže k výstupu, aby si recenzent mohl snadno ověřit, že to bylo provedeno.

Všimněte si, že kódování výstupu (escapování) je kontextově citlivé. Buďte si tedy vědomi zamýšleného výstupního kontextu a vhodně kódujte (např. entita HTML, URL, JavaScript atd.)

Cheat Sheet pro zkrácenou XSS prevenci OWASP je užitečný a aktuální rychlý referenční průvodce pro zmírnění problémů XSS.

Pokud píšete v JavaScriptu, ujistěte se, že rozumíte XS založené na DOM a jak tomu ve svém kódu zabránit.

Falšování požadavků mezi stránkami (CSRF)

Podrobné informace o tom, jak se vyhnout zranitelnostem CSRF v MediaWiki, si přečtěte v článku Falšování požadavků napříč weby . Útoky typu cross-site request forgering (CSRF nebo XSRF) využívají k autorizaci škodlivých požadavků HTTP ověřovací údaje uložené v prohlížeči oběti (jako je soubor cookie nebo uživatelské jméno a heslo uložené v mezipaměti). Škodlivý požadavek HTTP lze odeslat mnoha způsoby. Dokud jsou požadavky zpracovávány webovým prohlížečem, který má v mezipaměti ověřovací pověření, lze se pokusit o útok CSRF.

Primární obrana: Naším primárním obranným mechanismem proti útokům CSRF je přidání úpravy tokenů do formulářů HTML.

SQL injection

Pro podrobné informace o tom, jak se vyhnout SQL injection, si přečtěte SQL injection článek.

SQL injection se spoléhá na špatně ověřený vstup použitý v databázovém dotazu, což útočníkovi možná umožní spouštět libovolné SQL dotazy na vašem serveru. Útočník pak může být schopen získat soukromá data, zničit data nebo způsobit jiné nezamýšlené reakce. V nejhorším případě by vložený kód mohl útočníkovi umožnit získat plnou kontrolu nad systémem zneužitím několika zranitelností v databázovém serveru, systémových nástrojích a operačním systému.

Primární obrana: Primární obrana proti SQL injection je použití vestavěných databázových funkcí MediaWiki. Za každou cenu se vyhněte používání přímých SQL dotazů.

serialize() / unserialize()

unserialize() může vést ke spuštění libovolného kódu. Aby tomu vývojáři MediaWiki zabránili, měli by v novém kódu vždy používat json místo serializace php.

Primární ochrana: Použijte FormatJson::encode() a FormatJson::decode() místo nativní serializace PHP.

Historické

Související odkazy

Podstránky