【问题标题】:Is it possible to fake a session in PHP by setting cookies on client side using JS?是否可以通过使用 JS 在客户端设置 cookie 来伪造 PHP 中的会话?
【发布时间】:2016-11-19 20:25:25
【问题描述】:

据推测,我在 PHP Web 应用程序上的会话中没有使用 HttpOnly cookie。如果访问者在使用 PHP 会话的页面上,他们可以看到会话 cookie。除了查看之外,他们还可以删除或编辑它。

下一个案例涉及用户在我的 Web 应用程序上的一个页面(例如,普通页面)上不使用会话,并且普通页面包含指向使用会话的页面(会话页面)的链接,具有,@ 987654321@。在普通页面上,如果设置了一个与我用于会话页面的 cookie 同名的 cookie(比如使用控制台),并且点击了指向会话页面的链接,那么当我执行 session_start() 时会发生什么在会话页面上?

它是创建一个新会话,还是尝试使用从正常页面发送的 cookie 中的值映射到一个会话?

如果它映射到现有会话值,则称该会话被劫持。没有映射的情况下会发生什么?它是否会创建具有新值的会话 cookie?

即使我在会话中使用 HttpOnly,也可以确定无法在客户端使用 JS 读取或操作会话 cookie。但是在服务器上,服务器是否在客户端发送到服务器的会话 cookie 上读取相同的(HttpOnly)并使会话无效,以防它不是 HttpOnly?还是尝试将值映射到服务器上的现有会话?

希望我能说清楚。

【问题讨论】:

  • 我不确定你的问题到底是什么。但是 HttpOnly 标志对服务器来说并不重要。该标志与客户相关。如果已设置,则浏览器不会让 javascript 访问 cookie。服务器不知道哪些 cookie 有 HttpOnly 标志,这无关紧要。
  • @CharlotteDunois 你不明白什么?也许,我可以澄清一下。
  • 如果您设置了正确的 cookie 值,是的,您可以窃取会话。
  • 如果我设置了错误的 cookie 值,它不会映射到实际会话怎么办? session_start() 是否会向会话 cookie 写入新值或尝试读取错误值的会话,这意味着设置的会话变量实际上都不存在?
  • 然后 PHP 将开始一个新的会话。

标签: javascript php session cookies


【解决方案1】:

会话在 PHP 中是这样工作的。

当用户第一次访问该站点并且 PHP 有 session_start() 时,它会检查用户是否正在发送带有会话 ID 的 cookie。如果不是,那么它会创建一个并发送它,以便用户将其存储在 cookie 中。然后当用户访问另一个页面时,session_start() 可以检查他们是否已经有一个 cookie,这次他们有。关闭浏览器时会清除会话 cookie(存储在用户电脑上)。

session_start() 不会在每次调用时都创建一个新会话。它所做的是提取有关该会话的信息,以便可以在代码中进一步使用它。当用户从他们的 cookie 发送会话 ID 时,session_start() 然后从 Web 服务器中提取有关此会话的存储信息,以便您可以执行诸如在他们的会话中将 adminloggedin 存储为 true 或 false 之类的操作。如果用户没有发送会话 ID,那么它不会从服务器中提取任何信息,而只是创建一个 ID 并将其发送回用户以存储在 cookie 中。

您不需要在每个页面上都使用session_start(),但是如果您需要从用户会话中检查某些内容,例如他们是否已登录,那么您需要调用它以获取有关他们会话的数据。

有关会话的所有信息都存储在服务器端。例如,如果我说用户已登录并将其存储在会话中,则可以检查它以允许访问管理页面。用户无法伪造这一点,因为他们发送的只是会话 ID,并且有关会话的所有数据都存储在服务器端。他们没有存储包含会话信息的 cookie,他们存储的只是发送的会话 ID。

【讨论】:

  • 会话不能伪造,但会话可以被劫持。
  • 那你说什么,当我想使用被劫持的会话来代表受害者时。如果应用程序不允许通过 GET 参数传递会话值,您将如何做到这一点。 @Hallur?
  • 我不确定我是否完全理解您的要求。您永远不会使用 GET 发送会话值。
  • 我知道这是可能的,但在少数情况下不应使用 expect 。对于几乎任何项目,这都是不好的做法,因为您更有可能发生会话劫持,因为用户可以在不了解参数含义的情况下共享 URL。您将需要大量额外的服务器端检查,以防止通过对会话使用 GET 参数来进行会话劫持。
猜你喜欢
  • 1970-01-01
  • 2018-10-30
  • 1970-01-01
  • 1970-01-01
  • 2011-02-24
  • 2021-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多