Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Toto téma obsahuje informace o aspektech zabezpečení souvisejících s prostředím Windows Shell. Tento dokument nemůže poskytnout vše, co potřebujete vědět o problémech se zabezpečením – místo toho ho použijte jako výchozí bod a odkaz na tuto konkrétní oblast technologií.
Prostředí řídí řadu důležitých aspektů systému, včetně několika, které představují potenciální bezpečnostní rizika, pokud nejsou řádně zpracovány. Toto téma popisuje některé z nejběžnějších problémů a jejich řešení ve vašich aplikacích. Mějte na paměti, že zabezpečení není omezeno na internetové zneužití. Ve sdílených systémech, včetně systémů, které jsou přístupné prostřednictvím Terminálové služby, musíte také zajistit, aby uživatelé nemohli dělat nic, co by mohlo poškodit ostatní, kteří sdílejí systém.
- správné instalace aplikace
- Shlwapi
- automatického dokončování
- ShellExecute, ShellExecuteEx a související funkce
- přesouvání a kopírování souborů
- psaní rozšíření zabezpečených oborů názvů
- výstrah zabezpečení
- související témata
Správně nainstalovat aplikaci
Většinu potenciálních problémů se zabezpečením prostředí je možné zmírnit správnou instalací aplikace.
Nainstalujte aplikaci do složky Program Files.
Operační systém Umístění Windows XP, Windows Server 2003 a starší CSIDL_PROGRAM_FILES Windows Vista a novější FOLDERID_ProgramFiles, FOLDERID_ProgramFilesX86, FOLDERID_ProgramFilesX64, FOLDERID_ProgramFilesCommon, FOLDERID_ProgramFilesCommonX86 nebo FOLDERID_ProgramFilesCommonX64. Konkrétní informace najdete v KNOWNFOLDERID. Neukládejte uživatelská data do složky Program Files.
Pro data, která jsou společná pro všechny uživatele, použijte příslušnou složku dat.
Operační systém Umístění Windows XP, Windows Server 2003 a starší CSIDL_COMMON_APPDATA Windows Vista a novější FOLDERID_ProgramData Pro data, která patří konkrétnímu uživateli, použijte příslušnou složku dat uživatele.
Operační systém Umístění Windows XP, Windows Server 2003 a starší CSIDL_APPDATA, CSIDL_PERSONAL a další. Windows Vista a novější FOLDERID_RoamingAppData, FOLDERID_Documents a další. Pokud je nutné nainstalovat do jiného umístění než složka Program Files, ujistěte se, že jste správně nastavili seznamy řízení přístupu (ACL), aby uživatelé neměli přístup k nevhodným částem systému souborů. Všechna data specifická pro konkrétního uživatele by měla mít seznam ACL, který brání jakémukoli jinému uživateli v přístupu k němu.
Při nastavování přidružení souborů nezapomeňte správně zadat příkazový řádek. Použijte plně kvalifikovanou cestu a zabalte všechny prvky, které obsahují prázdné znaky v uvozovkách. Zalomení parametrů příkazu do samostatných uvozovek V opačném případě může být řetězec nesprávně analyzován a aplikace se nespustí správně. Tady jsou uvedeny dva příklady správně vytvořených příkazových řádků.
"C:\Program Files\MyApp\MyApp.exe" "%1" "%2" C:\MyAppDir\MyApp\MyApp.exe "%1"
Poznámka
Umístění standardních instalačníchsch Chcete-li získat umístění standardní složky v určitém systému Windows Vista nebo novější, zavolejte SHGetKnownFolderPath s příslušnou POLEFOLDERID hodnotu. V systému Windows XP, Windows Server 2003 nebo starších systémech volejte SHGetFolderLocation nebo SHGetFolderPath s odpovídající hodnotou CSIDL.
Shlwapi
Rozhraní Shell Lightweight API (Shlwapi) obsahuje řadu funkcí pro manipulaci s řetězci. Nesprávné použití těchto funkcí může vést k neočekávaně zkráceným řetězcům bez oznámení o vrácení zkrácení. V následujících případech by se neměly používat funkce Shlwapi. Uvedené alternativní funkce, které představují méně rizik, by měly být použity na jejich místě.
| Shlwapi – funkce | Alternativní funkce |
|---|---|
| StrCat,StrNCat | StringCchCat, StringCbCat a související funkce |
| StrCpy, StrCpyN | StringCchCopy, StringCbCopy a související funkce |
| wnsprintf, wvnsprintf | StringCchPrintf, StringCbPrintf a související funkce |
U funkcí, jako je PathRelativePathTo, které vrací cestu k souboru, vždy nastavte velikost vyrovnávací paměti na MAX_PATH znaky. Tím zajistíte, že je vyrovnávací paměť dostatečně velká, aby držela největší možnou cestu k souboru a ukončující znak null.
Další informace o alternativních řetězcových funkcích naleznete v tématu O strsafe.h.
Automatické dokončování
Nepoužívejte funkci automatického dokončování pro hesla.
ShellExecute, ShellExecuteEx a související funkce
Ke spouštění aplikací můžete použít několik funkcí prostředí: ShellExecute, ShellExecuteEx, WinExeca SHCreateProcessAsUserW. Ujistěte se, že zadáte jednoznačnou definici aplikace, která se má spustit.
- Při zadávání cesty spustitelného souboru zadejte plně kvalifikovanou cestu. Nezávisí na prostředí pro vyhledání souboru.
- Pokud zadáte řetězec příkazového řádku, který obsahuje prázdné znaky, zabalte řetězec do uvozovek. V opačném případě může analyzátor interpretovat jeden prvek, který obsahuje mezery jako více prvků.
Přesouvání a kopírování souborů
Jedním z klíčů k zabezpečení systému je správné přiřazování seznamů ACL. Můžete také použít šifrované soubory. Ujistěte se, že při přesouvání nebo kopírování souborů jsou přiřazeny správné seznamy ACL a že nebyly omylem dešifrovány. To zahrnuje přesun souborů do koša také v systému souborů. Použijte IFileOperation (Windows Vista nebo novější) nebo SHFileOperation (Windows XP a starší). Nepoužívejte MoveFile, což nemusí nastavit očekávaný seznam ACL cílového souboru.
Zápis rozšíření zabezpečeného oboru názvů
Rozšíření oboru názvů prostředí představují výkonný a flexibilní způsob prezentace dat uživateli. Pokud ale nejsou správně napsané, můžou způsobit selhání systému. Některé klíčové body, které je potřeba mít na paměti:
- Nepředpokládáte, že jsou data, jako jsou obrázky, správně naformátovaná.
- Nepředpokládáme, že MAX_PATH odpovídá počtu bajtů v řetězci. Jedná se o počet znaků.
Výstrahy zabezpečení
Následující tabulka uvádí některé funkce, které můžou v případě nesprávného použití ohrozit zabezpečení vašich aplikací.
| Rys | Zmírnění |
|---|---|
| ShellExecute, ShellExecuteEx | Hledání, která závisí na kontrole řady výchozích umístění a vyhledání konkrétního souboru, se dá použít při útoku na falšování identity. K zajištění přístupu k požadovanému souboru použijte plně kvalifikovanou cestu. |
| StrCat | První argument, psz1, musí být dostatečně velký pro uložení psz2 a uzavření \0, jinak může dojít k přetečení vyrovnávací paměti. Místo toho použijte jednu z následujících alternativ. StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatNnebo StringCchCatNEx. |
| strCatBuff | Konečný řetězec není zaručen, že bude ukončen s hodnotou null. Místo toho použijte jednu z následujících alternativ. StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatNnebo StringCchCatNEx. |
| StrCatChainW | Konečný řetězec není zaručen, že bude ukončen s hodnotou null. Místo toho použijte jednu z následujících alternativ. StringCbCatEx, StringCbCatNEx, StringCchCatExnebo StringCchCatNEx. |
| StrCpy | První argument, psz1, musí být dostatečně velký pro uložení psz2 a uzavření \0, jinak může dojít k přetečení vyrovnávací paměti. Místo toho použijte jednu z následujících alternativ. StringCbCopy, StringCbCopyEx, StringCbCopyN, StringCbCopyNEx, StringCchCopyEx, StringCchCopyEx, StringCchCopyNnebo StringCchCopyNEx. |
| StrCpyN | Zkopírovaný řetězec není zaručen, že bude ukončen s hodnotou null. Místo toho použijte jednu z následujících alternativ. StringCbCopy, StringCbCopyEx, StringCbCopyN, StringCbCopyNEx, StringCchCopyEx, StringCchCopyEx, StringCchCopyN, StringCchCopyNEx. |
| StrDup | StrDup předpokládá, že lpsz je řetězec ukončený hodnotou null. Vrácený řetězec navíc není zaručen, že bude ukončen s hodnotou null. Místo toho použijte jednu z následujících alternativ. StringCbCat, StringCbCopyEx, StringCbCopyN, StringCbCopyNEx, StringCchCopyEx, StringCchCopyEx, StringCchCopyNnebo StringCchCopyNEx. |
| StrNCat | První argument, pszFront, musí být dostatečně velký pro uložení pszBack a závěr '\0', jinak může dojít k přetečení vyrovnávací paměti. Mějte na paměti, že poslední argument, cchMax, je počet znaků, které se mají zkopírovat do pszFront, nemusí nutně velikost pszFront v bajtech. Místo toho použijte jednu z následujících alternativ. StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatNnebo StringCchCatNEx. |
| wnsprintf | Zkopírovaný řetězec není zaručen, že bude ukončen s hodnotou null. Místo toho použijte jednu z následujících alternativ. StringCbPrintf, StringCbPrintfEx, StringCbVPrintf, StringCbVPrintfEx, StringCchPrintf, StringCchPrintfEx, StringCchVPrintfnebo StringCchVPrintfEx. |
| wvnsprintf | Zkopírovaný řetězec není zaručen, že bude ukončen s hodnotou null. Místo toho použijte jednu z následujících alternativ. StringCbPrintf, StringCbPrintfEx, StringCbVPrintf, StringCbVPrintfEx, StringCchPrintf, StringCchPrintfEx, StringCchVPrintfnebo StringCchVPrintfEx. |
Související témata
-
Zabezpečení Microsoftu