Làm cách nào tôi có thể đặt cờ Bảo mật trên Cookie Phiên ASP.NET?


146

Làm cách nào tôi có thể đặt cờ Bảo mật trên Cookie Phiên ASP.NET, để nó sẽ chỉ được truyền qua HTTPS và không bao giờ qua HTTP đơn giản?

Câu trả lời:


127

Có hai cách, một httpCookiesyếu tố web.configcho phép bạn bật requireSSLmà chỉ truyền tất cả cookie bao gồm cả phiên trong SSL và cả bên trong xác thực mẫu, nhưng nếu bạn bật SSL trên httpcookies, bạn cũng phải bật cấu hình bên trong biểu mẫu.

Chỉnh sửa cho rõ ràng: Đặt cái này vào<system.web>

<httpCookies requireSSL="true" />

13
+1 Để làm rõ, đây là những gì bạn nên thêm vào web.config để đặt cờ bảo mật trên cookie xác thực thành đúng<httpCookies requireSSL="true" />
Tr1stan

8
Lưu ý rằng điều này phụ thuộc vào cấu hình (cấp máy chủ) của bạn. Tôi đã đưa ra Vùng kiểm tra với lỗi "Ứng dụng được định cấu hình để phát hành cookie an toàn. Những cookie này yêu cầu trình duyệt đưa ra yêu cầu qua SSL (giao thức https). Tuy nhiên, yêu cầu hiện tại không vượt quá SSL." Điều này là do chúng tôi có một proxy ngược tại chỗ và các trình duyệt kết nối với nó thông qua SSL nhưng proxy ngược với máy chủ IIS vượt qua cổng 80, vì vậy ứng dụng không nghĩ rằng nó được bảo mật.
mlhDev

4
@Bargitta Chúng tôi đã xử lý sự kiện Application_PreSendRequestHeaders và nếu một cài đặt ứng dụng nào đó là đúng, chúng tôi sẽ đặt tất cả cookie thành an toàn. Cài đặt ứng dụng này chỉ được đặt cho các trang bên ngoài HTTPS của chúng tôi.
mlhDev

Tôi hiểu rồi, vì vậy tất cả các trang web bên ngoài của bạn sẽ sử dụng HTTPS, cảm ơn.
Bargitta

Tôi đã thấy ở nơi khác sau khi IIS7 system.web đã được thay thế bởi system.webserver, vì vậy tôi đã thử đặt cài đặt này ở đó. Trên IIS 8.5, điều này gây ra lỗi cấu hình, nhưng tất cả đều hoạt động nếu tôi thêm phần system.web vào tệp cấu hình và đặt cài đặt vào đó.
Eborbob

180

bên trong <system.web> phần tử, thêm phần tử sau:

<httpCookies requireSSL="true" />

Tuy nhiên, nếu bạn có một <forms>yếu tố trongsystem.web\authentication khối , thì phần này sẽ ghi đè cài đặt vào httpCookies, đặt nó trở về mặc địnhfalse .

Trong trường hợp đó, bạn cần thêm requireSSL="true" thuộc tính cho thành phần biểu mẫu.

Vì vậy, bạn sẽ kết thúc với:

<system.web>
    <authentication mode="Forms">
        <forms requireSSL="true">
            <!-- forms content -->
        </forms>
    </authentication>
</system.web>

Xem ở đâyở đây để biết tài liệu MSDN của các yếu tố này.


2
Bạn có thể tránh các cài đặt web.config khác vượt quá cài đặt <httpCookies requestSSL = "true" /> bằng cách bao gồm thuộc tính 'lockItem'. Giống như vậy: <httpCookies yêu cầuSSL = "true" lockItem = "true" />. Thêm thông tin ở đây dotnetnoob.com/2010/11/how-to-secure-aspnet-cookies.html
JTech

1
Ngoài ra, nếu có một roleManageryếu tố, thuộc tính của nó cookieRequireSSL="true"cũng phải được đặt thành true. Tham chiếu msdn.microsoft.com/en-us/l
Library / Mạnh

bằng cách thêm các thay đổi ở trên vào các tệp liên quan, các đối tượng phiên không hoạt động trong ứng dụng của tôi, chúng sẽ trở thành null. Làm thế nào tôi có thể khắc phục vấn đề này sau đó?
satya

Bạn đang sử dụng HTTP hoặc HTTPS cho ứng dụng của mình? Cờ "an toàn" mà chúng tôi đặt ở đây sẽ ngăn cookie được gửi qua các kết nối không được mã hóa (tức là HTTP)
Martin Eden

21

Mọi thứ trở nên lộn xộn một cách nhanh chóng nếu bạn đang nói về mã đăng ký trong môi trường doanh nghiệp. Chúng tôi thấy rằng cách tiếp cận tốt nhất là có web.Release.config chứa các mục sau:

<system.web>
  <compilation xdt:Transform="RemoveAttributes(debug)" />
  <authentication>
      <forms xdt:Transform="Replace" timeout="20" requireSSL="true" />
  </authentication>
</system.web>

Theo cách đó, các nhà phát triển không bị ảnh hưởng (chạy trong Debug) và chỉ các máy chủ có bản dựng Phát hành mới yêu cầu cookie phải là SSL.


^ ^ ^ ^ ^ Đây là cách. Thêm thông tin lại: Web.Config biến đổi: go.microsoft.com/fwlink/?LinkId=125889
Jeff Mergler

0

bảo mật - Thuộc tính này yêu cầu trình duyệt chỉ gửi cookie nếu yêu cầu được gửi qua kênh bảo mật như HTTPS. Điều này sẽ giúp bảo vệ cookie khỏi bị chuyển qua các yêu cầu không được mã hóa. Nếu ứng dụng có thể được truy cập qua cả HTTP và HTTPS, thì có khả năng cookie có thể được gửi bằng văn bản rõ ràng.


0

Dựa trên câu trả lời của @Mark D, tôi sẽ sử dụng các biến đổi web.config để đặt tất cả các cookie khác nhau thành Bảo mật. Điều này bao gồm thiết lậpanonymousIdentification cookieRequireSSLhttpCookies requireSSL.

Vì vậy, bạn sẽ thiết lập web của mình.Release.config là:

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <system.web>
    <httpCookies xdt:Transform="SetAttributes(httpOnlyCookies)" httpOnlyCookies="true" />
    <httpCookies xdt:Transform="SetAttributes(requireSSL)" requireSSL="true" />
    <anonymousIdentification xdt:Transform="SetAttributes(cookieRequireSSL)" cookieRequireSSL="true" /> 
  </system.web>
</configuration>

Nếu bạn đang sử dụng Xác thực vai trò và biểu mẫu với ASP.NET Membership Provider(tôi biết, nó cổ xưa), bạn cũng sẽ muốn đặt roleManager cookieRequireSSLcác forms requireSSLthuộc tính và bảo mật là an toàn. Nếu vậy, web.release.config của bạn có thể trông như thế này (bao gồm ở trên cộng với các thẻ mới cho API thành viên):

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <system.web>
    <httpCookies xdt:Transform="SetAttributes(httpOnlyCookies)" httpOnlyCookies="true" />
    <httpCookies xdt:Transform="SetAttributes(requireSSL)" requireSSL="true" />
    <anonymousIdentification xdt:Transform="SetAttributes(cookieRequireSSL)" cookieRequireSSL="true" /> 
    <roleManager xdt:Transform="SetAttributes(cookieRequireSSL)" cookieRequireSSL="true" />
    <authentication>
        <forms xdt:Transform="SetAttributes(requireSSL)" requireSSL="true" />
    </authentication>
  </system.web>
</configuration>

Chuyển đổi nền trên web.config tại đây: http://go.microsoft.com/fwlink/?LinkId=125889

Rõ ràng điều này vượt xa câu hỏi ban đầu của OP nhưng nếu bạn không đặt tất cả chúng thành an toàn, bạn có thể mong đợi rằng một công cụ quét bảo mật sẽ thông báo và bạn sẽ thấy cờ đỏ xuất hiện trên báo cáo. Hỏi tôi làm sao tôi biết. :)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.