【问题标题】:PHP user authentication tutorial without sessions没有会话的PHP用户认证教程
【发布时间】:2012-03-04 12:26:40
【问题描述】:

我需要在不使用 php 会话(仅 cookie)的情况下为计算机安全项目的一部分构建自己的系统,而我只是迷路了。我发现所有教程都使用会话(有充分的理由),所以我想知道是否有人知道你自己的 php 用户身份验证教程。

【问题讨论】:

  • 显而易见的问题是为什么不使用会话?
  • 教授在作业中写道不要使用它们。这项任务实际上是关于实现我自己的安全功能,并且从 waht ive read session 中处理了很多。
  • 本质上,您会以同样的方式进行操作。您只需将状态保存在 cookie 中而不是会话中。尝试谷歌搜索如何在 PHP 中一般使用 cookie。如果你不能让他们工作,就回来。另外,谁告诉你 session 负责 cookie 不负责的安全功能?除非您的小妹妹偷偷进入计算机读取您浏览器的 cookie 文件,否则从安全角度来看,它们并没有太大区别。会话需要启用 cookie 才能运行。
  • @Dagon 你是个傻瓜:大多数会话仍然使用 cookie 来发送和存储会话 ID。教授故意要求他尝试重新发明会话。我很确定教授不希望自己的创作在“现实世界”中被使用,但自己动手解决实际问题是非常有价值的。它已经完成的事实并没有降低价值。
  • @LeviMorrison 说我疯了,但我看不出教学生如何抽象地思考一个实际的、现实世界的编程问题的价值。这就是你的数学课的目的。在那里教解决问题。您的 COMPSCI 课程应该教您如何最好地正确解决现实世界中的问题。此外,PHP 真的是用于教授问题解决的最佳语言吗?呃……可能不会。

标签: php cookies authentication


【解决方案1】:

会话会更容易。话虽如此,你在哪里卡住了伙计?

要开始在 PHP 中使用 Cookie,请查看:http://www.w3schools.com/php/php_cookies.asp

你也可以

  • 按照 s1lence 的建议实现您自己的 Session 处理(这可能正是教授希望您做的)或
  • 通过将会话 ID 附加到 QueryString 来实现您自己的会话处理(使其适用于非 cookie 浏览器)或
  • 您可以将用户/密码对存储在 cookie 中(这会强制您为每个请求重新验证用户身份)

我不推荐后者,但如果这完全是为了避免会话机制,我猜这是一个选项。最后一点,如果这与理解为什么 Session 很重要无关,那么您应该真正质疑您的教师任务.. ;)

【讨论】:

  • 他确实希望我们实现自己的会话处理
【解决方案2】:

你基本上可以像你自己一样实现一些会话。

这将包括以下任务:

  • 为新用户生成一个随机会话 ID(或在登录时 - 基于确切的使用...)
  • 将其保存到 cookie 中
  • 将额外的会话信息与会话 ID 一起保存在服务器的某处(例如,在数据库表中)
  • 在后续页面访问中,检查 cookie 中的会话 ID 与网络服务器上的数据,以识别用户并授予访问权限

但是应该提到的是,仅基于 cookie 的解决方案永远不会那么好。例如,如果客户端没有启用 cookie,它将根本无法工作。一个可能的解决方案是,如果未启用 cookie,则将会话 ID 作为 GET 参数与每个内部链接一起发送。

【讨论】:

  • 我打算写基本相同的东西,所以我只会 +1 并添加 link about sessions and cookies
  • +1 我刚刚写了同样的答案,但为了这个而放弃了它。
  • 谢谢,在这个答案和阅读如何在 PHP 中使用 cookie 之间,我认为我准备好了。
【解决方案3】:

您不应将 cookie 用于此类系统,因为 cookie 存储在客户端。任何人都可以改变它。会话存储在服务器端,只有您可以更改它(如果您将会话存储在数据库中,其他系统用户也可以更改它,如果他们具有目录访问权限或数据库访问权限)。如果您强烈需要使用cookie,您可以加密登录名/密码可以写入cookie,但使用会话更安全。

【讨论】:

  • 这是一个可疑的建议,因为会话 ID 仍必须存储在客户端的 cookie 文件中。如果恶意人员可以访问客户端的系统,那么会话并不比 cookie 更安全。
  • @rdlowrey 关键是用户可以反序列化 cookie 并操作存储在其中的脚本变量,例如设置 $user_is_admin = true,并且脚本将在下一个请求期间重新读取操作数据,并且认为用户拥有比他实际拥有的更多的权利。仅存储会话 ID 更安全,因为客户端首先必须获取分配给管理会话的 ID。
  • @the-banana-king 安全与合法用户无关,它与恶意用户有关,更不用说即使$_SESSION 数据也应该在客户端进行验证。对于恶意人员来说,您呈现的场景并不比访问会话 ID cookie 更难管理。此外,它还假设内部应用程序设计和数据验证不佳:一个不受使用会话与 cookie 影响的故障。所以是的,如果您不打算正确保护您的应用程序,那么会话可能比 cookie 安全 1%。
  • @rdlowrey 事实上,我说的是一个恶意客户端,他想要扩展他们的权限或利用能够更改应用程序的其他一些内部状态。如果您只有一个会话 ID,则作为客户端的您无法更改服务器端附加到它的任何数据,除非脚本允许您这样做。
  • 我想我们在谈论不同的方面。我同意通过窃取会话 ID 进行身份验证就像从客户端的 cookie 中窃取完整凭据一样容易,但是劫持会话可以让您访问直到它变得无效,而获取用户名和密码可以让您根据需要随时重新进行身份验证.因此存储会话 ID 仍然更加安全。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 2017-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-27
相关资源
最近更新 更多