我正在使用ASP.NET MVC2,我需要保存用户登录状态,以指示他是否已登录并显示一些私人数据。
我所做的只是在会话Session.Add("UserID", user.ID.ToString());
中添加UserID,然后重定向到获取UserID user
的{{1}}页面,如果存在,则从数据库中提取数据并将其显示给用户
据我所知,会话数据存储在服务器端,所以我首先想到的是使用这种方法是非常安全的。但是我在Chrome中检查了它并创建了某种让我怀疑的cookie。
有人能告诉我这种方法是否安全吗?
答案 0 :(得分:1)
正在创建的cookie(a)是加密的,(b)不包含实际数据,而是用于检索处理请求的线程的正确会话的会话标识符。这是保存数据的完美合理且安全的方法。我相信默认情况下cookie是HttpOnly(你应该验证这一点),不应该暴露给浏览器中的脚本。如果它不是HttpOnly,你应该将它配置为(使用httpCookies指令) - 最佳实践将指示cookie应该是HttpOnly,除非客户直接使用特别要求。
答案 1 :(得分:0)
ASP .NET MVC通过在会话开始时为客户端提供唯一密钥(会话ID)来维护会话状态,该密钥存储在HTTP cookie中。会话ID在每次请求时发送到服务器。
您可以设置
<system.web>
<sessionState cookieless="true" />
</system.web>
然后会话ID将在url中传递,这是不太安全的
答案 2 :(得分:0)
您可以输入Cookie。顺便说一句,这完全没问题。例如,使用联合身份验证时,您的SAML(或其他)令牌存储在encripted cookie中。
即使有人拦截你的cookie,他也无法阅读。为防止数据损坏 - 签名。您还可以向其添加cookie所有者URI并对其进行验证。
与tvanfosson的意见相同。只是注意到它=)但无论如何都会发布。