2010-06-07 19 views
25

Czy ktoś wie dokładnie, jak ustawić HTTPONLY na klasycznych sesyjnych plikach cookie?Ustawienie HTTPONLY dla klasycznego pliku cookie dla plików Asp

To jest ostatnia rzecz, która została oznaczona w skanie luki i wymaga naprawy ASAP, więc każda pomoc jest doceniana.

~~~ trochę więcej INFORMACJA O mój problem ~~~

Czy ktoś mógłby mi w tym pomóc?

Potrzebuję wiedzieć, jak ustawić HTTPONLY na cookie ASPSESSION utworzone domyślnie z ASP & IIS.

To jest plik cookie automatycznie tworzony przez serwer dla wszystkich stron asp.

W razie potrzeby mogę ustawić HTTPONLY dla wszystkich plików cookie na stronie.

Każda pomoc w tym zakresie byłaby bardzo ceniona.

Dzięki

Dzięki Elliott

+2

To jest dobre pytanie. Czy wymyśliłeś, jak to zrobić? –

+0

jakie rozwiązanie masz dotychczas? – Dhananjay

Odpowiedz

2
Response.AddHeader "Set-Cookie", "CookieName=CookieValue; path=/; HttpOnly" 

Źródło: http://www.asp101.com/tips/index.asp?id=160

+4

Ponieważ ten plik cookie jest tworzony przez ASP i IIS domyślnie nie mamy możliwości programowej, aby go dodać. Zastanawiam się, czy to jakieś inne miejsce gdzieś indziej? Zaktualizowałem KeepASPCookieSecure w pliku metabazy IIS.xml, zastanawiam się, czy to może być podobny rodzaj poprawki? –

+0

Należy pamiętać, że dodanie pliku cookie przy użyciu "addheader" nie spowoduje dodania pliku cookie do kolekcji request.cookies() w ASP w tym samym żądaniu. Plik cookie będzie widoczny tylko w zasięgu request.cookies po wizycie w przeglądarce. Różni się to od zwykłej komendy response.cookies(), która spowoduje, że plik cookie będzie dostępny w zakresie request.cookies w ramach tego samego żądania. –

0

This page ma wiele informacji, które jest odpowiednie dla swojego problemu.

.NET 1.1 nie dodaje HttpOnly, ponieważ nie został jeszcze wynaleziony.

Jeśli Twoja aplikacja będzie działać w środowisku .NET 2.0 (przeniosłem kilka klasycznych witryn ASP do wersji 2.0 praktycznie niezmienionej) HttpOnly jest domyślnie ustawiona.

Jeśli dobrze go przeczytam, możesz pobrać plik cookie sesji i dołączyć do niego ; HttpOnly;. On daje przykład Java:

String sessionid = request.getSession().getId(); 
response.setHeader("SET-COOKIE", "JSESSIONID=" + sessionid + "; HttpOnly"); 

Wreszcie on proponuje:

jeśli zmiany kodu są nieosiągalne, zapory aplikacji internetowych mogą być wykorzystywane, aby dodać HttpOnly do ciasteczek sesyjnych

Edited dodać: dla tych, którzy myślą, że migracja do .NET (która może pomieścić większość klasycznego kodu ASP niezmieniona) jest zbyt drastyczną zmianą, aby uzyskać tak małą funkcję, moje doświadczenie z filtrami ISAPI jest takie, że oni też może być poważnym bólem, aw niektórych typowych sytuacjach (udostępnianie hostingu) nie możesz ich w ogóle używać.

+5

Przepraszam, jeśli twoje pochwały były niejasne, ale zmiana całej witryny z klasycznego ASP na .NET wydaje się dość dużym przedsięwzięciem tylko po to, aby uzyskać ciasteczka sesyjne HttpOnly. Myślę, że to jest powód, dla którego spadły. –

10

Microsoft zawiera przykład przy użyciu filtru ISAPI do wszystkich ciasteczek wyjazdowej: http://msdn.microsoft.com/en-us/library/ms972826

lub przepisywanie URL może być używany http://forums.iis.net/p/1168473/1946312.aspx

<rewrite> 
     <outboundRules> 
      <rule name="Add HttpOnly" preCondition="No HttpOnly"> 
       <match serverVariable="RESPONSE_Set_Cookie" pattern=".*" negate="false" /> 
       <action type="Rewrite" value="{R:0}; HttpOnly" /> 
       <conditions> 
       </conditions> 
      </rule> 
      <preConditions> 
       <preCondition name="No HttpOnly"> 
        <add input="{RESPONSE_Set_Cookie}" pattern="." /> 
        <add input="{RESPONSE_Set_Cookie}" pattern="; HttpOnly" negate="true" /> 
       </preCondition> 
      </preConditions> 
     </outboundRules> 
    </rewrite> 
+8

Podczas gdy to działa - muszę poinformować, że jeśli któraś z twoich klasycznych stron ASP ma Response.Buffer = false, strona będzie czystym śmieciem. – Jason

+0

Każdy, kto ma problemy z zaimplementowaniem tego kodu, musisz najpierw włączyć Przepisywanie URL dla IIS [http://www.iis.net/downloads/microsoft/url-rewrite] – MarceloBarbosa

+0

Dla mnie flaga HTTP w narzędziach programistycznych jest ustawiona na wartość true , ale po upływie sekundy flaga zostanie usunięta. Czy ma to coś wspólnego z korzystaniem z HTTPS? –

2

Jeśli masz IIS7 +, upewnij się, że zainstalowany jest moduł URL Rewrite. Możesz zainstalować go za pomocą instalatora platformy internetowej. Instalator platformy sieciowej można znaleźć w widoku funkcji witryny. Musisz uruchomić Menedżera usług IIS jako administrator.

Run IIS As Administratro

Kliknij na Microsoft Web Platform Installer w funkcji zobaczyć na swojej stronie internetowej:

Web Platform Installer

Maker czy zainstalowany URL Rewrite Server produktu. Jeśli tak nie jest, zainstaluj go.

Url Rewrite Server Product

z URL Rewrite Server zainstalowanego produktu, można użyć funkcji URL Rewrite na swojej stronie, aby dodać regułę, aby dodać HttpOnly dla Session ID cookies.

URL Rewrite Feature

enter image description here

Add HttpOnly Outbound Rule

Powinieneś zobaczyć, jeśli nie istnieje, to plik web.config stworzony dla swojej stronie ASP. będzie miał następującą zawartość:

enter image description here

Jeśli używasz Firebug Firefox do wglądu cookies, powinieneś teraz zobaczyć HttpOnly flagę:

enter image description here

+1

Dobrze wyjaśnione ... Świetna robota !! –