Security checklist for developers/cs

Tento dokument je poskytován jako doplněk k . Toto je seznam běžných vývojových úkolů a bezpečnostních opatření, která je třeba přijmout.



Bezpečnostní kontrolní seznam
{| class="wikitable" | ! Pokud pracujete s... ! získáte ...


 * valign="top" |
 * valign="top" |



Soubory cookie prohlížeče

 * valign="top" |
 * Snížení obav recenzenta použitím místo  ?
 * Načetli jste soubory cookie pomocí ?
 * Nastavujete cookies pomocí ?


 * valign="top" |
 * valign="top" |



Dynamické generování kódu
Nepoužívejte funkce jako  a   a také   modifikátor vzoru za. Přestože jsou tyto funkce výkonné a pohodlné, jsou ze své podstaty nejisté:
 * valign="top" |


 * Je snazší vkládat libovolné řetězce do textu zpracovaného regulárními výrazy, což – v kombinaci s modifikátorem vzoru  – může vést k útokům vkládání kódu.
 * Je těžší číst a udržovat kód, který je součástí řetězce.
 * Nástroje pro statickou analýzu nezachytí varování a chyby v kódu.
 * Mezipaměti operačních kódů (jako APC) nemohou ukládat kód smíšený do řetězců.
 * má někdy problémy se svozem odpadu.
 * Smyčka, která má uvnitř, vytvoří při každé iteraci novou funkci.

Někdy tyto funkce opravdu potřebujete (samozřejmě  potřebuje ke spuštění  ), ale ve většině případů bychom raději viděli funkci rozbitou a označovanou jako zpětné volání.

Inline funkce lambda usnadní vložení zpětného volání a zároveň si zachovají výhody kódu, který je napsán v nativní syntaxi namísto řetězců.


 * Cokoli externího, co se používá v části regulárního výrazu, by mělo být escapováno s preg_quote ($externalStr, $delimiter). Před každý znak, který je součástí syntaxe regulárního výrazu, vloží zpětné lomítko a uzavře také oddělovač zadaný jako druhý parametr:


 * valign="top" |
 * valign="top" |



Externí programy

 * valign="top" |
 * Spustil se program přes z jmenného prostoru  ?
 * Citoval všechny argumenty externím programům pomocí výše uvedených možností předávání bezpečných parametrů (což je v podstatě všechno kromě )?

Všimněte si, že staré /  se nedoporučují, protože vývojářům usnadňují přehlédnout escapování parametru.
 * valign="top" |
 * valign="top" |

Formuláře

 * valign="top" |
 * Použil  k zavedení opatření proti CSRF?
 * Použil při kontrole tokenu, aby se zabránilo útokům načasováním?
 * Snížili se obavy recenzentů používáním nebo rozšířením stávající funkčnosti formuláře MediaWiki?


 * valign="top" |
 * valign="top" |



Data GET

 * valign="top" |
 * Snížení obav recenzenta použitím  místo  ?


 * valign="top" |
 * valign="top" |



Výstup (API, CSS, JavaScript, HTML, XML atd.)
Jakýkoli obsah, který MediaWiki generuje, může být vektorem pro XSS útoky.
 * valign="top" |
 * Použili se pomocné třídy  a  ?


 * Snížili obavy recenzentů pomocí ResourceLoader k poskytování zdrojů CSS a JavaScript?
 * valign="top" |
 * valign="top" |



CSS poskytnuté uživatelem
CSS poskytnuté uživatelem (řekněme pro použití v atributu ) je třeba ošetřit, aby se zabránilo XSS a také aby bylo zakázáno vkládání sledovacích obrázků (prostřednictvím obrázku na pozadí) atd.
 * valign="top" |
 * Použijte metodu Sanitizer::checkCss pro jakýkoli css přijatý od uživatele, případně spolu s třídou Html.


 * U CSS poskytovaných rozšířením (a ne uživatelem) to není potřeba (a odstraní některé platné věci jako ). CSS poskytované rozšířením by však mělo být použito v šablonách stylů načtených ResourceLoader, nikoli v atributech.
 * valign="top" |
 * valign="top" |



Data POST

 * valign="top" |
 * Snížení obav recenzenta použitím  místo
 * Vždy ověřte, že všechna přijatá data POST odpovídají tomu, co očekáváte


 * valign="top" |
 * valign="top" |



Řetězce dotazů

 * valign="top" |
 * Viz #Data GET výše


 * valign="top" |
 * valign="top" |

Relace

 * valign="top" |


 * valign="top" |
 * valign="top" |

Reviewer anxiety

 * valign="top" |
 * Clearly added comments to explain unexpected or odd parts of your code?


 * valign="top" |
 * valign="top" |

SQL queries

 * valign="top" |
 * used MediaWiki's database wrappers?


 * }

Automated checking
Some of these issues can be checked with phan-taint-check-plugin, which is required for all MediaWiki code in Wikimedia production. This is of course just a tool, and it cannot detect all issue types, and may miss issues even in the issue types it can check for.