Javascript 是否可以通过使用JS在客户端设置cookies来伪造PHP中的会话?

Javascript 是否可以通过使用JS在客户端设置cookies来伪造PHP中的会话?,javascript,php,session,cookies,Javascript,Php,Session,Cookies,据推测,我并没有在PHP web应用程序的会话中使用HttpOnly cookies。如果访问者位于使用PHP会话的页面上,他们可以看到会话cookie。除了查看,他们还可以删除或编辑它 下一个案例涉及到用户在我的web应用程序上不使用会话的页面(例如,普通页面),而普通页面包含指向使用会话的页面的链接(会话页面),具有,session\u start()。在普通页面上,如果设置了一个cookie(比如使用控制台),其名称与我用于会话页面的cookie名称相同,并且单击了会话页面的链接,那么在会

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

下一个案例涉及到用户在我的web应用程序上不使用会话的页面(例如,普通页面),而普通页面包含指向使用会话的页面的链接(会话页面),具有,
session\u start()
。在普通页面上,如果设置了一个cookie(比如使用控制台),其名称与我用于会话页面的cookie名称相同,并且单击了会话页面的链接,那么在会话页面上执行
session\u start()
时会发生什么情况

它是创建一个新会话,还是尝试并映射到从普通页面发送的cookie中的值的会话

如果它映射到现有会话值,则会话被称为被劫持。如果不映射,会发生什么情况?它是否使用新值创建会话cookie

即使我只在会话中使用HttpOnly,也不能在客户端使用JS读取或操纵会话cookie。但是在服务器上,服务器是否读取了客户端发送到服务器的会话cookie上的相同内容(HttpOnly)并使会话无效(如果不是HttpOnly)?或者它是否尝试将值映射到服务器上的现有会话


希望我能说清楚

会话在PHP中的工作方式如下

当用户第一次访问该站点时,PHP会检查用户是否发送带有会话ID的cookie。如果用户没有发送,则会创建一个cookie并发送,以便用户将其存储在cookie中。然后,当用户访问另一个页面时,
session\u start()
可以检查他们是否已经拥有cookie,而这一次他们确实拥有cookie。浏览器关闭时,将清除会话cookie(存储在用户pc上)

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

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


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

我不确定你的问题到底是什么。但是HttpOnly标志对于服务器并不重要。该标志用于与客户机相关的。如果设置了,则浏览器不允许javascript访问cookie。服务器不知道哪些Cookie具有HttpOnly标志,这无关紧要。@CharlotteDunois您不明白什么?也许,我可以澄清一下。如果你设置了正确的cookie值,是的,你可以偷取一个会话。如果我设置了错误的cookie值,它不会映射到实际会话呢?
session\u start()
会向会话cookie写入一个新值,还是尝试使用错误的值读取会话,这意味着设置的会话变量实际上都不存在?然后PHP会启动一个新会话。会话不能伪造,但会话可能被劫持。你怎么说,当我想用被劫持的会话来代表受害者时。如果应用程序不允许通过GET参数传递会话值,您将如何做到这一点@哈勒?我不确定我是否完全理解你的要求。您永远不会使用GET发送会话值。我知道这是可能的,但在少数情况下不应该使用它。对于几乎任何一个项目来说,这都是一种糟糕的做法,因为用户可能在没有意识到参数的含义的情况下共享URL,这使得会话劫持的可能性大大增加。您需要进行大量额外的服务器端检查,以通过使用会话的GET参数来防止会话劫持。