2012-07-02 7 views
9

Sprawdziłem naszą aplikację internetową za pomocą funkcji Audyt w narzędziach programistycznych Google Chrome.Jak rozumieć ostrzeżenie o zabezpieczeniach w Google Chrome dla statycznego zasobu obsługiwanego przez Asp.net

Najpierw otrzymałem ostrzeżenie, informujące, że serwujemy naszą statyczną zawartość nie wymagającą buforowania: "Następujące zasoby jawnie nie mogą być buforowane. Rozważ utworzenie bufora, jeśli to możliwe".

Aby rozwiązać ten problem dodałem ten fragment do naszego web-config

<staticContent> 
    <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="7.00:00:00" /> 
</staticContent> 

zalecany w tym blogu: http://blogs.msdn.com/b/carlosag/archive/2009/06/09/are-you-caching-your-images-and-scripts-iis-seo-can-tell-you.aspx

Gdybym teraz zacząć nowe badanie w Google Chrome, otrzymuję nowe ostrzeżenie:

Następujące publicznie buforowane zasoby zawierają nagłówek Set-Cookie . Ta luka w zabezpieczeniach może powodować udostępnianie plików cookie przez wielu użytkowników.

Czy możesz wyjaśnić potencjalne zagrożenie bezpieczeństwa i jakie jest możliwe rozwiązanie w Asp.net?

[Aktualizacja]

Po kilku dalszych badań, myślę, że to może być związane z tym pytanie:

Why is ASP.NET forms authentication setting cookies on a static image request?

Ale nie mogę umieścić zagadkę razem. Sytuacja nie jest dokładnie taka sama, podczas gdy nasza aplikacja może być skonfigurowana do korzystania z uwierzytelniania formularzy, otrzymałem ostrzeżenie podczas korzystania z uwierzytelniania systemu Windows.

+0

Czy jesteś pewien, że te dwa zdarzenia są połączone? Zagrożenie bezpieczeństwa jest całkiem jasne, ten sam plik cookie może być używany przez wielu użytkowników, oczywiście nie jest to problemem na pojedynczym komputerze użytkownika. –

+0

@Ramhound Przynajmniej narzędzia chrome uważają, że istnieje połączenie.Jeśli usunę instrukcję cache z webconfig, otrzymam zamiast tego inne ostrzeżenie: Następujące zasoby są jawnie niekatowalne. Rozważ umieszczenie ich w pamięci podręcznej, jeśli to możliwe: –

+0

Możesz dodać nagłówek "Cache-Control" z wartością "private", która oznacza, że ​​zasób może być buforowany tylko przez klienta, ale nie przez pośrednie maszyny. W ten sposób ten sam plik cookie nie powinien być zwracany różnym klientom. –

Odpowiedz

4

Wygląda na to, że problem był naprawdę związany z uwierzytelnianiem formularzy. Po uwierzytelnieniu użytkownika ustawiamy coockie uwierzytelniania formularzy. To coockie nie ma ustawionej ścieżki, więc będzie wysyłane dla każdego żądania, nawet dla statycznych obrazów.

Wygląda na to, że nadal miałem zestaw coockie z poprzedniej sesji debugowania, mimo że testowałem uwierzytelnianie systemu Windows.

Myślę, że najlepszym rozwiązaniem byłoby ustawienie ścieżki dla coockiego, aby zapobiec wysyłaniu jej do zasobów statycznych. Niestety nie mogę zdefiniować ścieżki dla wszystkich naszych zgłoszeń serwisowych, ponieważ korzystamy z usług WCF Ria, a usługi mają ścieżkę wirtualną, która tworzy środowisko wykonawcze.

Rozwiązaniem na razie jest ustawienie coockiego tylko w przeglądarce. Zaktualizowany wpis konfiguracji internetowej to:

<staticContent> 
    <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="7.00:00:00" cacheControlCustom="private"/> 
</staticContent> 

Ważną częścią jest nowy atrybut cacheControlCustom.

Sądzę, że to może być problem z zabezpieczeniami, jeśli przeglądarka jest udostępniana przez więcej niż jednego użytkownika (np. W kafejce internetowej?), Ale nie jest to poprawny scenariusz dla naszego projektu.