c# - Cookie 安全问题

标签 c# session cookies

我如何记住没有安全问题的登录用户?目前,我将 id 和 guid 存储到两个不同的 cookie 中,并在没有事件 session 时比较它们。如果匹配,则我重新创建 session 。顺便说一句,id 和 guid 都没有加密。

这种方法是否足够安全,还是我应该遵循一种相当独特的方法?

最佳答案

由于使用 XSS 很容易窃取 cookie,因此将信息放在一个或两个 cookie 中并不重要,因为盗窃会把它们全部拿走。

我已经解决了一个更复杂的过程:我将一个加密的 cookie 分成两部分(但 2 个 cookie 也可以),一个固定,另一个在每个 session 中可变。两者都保存在服务器端以供检查:它们只是 session 标识符,cookie中不包含任何敏感信息,与用户id的对应关系保存在服务器上。

如果假冒用户使用窃取的 cookie 进入帐户,可变部分(或 cookie)将发生变化,因此当真实用户再次连接时他将无法进入,您将获得发生未授权访问的证据:然后你可以删除服务器端的永久 session (由固定部分或 cookie 定义)以避免被盗的任何进一步访问。真实用户将重新登录并使用新的 cookie 创建一个新的永久 session 。您还可以警告他您发现了安全漏洞,建议他重设密码(永远不能直接从 cookie 访问的操作)或使用其他浏览器进行不安全的导航。

如果您保存额外的用户信息(用户代理、位置 IP),您还可以检查它们的 cookie 有效性,以避免假冒用户的第一次进入。

关于c# - Cookie 安全问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6634951/

相关文章:

node.js - HapiJS 代理问题

ios - laravel - 在登录移动应用程序时保存 session 凭据

node.js - 如何在 session 中存储 JWT token ?

javascript - 在 ajax 调用的回显页面中设置 cookie

c# - 将 DataTemplate 中的按钮绑定(bind)到表单的 ViewModel 中的命令

ruby-on-rails - 使用rails中的 session 变量在模型中评分算法

C# HttpWebRequest CookieContainer/Collection 在对象实例之间持久存在?

javascript - 使用C#创建WebAssembly

c# - 如何使用 DDD/CQRS 编写功能

c# - 包含月份名称和 AM/PM 的日期时间字符串转换