Cookie挑战,存储登录用户

时间:2016-10-24 16:46:50

标签: security cookies encryption

Hello开发人员

在开发我的第一个复杂网站时,我显然已经估计了一件事,那里需要用户创建和登录。

通过使用某些开发人员工具(例如在Google Chrome中),用户可以编辑和修改Cookie。那,我从来没有想过。

所以,这是我的问题。

  1. 当用户登录时,我将用户名存储在cookie中。
  2. 如果username-cookie不为空,并且我可以找到具有该名称的用户文件,则用户本身就已登录。否则,没有用户登录。
  3. 当用户退出时,我只是使cookie过期,这可以正常工作。
  4. 现在,问题是,用户显然可以编辑cookie的内容,在Web应用程序之外或使用javascript。

    这里的正确方法是什么,以确保用户名cookie不会以任何方式受到损害,其他方式是我的网络应用程序?

    我认为,将它们设为只读是不可能的。我想,加密cookie然后解密可能会有效。然后,cookie对用户来说是无意义的,如果被修改,则导致注销,因为在解密编辑的cookie时没有找到有效的用户名。

    我跟踪了谷歌的谷歌饼干,似乎有很多xxID饼干,其中包含垃圾。这是否意味着,加密/解密是使其工作的唯一方法?我还考虑了某种登录票,但每次用户与我的网页交互时都需要进行表查找。

    任何人都可以给我一个关于什么是正确方法的提示?

    提前致谢 最好的祝福, 卡斯滕海特曼

1 个答案:

答案 0 :(得分:0)

您应该查找会话管理了解您正在使用的语言。

传统的方法是,当用户登录时,您的应用程序会生成一个长的加密随机令牌,称为"会话ID"并将其设置为cookie。它存储的数据类似于由随机值标识的服务器端登录的人员,因此当登录用户返回时,浏览器会发送带有随机会话ID的cookie,应用程序可以在服务器端查找会话数据。这样,攻击者就无法猜测登录用户的有效会话ID,假设会话ID是加密随机且足够长(更确切地说,它意味着它具有足够的熵)。注销意味着删除服务器端的会话数据,并删除co​​okie,但这不是最重要的部分 - 无论如何会话都将无效。

请注意,您不应自行编码。您没有提到您正在开发的语言和环境,但是如果您想要保护它,会话管理是相当棘手的业务,并且它已经由大多数语言/框架提供。

只是出于好奇,你提到的加密方法是有效的。有些框架实际上是这样做的,但是你也不应该尝试编写代码,因为它很容易弄错,需要注意很多事情以使其足够安全。不幸的是,这里的答案并不是正确的格式,我很害怕。

你提到看谷歌了。他们使用自己的单点登录解决方案,与简单的会话管理相比,它非常复杂,因此它可能不是您查看的最佳示例。找到简单的网站,其中大部分以传统方式工作。