我有一个关于PHP会话劫持的问题。我今天早上一直在读它,我有几个问题在我读到的文档中没有得到明确的回答。
用户可以在我的网站上更改他们的会话吗?也就是说,如果他们在登录时有一个X会话,他们是否可以将该会话更改为Y或Z,如果他们愿意的话?
我以为会话是由浏览器设置的,不能更改,但我一直在读的这些会话劫持的东西让我产生了一些疑问。
发布于 2011-06-26 09:16:16
在服务器和浏览器中,术语“会话”被重载以表示不同的含义。浏览器会话充其量只能微妙地连接到服务器会话。会话劫持指的是服务端sessions。
在服务器端,会话具有ID (在客户端和服务器之间传递)、内容(存储在服务器上)以及可能的其他属性,例如上次访问时间。会话ID通常作为cookie传递。在PHP中,cookie的默认名称是"PHPSESSID“。如果cookie不可用,PHP将(可选)使用同名的查询字符串参数("PHPSESSID")。这个cookie (或查询参数)可以很容易地更改,因此会话标识符也可以更改。
客户端不能更改会话的内容(即包含用户的登录状态),数据存储在服务器上,并且只能由该服务器上的PHP脚本更改。请注意,在共享主机环境(由其他服务或用户共享)中,如果使用默认会话存储目录(/tmp
),会话可能会被覆盖。为了防止出现这种情况,可以通过session_set_save_handler()
使用数据库,或者使用session.save_path
设置一个自定义会话目录,并设置适当的目录权限(最好是700,这意味着只有所有者( PHP用户)可以对其进行读写)。
为了防止会话劫持,您必须有其他方法来识别会话中的用户。这可以是用户代理、IP地址或其他cookie。前面提到的方法只是变通方法,防止会话cookie被窃取的最好方法是在涉及会话的情况下使用HTTPS。不要忘记使用session_set_cookie_params()
将httponly
标志设置为true
在客户端,“会话”再次被重载,并在各种上下文中使用(例如,会话管理器,当浏览器打开时恢复打开的页面,会话cookie和sessionStorage
)。我们可以通过说浏览器会话由视图及其相关数据的集合组成,来尝试将这些含义组合在一起(形成一个绝对不是标准的含义)。(我所说的“视图”大致指的是选项卡式浏览器中的选项卡和非选项卡式浏览器中的窗口;DOM window
对象向JS公开视图。)每个视图都有历史记录、当前页面和页面数据。同一域中页面的页面数据在会话中的视图之间共享;如果两个页面位于不同的域或不同的会话中,则它们不共享数据。退出浏览器将关闭所有打开的会话,可能会保存部分会话(例如,历史记录、当前页面、sessionStorage
),以便会话管理器可以重新打开它们。会话cookies是在会话关闭时丢弃的cookies;换句话说,会话cookies是非持续性的。虽然会话cookie可以保存会话ID,但这两个概念是orthogonal (第4种意义;会话cookie可以保存会话ID以外的内容,会话ID可以存储在持久cookie中)。
两个不同的视图是否在同一个集合中取决于浏览器。例如,一个浏览器可能认为一个会话由单个窗口中的所有选项卡组成;单独的窗口是单独的会话。IE8允许用户通过“新建会话”菜单项创建新会话。否则,将在同一会话中打开新窗口和选项卡。隐私模式还会创建新的会话。
总而言之,浏览器会话实际上是由浏览器设置的,尽管它为用户提供了各种控制浏览器会话的方法:创建新会话,通过浏览更改视图中的历史记录和当前页面,保存和恢复会话。用户甚至可以通过编辑保存在磁盘上的会话来更改会话数据,尽管这不是浏览器提供的功能。所有这些都与会话劫持没有任何关系。服务器会话由服务器创建和管理,但用户可以(尝试)通过更改浏览器传递回服务器的会话ID来切换服务器会话,这是会话劫持的基础。
发布于 2011-06-26 09:18:06
用户可以随时更改其会话。它只是一个存储在用户浏览器cookie中的随机字符串,因此用户更改它非常简单。
由于会话的实际内容存储在您的服务器上,例如,您可以存储用户的ip地址、用户代理或类似的内容,以便在每次发出新的http请求时检查这些信息是否仍然匹配,从而使窃取彼此的会话变得更加困难。
发布于 2019-07-20 18:05:08
不,实际上用户不能改变你网站的实际会话值,但可以改变用于跟踪会话的会话id。这个会话id由你的网站存储在客户端浏览器上,通常在cookie中命名为"PHPSESSID“,也称为会话cookie。当在站点上启动会话时,它将对应于该会话的唯一id以名为"PHPSESSID“的cookie的形式存储在相应的客户端浏览器中。因此,如果用户能够获得任何其他用户的PHPSESSID,并且可以将其PHPSESSID替换为受害者PHPSESSID,则将导致会话劫持。我在这里使用PHP上下文。
https://stackoverflow.com/questions/6483092
复制相似问题