gpt4 book ai didi

php - PHP session 劫持

转载 作者:IT王子 更新时间:2023-10-29 00:01:04 29 4
gpt4 key购买 nike

我有一个关于PHP中 session 劫持的问题。我今天早上一直在阅读有关它的信息,我有一些问题在我阅读的文档中并未得到明确回答。

用户可以更改他们在我的网站上的 session 吗?也就是说,如果他们在登录时拥有X session ,是否可以选择将该 session 更改为Y或Z?

我以为 session 是由浏览器设置的,无法更改,但是我一直在阅读的所有 session 劫持内容都使我心存疑虑。

最佳答案

术语“ session ”被重载以表示服务器上和浏览器中的不同内容。浏览器 session 最多只能与服务器 session 紧密连接。 “ session 劫持”是指服务器sessions

在服务器端, session 具有一个ID(在客户端和服务器之间传递),内容(存储在服务器上)以及可能的其他属性(例如上次访问时间)。 session ID通常以cookie的形式传递。在PHP中,cookie的默认名称为“PHPSESSID”。如果没有cookie,PHP将(可选)使用同名的查询字符串参数(“PHPSESSID”)。此cookie(或查询参数)可以轻松更改,因此 session 标识符也可以更改。

session 的内容(即包含用户的登录状态)不能由客户端更改,数据存储在服务器上,只能由该服务器上的PHP脚本更改。请注意,在共享主机环境(由其他服务或用户共享)中,如果使用默认 session 存储目录(/tmp),则可以覆盖 session 。为了防止这种情况,要么通过 session_set_save_handler() 使用数据库,要么使用 session.save_path 设置一个具有适当目录权限的自定义 session 目录(最好设置为700,这意味着只有所有者(PHP用户)才能对其进行读写)。

为了防止 session 劫持,您必须具有其他方法可以根据 session 识别用户。这可以是用户代理,IP地址或其他cookie。前面提到的方法只是解决方法,如果涉及到 session ,则最好使用HTTPS来防止 session cookie被窃取,这是最好的方法。不要忘记使用 httponly true标志设置为session_set_cookie_params()
在客户端,“ session ”再次过载并在各种上下文中使用(例如, session 管理器,当打开浏览器时, session 管理器会还原打开的页面, session cookie和 sessionStorage )。我们可以说浏览器 session 由 View 及其相关数据的集合组成,以尝试将这些含义组合在一起(绝不是标准的含义)。 (通过“ View ”,我指的是带标签的浏览器中的选项卡,而非带标签的浏览器中的窗口; DOM window对象向JS公开一个 View 。)每个 View 都有一个历史记录,一个当前页面和页面数据。 session 中的 View 之间共享同一域中页面的页面数据;如果两个页面位于不同的域或不同的 session 中,则它们不共享数据。退出浏览器会关闭所有打开的 session ,可能会保存部分 session (例如历史记录,当前页面,sessionStorage),以便 session 管理器可以重新打开它们。 session cookie是在 session 关闭时被丢弃的cookie。换句话说, session cookie是非持久性的。尽管 session cookie可以保存 session ID,但是这两个概念是orthogonal(意义4; session cookie可以保存 session ID以外的内容,并且可以将 session ID存储在持久性cookie中)。

同一集合中是否有两个不同的 View 取决于浏览器。例如,一个浏览器可能认为一个 session 由一个窗口中的所有选项卡组成;单独的窗口是单独的 session 。 IE8允许用户通过“新 session ”菜单项创建新 session 。否则,将在同一 session 中打开新的窗口和选项卡。隐私模式还会创建新的 session 。

总而言之,浏览器 session 确实是由浏览器设置的,尽管它为用户提供了多种控制浏览器 session 的方式:创建新 session ,通过浏览,保存和还原 session 来更改 View 中的历史记录和当前页面。用户甚至可以通过编辑保存在磁盘上的 session 来更改 session 数据,尽管这不是浏览器提供的功能。这些都与 session 劫持无关。服务器 session 由服务器创建和管理,但是用户可以(尝试)通过更改其浏览器传递回服务器的 session ID来切换服务器 session ,这是 session 劫持的基础。

另请参见PHP Session Fixation / Hijacking

关于php - PHP session 劫持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6483092/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com