Helpex - Trao đổi & giúp đỡ Đăng nhập
79

Tôi đã đặt cookie .ASPXAUTH thành chỉ https nhưng tôi không chắc cách thực hiện hiệu quả điều tương tự với ASP.NET_SessionId.

Toàn bộ trang web sử dụng HTTPS nên không cần cookie hoạt động với cả http và https.

79 hữu ích 1 bình luận 128k xem chia sẻ
50

Đây là đoạn mã được lấy từ một bài báo trên blog được viết bởi Anubhav Goyal :

// this code will mark the forms authentication cookie and the
// session cookie as Secure.
if (Response.Cookies.Count > 0)
{
    foreach (string s in Response.Cookies.AllKeys)
    {
        if (s == FormsAuthentication.FormsCookieName || "asp.net_sessionid".Equals(s, StringComparison.InvariantCultureIgnoreCase))
        {
             Response.Cookies[s].Secure = true;
        }
    }
}

Thêm điều này vào trình xử lý sự kiện EndRequest trong global.asax sẽ làm cho điều này xảy ra cho tất cả các lệnh gọi trang.

Lưu ý: Một chỉnh sửa đã được đề xuất để thêm một break;câu lệnh bên trong một nhiệm vụ "an toàn" thành công. Tôi đã từ chối chỉnh sửa này dựa trên ý tưởng rằng nó sẽ chỉ cho phép một trong các cookie được buộc phải bảo mật và chỉnh sửa thứ hai sẽ bị bỏ qua. Việc thêm một bộ đếm hoặc một số chỉ số khác để xác định rằng cả hai đã được bảo mật và phá vỡ tại điểm đó là điều không thể tưởng tượng được.

50 hữu ích 5 bình luận chia sẻ
173

Để thêm ; securehậu tố vào Set-Cookietiêu đề http, tôi chỉ cần sử dụng <httpCookies>phần tử trong web.config:

<system.web>
  <httpCookies httpOnlyCookies="true" requireSSL="true" />
</system.web>

IMHO tiện dụng hơn nhiều so với việc viết mã như trong bài viết của Anubhav Goyal.

Xem: http://msdn.microsoft.com/en-us/library/ms228262(v=vs.100).aspx

173 hữu ích 5 bình luận chia sẻ
17

Đi với giải pháp của Marcel ở trên để bảo mật cookie Xác thực Mẫu, bạn cũng nên cập nhật phần tử cấu hình "xác thực" để sử dụng SSL

<authentication mode="Forms">
   <forms ...  requireSSL="true" />
</authentication>

Cookie xác thực khôn ngoan khác sẽ không phải là https

Xem: http://msdn.microsoft.com/en-us/library/vstudio/1d3t3c61(v=vs.100).aspx

17 hữu ích 1 bình luận chia sẻ
9

Nhận thấy rằng việc đặt thuộc tính bảo mật trong Session_Start là đủ, như được khuyến nghị trong blog MSDN " Bảo mật ID phiên: ASP / ASP.NET " với một số phần bổ sung.

    protected void Session_Start(Object sender, EventArgs e)
    {
        SessionStateSection sessionState = 
 (SessionStateSection)ConfigurationManager.GetSection("system.web/sessionState");
        string sidCookieName = sessionState.CookieName;

        if (Request.Cookies[sidCookieName] != null)
        {
            HttpCookie sidCookie = Response.Cookies[sidCookieName];
            sidCookie.Value = Session.SessionID;
            sidCookie.HttpOnly = true;
            sidCookie.Secure = true;
            sidCookie.Path = "/";
        }
    }
9 hữu ích 0 bình luận chia sẻ
2

Thêm vào giải pháp của @ JoelEtherton để sửa một lỗ hổng bảo mật mới được tìm thấy. Lỗ hổng này xảy ra nếu người dùng yêu cầu HTTP và được chuyển hướng đến HTTPS, nhưng cookie sessionid được đặt là an toàn trong yêu cầu đầu tiên tới HTTP. Đó hiện là một lỗ hổng bảo mật, theo McAfee Secure.

Mã này sẽ chỉ bảo mật cookie nếu yêu cầu sử dụng HTTPS. Nó sẽ hết hạn cookie sessionid, nếu không phải HTTPS.

    // this code will mark the forms authentication cookie and the
    // session cookie as Secure.
    if (Request.IsSecureConnection)
    {
        if (Response.Cookies.Count > 0)
        {
            foreach (string s in Response.Cookies.AllKeys)
            {
                if (s == FormsAuthentication.FormsCookieName || s.ToLower() == "asp.net_sessionid")
                {
                    Response.Cookies[s].Secure = true;
                }
            }
        }
    }
    else
    {
        //if not secure, then don't set session cookie
        Response.Cookies["asp.net_sessionid"].Value = string.Empty;
        Response.Cookies["asp.net_sessionid"].Expires = new DateTime(2018, 01, 01);
    }
2 hữu ích 0 bình luận chia sẻ
0

Nó cũng đáng xem xét:

Sử dụng tiền tố cookie

__Secure-, which signals to the browser that the Secure attribute is required.
__Host-, which signals to the browser that both the Path=/ and Secure attributes are required, and at the same time, that the Domain attribute must not be present.

Một bài báo hay về lý do tại sao điều này lại hữu ích

https://check-your-website.server-daten.de/prefix-cookies.html


Đổi tên cookie của bạn

Thay vì sử dụng những cái tên xác định rõ ràng ngôn ngữ lập trình.

ví dụ

ASP.NET_SessionId = __Secure-SID


Sử dụng cài đặt samesite

sameSite="Lax"

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite


Bảo mật cookie https

requireSSL="true"


VÍ DỤ BẢO MẬT

<sessionState cookieless="false" cookieName="__Secure-SID" cookieSameSite="Lax" />
<httpCookies httpOnlyCookies="true" sameSite="Lax" requireSSL="true" />
0 hữu ích 0 bình luận chia sẻ
-3

Nếu toàn bộ trang web sử dụng HTTPS, thì ít nhất cookie sessionId của bạn cũng an toàn như mã hóa HTTPS. Điều này là do cookie được gửi dưới dạng tiêu đề HTTP và khi sử dụng SSL, tiêu đề HTTP được mã hóa bằng SSL khi truyền.

-3 hữu ích 5 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ c# asp.net session-cookies , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading