javascript - 是否可以通过使用 JS 在客户端设置 cookie 来伪造 PHP 中的 session ?

标签 javascript php session cookies

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

下一个案例涉及用户在我的网络应用程序中不使用 session 的页面(比如普通页面),普通页面包含指向使用 session 的页面( session 页面)的链接,具有, session 开始()。在普通页面上,如果设置了一个 cookie(比如使用控制台),其名称与我用于 session 页面的名称相同,并且单击是在 session 页面的链接上进行的,那么当我执行 时会发生什么 session 页面上的 session_start()

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

如果它映射到现有 session 值,则称该 session 被劫持。如果不映射会发生什么情况?它会创建一个具有新值的 session cookie 吗?

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

希望我能说清楚。

最佳答案

session 在 PHP 中是这样工作的。

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

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

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

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

关于javascript - 是否可以通过使用 JS 在客户端设置 cookie 来伪造 PHP 中的 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40697540/

相关文章:

javascript - 如何计算已选中的 mat-radio-button 的数量? Angular

javascript - Photoshop JavaScript 将图像和 Canvas 调整为特定(非正方形)大小

php - 如何在 PHPUnit 测试中启动 InternetExplorerDriver

php - 销毁特定用户的所有 session

session - Socket.io 和 session 数据

javascript - JSON 响应与颜色数据的部分键不正确匹配

javascript - 处理事件监听器的最有效方法是什么?

PHPExcel:如何从一行或一系列单元格中获取样式并将其应用于另一个单元格

php - 使用 Yii2 在邮件中嵌入图像时出错

security - 如何安全地进行跨域认证?