Zabezpečení a uživatelský vstup
Uživatelská data, což je jakýkoli druh vstupu (data z webového požadavku nebo adresy URL, vstup do ovládacích prvků aplikace Microsoft model Windows Forms atd.), můžou nepříznivě ovlivnit kód, protože tato data se často používají přímo jako parametry pro volání jiného kódu. Tato situace je podobná škodlivému kódu, který volá váš kód s podivnými parametry, a měli byste přijmout stejná opatření. Uživatelský vstup je ve skutečnosti obtížnější zabezpečit, protože neexistuje žádný rámec zásobníku pro trasování přítomnosti potenciálně nedůvěryhodných dat.
Patří mezi nejmenší a nejtěsnější chyby zabezpečení, které je možné najít, protože i když můžou existovat v kódu, který zdánlivě nesouvisí se zabezpečením, představují bránu pro předávání chybných dat do jiného kódu. Pokud chcete tyto chyby vyhledat, postupujte podle libovolného typu vstupních dat, představte si, jaký rozsah možných hodnot může být, a zvažte, jestli kód, který tato data vidí, dokáže zpracovat všechny tyto případy. Tyto chyby můžete opravit prostřednictvím kontroly rozsahu a odmítnutí jakéhokoli vstupu, který kód nedokáže zpracovat.
Mezi důležité aspekty týkající se uživatelských dat patří:
Veškerá uživatelská data v odpovědi serveru se spouští v kontextu lokality serveru v klientovi. Pokud webový server vezme uživatelská data a vloží je na vrácenou webovou stránku, může například obsahovat <značku skriptu> a spustit ji jako na serveru.
Nezapomeňte, že klient může požádat o libovolnou adresu URL.
Zvažte složité nebo neplatné cesty:
.. \ , extrémně dlouhé cesty.
Použití zástupných znaků (*).
Rozšíření tokenu (%token%).
Podivné formy cest se zvláštním významem.
Alternativní názvy datových proudů systému souborů, například
filename::$DATA
.Krátké verze názvů souborů, například
longfi~1
prolongfilename
.
Mějte na paměti, že Eval(userdata) může dělat cokoli.
Dávejte pozor na pozdní vazbu na jméno, které obsahuje některá uživatelská data.
Pokud pracujete s webovými daty, zvažte různé formy úniků, které jsou přípustné, včetně:
Šestnáctkové řídicí panely (%nn).
Řídicí znaky Unicode (%nnn)
Řídicí panely overlong UTF-8 (%nn%nn).
Dvojité řídicí znaky (%nn se změní na %mmnn, kde %mm je řídicí znak pro %).
Dávejte pozor na uživatelská jména, která mohou mít více než jeden kanonický formát. Můžete například často použít formulář MYDOMAIN\username nebo uživatelské_jméno@mydomain.example.com formulář.