Důležité informace o zabezpečení winHTTP

Následující aspekty zabezpečení platí pro aplikace, které používají WinHTTP:

  • Certifikáty serveru se ověřují jenom jednou pro každou relaci. Po ověření certifikátu zůstane platný po dobu trvání aktuální relace. Pokud se otisk prstu certifikátu shoduje, což značí, že se certifikát nezměnil, bude certifikát dál znovu ověřen. V důsledku toho se po ověření certifikátu neprojeví jakákoli změna ověřovacích kritérií prostřednictvím protokolu, kontroly odvolání nebo chyby certifikátu a ignorování příznaků. Aby se taková změna projevila okamžitě, musí být aktuální relace ukončena a spuštěna nová. Podobně lze vypršení platnosti certifikátu během relace zjistit pouze v případě, že samotná aplikace pravidelně kontroluje certifikátový server a načítá data vypršení platnosti.
  • Automatické proxy server zahrnuje stahování a spouštění skriptů. Podpora automatického zjišťování proxy serveru zahrnuje zjišťování prostřednictvím protokolu DHCP nebo DNS, stahování a spouštění skriptů proxy serveru, jako jsou skripty Java. Aby se dosáhlo vyššího stupně zabezpečení, musí se aplikace vyhnout předání příznaku WINHTTP_AUTOPROXY_RUN_INPROCESS, aby bylo zjišťování automatického proxy serveru zahájeno mimo proces. I v té době se WinHTTP pokusí spustit automaticky proxy skript v procesu, pokud se skript nepodaří správně spustit mimo proces. Pokud se domníváte, že toto náhradní chování představuje nepřijatelné riziko, zakažte náhradní chování příznakem WINHTTP_AUTOPROXY_RUN_OUTPROCESS_ONLY.
  • WINHTTP_STATUS_CALLBACK funkce musí být okamžitě vráceny. Při psaní jedné z těchto funkcí zpětného volání buďte opatrní, že neblokuje. Zpětné volání ani žádná funkce, které volá, by například neměly zobrazovat dialogové okno uživatele ani čekat na událost. Pokud WINHTTP_STATUS_CALLBACK funkce blokuje, ovlivní interní plánování služby WinHTTP a způsobí odepření dalších požadavků v rámci stejného procesu.
  • WINHTTP_STATUS_CALLBACK funkce musí být znovu prováděné. Při zápisu zpětného volání vyhněte se statickým proměnným nebo jiným konstruktorům, které jsou v rámci opětovného zadání nebezpečné, a vyhněte se volání jiných funkcí, které se neopakují.
  • Pokud je to možné, předejte hodnoty NULLs pro parametry OUT. Pokud jste povolili asynchronní operaci registrací funkce zpětného volání, Vždy předejte hodnoty NULL pro takové parametry OUT, jako jsou lpdwDataAvailable pro WinHttpQueryDataAvailable, lpdwBytesRead pro WinHttpReadDatanebo lpdwBytesWritten pro WinHttpWriteData. Za některých okolností se volající vlákno ukončí před dokončením operace a pokud parametry OUT nejsou NULL, může funkce ukončit zápis do paměti, která již byla uvolněna.
  • Ověřování passportem není nepromýšlivé. Jakékoli schéma ověřování na základě souborů cookie je zranitelné vůči útokům. Passport verze 1.4 je založený na souborech cookie, a proto podléhá ohrožením zabezpečení, která jsou přidružená k jakémukoli schématu ověřování na základě souborů cookie nebo formulářů. Podpora passportu je ve výchozím nastavení ve službě WinHTTP zakázaná; lze ji povolit pomocí WinHttpSetOption.
  • Základní ověřování by mělo být použito pouze přes zabezpečené připojení. Základní ověřování, které odesílá uživatelské jméno a heslo ve formátu prostého textu (viz RFC 2617), by se mělo používat jenom přes šifrovaná připojení SSL nebo TLS.
  • Nastavení zásad automatického přihlášení na "nízké" může představovat riziko. Pokud je zásada automatického přihlášení nastavená na nízkou, přihlašovací přihlašovací údaje uživatele se dají použít k ověření na jakémkoli webu. Není však vhodné provádět ověřování na webech, kterým nedůvěřujete.
  • Připojení SSL 2.0 se nepoužívají, pokud nejsou explicitně povolená. Protokoly zabezpečení TLS 1.0 a SSL 3.0 jsou považovány za bezpečnější než SSL 2.0. WinHTTP ve výchozím nastavení vyžaduje protokol TLS 1.0 nebo SSL 3.0 při vyjednávání připojení SSL, nikoli SSL 2.0. Podporu protokolu SSL 2.0 ve WinHTTP je možné povolit pouze voláním WinHttpSetOption.
  • Kontrola odvolání certifikátu musí být explicitně požadována. Při ověřování certifikátů ve výchozím nastavení WinHTTP nekontroluje, jestli byl certifikát serveru odvolán. Kontrolu odvolání certifikátu je možné povolit pomocí WinHttpSetOption.
  • Aplikace musí zajistit, aby se relace mapuje na jednu identitu. Relace WinHTTP by se měla mapovat na jednu a pouze jednu identitu; to znamená, že relace WinHTTP slouží ke správě internetové aktivity jednoho ověřeného uživatele nebo skupiny anonymních uživatelů. Vzhledem k tomu, že WinHTTP toto mapování nevynucuje automaticky, musí vaše aplikace podniknout kroky, aby se zajistilo, že je zapojena pouze jedna identita.
  • Operace na popisovači požadavku WinHTTP by se měly synchronizovat. Aplikace by se například měla vyhnout zavření popisovače požadavku na jednom vlákně, zatímco jiné vlákno odesílá nebo přijímá požadavek. Pokud chcete ukončit asynchronní požadavek, zavřete popisovač požadavku během oznámení zpětného volání. Pokud chcete ukončit synchronní požadavek, zavřete popisovač, když se vrátí předchozí volání WinHTTP.
  • Trasovací soubory obsahují citlivé informace. Trasovací soubory jsou chráněné pomocí seznamů Access-Control (ACL), aby k němu normálně mohl přistupovat jenom místní správce nebo uživatelský účet, který ho vytvořil. Vyhněte se narušení trasovacích souborů neoprávněným přístupem.
  • Vyhněte se předávání citlivých dat prostřednictvímwinhttpSetOption. Nezadávané uživatelské jméno, heslo ani žádné jiné přihlašovací údaje pro WinHttpSetOption, protože nemáte žádnou kontrolu nad použitým schématem ověřování a citlivá data se neočekávaně odesílají ve formátu prostého textu. Pro nastavení přihlašovacích údajů použijte WinHttpQueryAuthSchemes a WinHttpSetCredentials místo WinHttpSetOption.
  • Automatické přesměrování může představovat bezpečnostní riziko. Ve výchozím nastavení se přesměrování (zpráva 302) automaticky sleduje i u post. Aby se zabránilo možnému přesměrování, měly by aplikace při publikování citlivých informací zakázat automatické přesměrování nebo znovu sledovat zpětné směrování zpětného volání.
  • Uživatelem definované hlavičky se přenesou přes přesměrování beze změny. Uživatelem definované hlavičky, jako jsou soubory cookie přidané pomocí WinHTTPAddRequestHeaders, se přenesou přes přesměrování beze změny, zatímco hlavičky generované winHTTP se automaticky aktualizují. Pokud přenos hlavičky definované uživatelem napříč přesměrováními představuje bezpečnostní riziko, použijte WINHTTP_STATUS_CALLBACK zpětné volání s WINHTTP_CALLBACK_STATUS_REDIRECT dokončením a upravte příslušné záhlaví vždy, když dojde k přesměrování.
  • WinHTTP se znovu neprojevuje v synchronním režimu. Vzhledem k tomu, že WinHTTP není znovu zařazuje do synchronního režimu, neplánujte asynchronní volání procedur (APC), která může volat winHTTP ve vlákně aplikace, které se spouští uvnitř funkce WinHTTP. Zatímco v synchronním režimu winHTTP provede "upozorňující čekání", a pokud je čekající vlákno předem vyprázdněno, aby se spustil APC a později znovu vstoupí do WinHTTP, může být vnitřní stav WinHTTP poškozen.