gpt4 book ai didi

c# - 默认情况下 cookie 不安全但在 SSL 中安全

转载 作者:太空宇宙 更新时间:2023-11-03 14:27:42 25 4
gpt4 key购买 nike

我在登录时有一个 GUI,我创建了一个 cookie 并对其进行了加密。我正在使用 SSL。

如果 cookie 是安全的,我会检查 Login.aspx 页面,事实确实如此。但在转到默认页面之前,它会转到 Global.ascx 页面。

在 Application_AuthenticateRequest 中,它获取 cookie 并为默认页面解密它。

现在我知道它正在获取相同的 cookie,因为所有其他属性都与在 Login.aspx 页面中创建的属性相匹配,因为安全值为“False”。

默认后所有其他页面都是这种情况。 cookie.secure 的值为 false。

请帮助我为什么会发生这种情况,因为我希望所有页面都通过 SSL 保护。

此外,页面以 https 而不是 http 打开。

这是我的 web.config

        <authentication mode="Forms">
<forms loginUrl="Login.aspx" defaultUrl="~/Default.aspx" name="copiunGUI" slidingExpiration="true" timeout="120" path="/" requireSSL="true" protection="All">
</forms>
</authentication>
<httpCookies requireSSL="true"/>
<authorization>
<deny users="?"/>
</authorization>

我的 global.aspx 代码

   protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
// Extract the forms authentication cookie

string redirectSecureUrl = Request.Url.ToString();
new GUIUtility().LogMessageToFile(redirectSecureUrl);

string cookieName = FormsAuthentication.FormsCookieName.ToString();
HttpCookie authCookie = Context.Request.Cookies[cookieName];

try
{
new GUIUtility().LogMessageToFile(cookieName + authCookie.Secure + authCookie.Name + authCookie.Expires + authCookie.Path);
}
catch (Exception)
{
//
}

if (null == authCookie)
{
try
{
new GUIUtility().LogMessageToFile("authCookie = null");
}
catch (Exception)
{
//
}

// There is no authentication cookie.
return;
}

FormsAuthenticationTicket authTicket = null;
try
{
authTicket = FormsAuthentication.Decrypt(authCookie.Value);
}
catch (Exception)
{
// Log exception details (omitted for simplicity)
return;
}

if (null == authTicket)
{
// Cookie failed to decrypt.
return;
}

// When the ticket was created, the UserData property was assigned a
// pipe delimited string of role names.
string[] roles = authTicket.UserData.Split(new char[] { '|' });

// Create an Identity object
FormsIdentity id = new FormsIdentity(authTicket);

// This principal will flow throughout the request.
GenericPrincipal principal = new GenericPrincipal(id, roles);
// Attach the new principal object to the current HttpContext object
Context.User = principal;
}

我的 login.aspx 页面中的代码

 // Create the authentication ticket
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1, // version
UserName.Text, // user name
DateTime.Now, // creation
DateTime.Now.AddMinutes(60),// Expiration
false, // Persistent
role); // User data

// Now encrypt the ticket.
string encryptedTicket = FormsAuthentication.Encrypt(authTicket);

// Create a cookie and add the encrypted ticket to the
// cookie as data.
HttpCookie authCookie =
new HttpCookie(FormsAuthentication.FormsCookieName,
encryptedTicket);

if (authCookie.Secure)
{
new GUIUtility().LogMessageToFile("The cookie is secure with SSL." + authCookie.Name + authCookie.Expires + authCookie.Path);
}

//authCookie.Secure = FormsAuthentication.RequireSSL;

// Add the cookie to the outgoing cookies collection.
HttpContext.Current.Response.Cookies.Add(authCookie);

// Redirect the user to the originally requested page
string goToPath = FormsAuthentication.GetRedirectUrl(UserName.Text, true);
new GUIUtility().LogMessageToFile(goToPath);
//here the value of gotoPath is /Default.aspx
Response.Redirect(FormsAuthentication.GetRedirectUrl(UserName.Text,false));

最佳答案

我一直在想这个问题。我试过设置 RequireSSL="true",但我不断收到新的 session ,而且我的登录只持续了一个请求。当我查看基础试图了解发生了什么时,我意识到 cookie 只是 HTTP 请求和响应的一部分,似乎并没有单独发出。因此,如果我在不安全的页面上,浏览器不会将 cookie 传输到我的网站。

如果你需要它是安全的,我认为你需要在设置cookie后翻转整个 session 以使用https,否则它不会被传输,并且有可能在IIS/ASP时的下一个请求中被覆盖.net 没有获得它正在寻找的 session cookie(我很确定这就是我不断获得新 session 的原因)。

关于c# - 默认情况下 cookie 不安全但在 SSL 中安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3454036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com