生成安全的 cookie 令牌以持久存储

2024-01-21

我正在尝试为我的网站创建登录和注册页面。我希望使用 cookie 来跟踪用户会话,但我正在尝试以最正确、最安全的方式实现它。我尝试查看教程和论坛,但其中大多数都已经过时,并且使用人们评论不安全的技术。我知道令牌需要随机生成和加密,因此我发现一个响应建议在 UUID 上使用 MessageDigest。但我发现更多文章表明这​​可能不像我想象的那么安全...关于生成 cookie 令牌以存储在我的数据库中的安全方法有什么建议吗?

当我尝试使用 UUID 方法时,我陷入了如何将其放入数据库的困境,因为我无法找到如何将其转换为字符串。这是我的代码...

UUID uuid = UUID.randomUUID();
MessageDigest salt = MessageDigest.getInstance("SHA-256");
salt.update(uuid.toString().getBytes("UTF-8"));

你现在的方法是相当糟糕的。考虑一下我(攻击者)是否了解到我的受害者 UUID 有一定的价值x。然后我可以简单地获取 SHA-256 哈希值x并将其作为 cookie 存储在您的网站上。多田。我现在正在冒充我的受害者。

话虽如此,为登录系统生成令牌的一种非常安全的方法是相对相似的。考虑以下 JSON 对象:

{ "expiry": "1:30:00 24/10/2012", "userID": "F68D4A77DC34" }

如果我们将此 JSON 对象作为 cookie 存储在客户端,这将是确定我们的用户是谁以及该对象何时过期以及用户需要再次登录的绝佳方法。

但是等等,这行不通,因为任何人都可以更改用户 ID 或过期时间,而您的服务器不会知道!

我们可以通过引入 HMAC 轻松解决这个问题。 HMAC 是哈希消息验证码。我们首先生成(一次,永远)一个随机 HMAC 密钥,k,在服务器上使用。该密钥应保留在服务器上并且永远不会被传输。

当用户登录时,我们创建一个与上面类似的 JSON 对象,然后通过 HMAC(例如 HMAC-SHA256)将其提供给k作为键,然后将其结果作为 base64 编码字节附加到 JSON 对象。有时使用分割字符也有帮助,例如“.”。

然后我们得到以下结果:

{ "expiry": "1:30:00 24/10/2012", "userID": "F68D4A77DC34" }.ScvlfpUDqgxtDPH4jsK44d+4cMNG+5yCvASJkVEI11o

完全像这样使用这个令牌就可以了,但有些人也喜欢对 JSON 进行 Base64 编码。在这种情况下我们最终会得到这样的结果:

eyAiZXhwaXJ5IjogIjE6MzA6MDAgMjQvMTAvMjAxMiIsICJ1c2VySUQiOiAiRjY4RDRBNzdEQzM0IiB9.ScvlfpUDqgxtDPH4jsK44d+4cMNG+5yCvASJkVEI11o

通过获取 JSON 对象,再次执行相同的操作,然后将 HMAC 的结果与附加到令牌的结果进行比较,我们可以轻松验证此令牌是否合法。如果它们匹配,我们就知道我们的服务器生成了令牌并且它是合法的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

生成安全的 cookie 令牌以持久存储 的相关文章

随机推荐

  • 使用预填充的核心数据部署应用程序

    我正在尝试将我的应用程序与Core Data已经有人居住 我找到了一些链接 其中解释了如何执行此操作 但要么不起作用 要么答案非常旧 我跟着发帖但不起作用 解决方案可能是导入 sqlite文件到应用程序文件夹 然后将它们复制到设备的文件系统
  • 创建 C# 安装程序的最佳方法

    我使用 Visual C 2008 Express 版 我希望能够为我拥有的项目创建一个安装程序 我可以使用发布工具来完成此操作 但您几乎无法控制 有没有免费的方法可以做到这一点 或者我需要使用 VS2008 的完整版本 或者 我发布时是否
  • 将变量从 [HttpPost] 方法传递到 [HttpGet] 方法

    我将视图从 HttpPost 方法重定向到 HttpGet 方法 我已经让它工作了 但想知道这是否是最好的方法 这是我的代码 HttpPost public ActionResult SubmitStudent StudentViewMod
  • 将灰度滤镜应用于 div

    尝试对主背景上方的 div 应用灰度滤镜 想知道这是否可以通过 jQuery CSS3 或 HTML5 实现 我正在尝试一些新的 CSS3 HTML5 技术 但没有成功 我无法将其保存为两个图像 因为背景需要拉伸全尺寸 因此它在每个屏幕上不
  • itgenobr001:找不到客户端。与 Exact Online 比利时合作的数据接入点

    我们刚刚入住https ecotaksen be https ecotaksen be Exact 上的查询和更新运行良好 但安装生产许可证后出现错误itgenobr001 Client not found occurs 我的数据容器规范是
  • 填充下拉列表客户端。收到回发验证错误

    我有一个带有两个下拉列表的网络控件 当您从第一个下拉列表中选择某些内容时 第二个下拉列表就会相应地填充 当回发发生时 我得到旧的 回发或回调参数无效 事件验证已启用 使用于 配置或 在 页 出于安全目的 这 功能验证参数 回发或回调事件发起
  • JQuery 事件不适用于生产中的 heroku,但适用于开发中

    这似乎是一个常见问题 但我还没有找到适用于我的情况的解决方案 我在 bikes js coffee 中有一些 JQuery 在本地开发中可以正常工作 当我推送到 Heroku 时 bikes js coffee 中的脚本不会运行 浏览器的
  • Boost::几何联合简化 - 它是如何工作的?

    Boost 中有很棒的几何库 它还允许绘制 SVG 图像 我想在我的一些项目中使用它 但它对我来说真的很奇怪 见下图 所以我们有 3 个像素点 在 2d 空间中表示为正方形 1 1 0 1 pic 1 我们想从它们那里得到一个并集并简化它
  • 无法使用 Selenium 的 chrome 驱动程序

    我在使用 Selenium 的 Chrome 驱动程序时遇到问题 我已下载 chromedriver 并将其保存到 C Chrome driver webdriver Chrome executable path C Chrome 使用它会
  • 如何将 X 和 Y 转换为纬度和经度

    我有一张桌子叫IK TEMP它包含名为 data range 的列 String sql SELECT DATA RANGE FROM IK TEMP try Connection conn this connect Statement s
  • 在 Android 上横向模式下隐藏 URL 地址栏

    使用 JavaScript 如何在横向模式下滚动经过 URL 栏 在纵向模式下 您只需执行 window scrollTo 0 1 即可 但在横向模式下则不起作用 它在 URL 栏上部分运行 关于尝试什么有什么建议吗 有两种方法可以做到这一
  • 如何加速简单连接

    我不擅长SQL 我正在寻找一种方法来加速像这样的简单连接 SELECT E expressionID A attributeName A attributeValue FROM attributes A JOIN expressions E
  • 为什么在基于 Identity Cookie 的身份验证中一段时间​​后 User.Identity.IsAuthenticated 设置为 false

    我正在使用 EF core 在 asp net core 2 0 中开发 API 我已经在中配置了身份cookie身份验证startup cs如下 services ConfigureApplicationCookie options gt
  • 默认路由重定向不适用于 Angular 2 中的延迟加载路由

    我有一个应用程序 分为经过身份验证的部分 InternalRootComponent 和匿名部分 ExternalRootComponent 当我显式导航到路线时 一切正常 但当我转到根目录 时 我不会被重定向 此外 由于某种原因加载了帐户
  • Android Flipboard 动画

    我想在 Android 中更改视图时为 Flipboard 制作动画 是否可以在整个布局上为 Flipboard 制作动画 与图片上的字母相似 但整体布局相似 例如
  • Python Tkinter,在函数之后销毁顶层

    我正在使用 Tkinter 作为 GUI 使用 python 对一些驱动器进行编程 当我的机器运行时 我想向用户显示一个顶级窗口 其中包含一些信息 该窗口应在函数完成后自行关闭 这是我的最小例子 from Tkinter import im
  • 正则表达式匹配所有美国电话号码格式

    首先 我想说我在这里看到了很多例子 并用谷歌搜索过 但没有找到符合我正在寻找的匹配前 3 名而不低于中间值的所有条件 请让我知道如何将它们全部放在一处 xxx xxxxxxx xxx xxxxxxx xxx xxx xxxx xxx xxx
  • 如何添加在所有 cron 作业之前运行的 pre-hook 和 post-hook 脚本?

    假设我有以下 cron 条目 bin date 现在假设我想要在 cron 作业运行之前和之后运行的脚本 我可以将 cron 条目修改为如下所示 bin prehook bin date bin posthook 或者 如果我想要 preh
  • 让 paulirish 的 Infinite-Scroll 在 iPhone 上运行

    我一直在我的网站上实施 Paul Irish 的无限滚动 它可以在桌面浏览器上运行 但在移动设备 特别是 iPhone 上却不能立即运行 解决方法是稍微放大 这使得滚动事件触发 从而触发无限滚动 另请参阅此处的问题报告 https gith
  • 生成安全的 cookie 令牌以持久存储

    我正在尝试为我的网站创建登录和注册页面 我希望使用 cookie 来跟踪用户会话 但我正在尝试以最正确 最安全的方式实现它 我尝试查看教程和论坛 但其中大多数都已经过时 并且使用人们评论不安全的技术 我知道令牌需要随机生成和加密 因此我发现