Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >PHP会话劫持

PHP会话劫持
EN

Stack Overflow用户
提问于 2011-06-26 09:14:58
回答 3查看 35.3K关注 0票数 22

我有一个关于PHP会话劫持的问题。我今天早上一直在读它,我有几个问题在我读到的文档中没有得到明确的回答。

用户可以在我的网站上更改他们的会话吗?也就是说,如果他们在登录时有一个X会话,他们是否可以将该会话更改为Y或Z,如果他们愿意的话?

我以为会话是由浏览器设置的,不能更改,但我一直在读的这些会话劫持的东西让我产生了一些疑问。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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来切换服务器会话,这是会话劫持的基础。

另请参见PHP Session Fixation / Hijacking

票数 43
EN

Stack Overflow用户

发布于 2011-06-26 09:18:06

用户可以随时更改其会话。它只是一个存储在用户浏览器cookie中的随机字符串,因此用户更改它非常简单。

由于会话的实际内容存储在您的服务器上,例如,您可以存储用户的ip地址、用户代理或类似的内容,以便在每次发出新的http请求时检查这些信息是否仍然匹配,从而使窃取彼此的会话变得更加困难。

票数 3
EN

Stack Overflow用户

发布于 2019-07-20 18:05:08

不,实际上用户不能改变你网站的实际会话值,但可以改变用于跟踪会话的会话id。这个会话id由你的网站存储在客户端浏览器上,通常在cookie中命名为"PHPSESSID“,也称为会话cookie。当在站点上启动会话时,它将对应于该会话的唯一id以名为"PHPSESSID“的cookie的形式存储在相应的客户端浏览器中。因此,如果用户能够获得任何其他用户的PHPSESSID,并且可以将其PHPSESSID替换为受害者PHPSESSID,则将导致会话劫持。我在这里使用PHP上下文。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6483092

复制
相关文章
Java反射探索-----从类加载说起
林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka
bear_fish
2018/09/20
5220
Java反射探索-----从类加载说起
枚举帮助类
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Linq; 5 6 namespace EnumHelper 7 { 8 /// <summary> 9 /// 枚举帮助类 10 /// 1、获取枚举的描述文本 11 /// 2、获取枚举名和描述信息的列表 12 /// </summary> 13
用户6362579
2019/09/29
5380
日志帮助类
 1.代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Configuration; using System.Reflection; namespace LogHelper.Common { public class LogHelper { private string logFile
用户1055830
2018/01/18
6520
日志帮助类
从源码角度学习JVM类加载器及自定义类加载器
负责加载支撑JVM运行的位于JRE的lib目录下的核心类库,这个加载器是由C++写的,所以我们在java源码里面是找不到它的实现,如果尝试对它进行打印,输出将为空值。
AI码师
2022/12/22
3860
从源码角度学习JVM类加载器及自定义类加载器
内存泄漏 - 从Class类加载器说起
某公司技术人员针对企业应用系统12月10日内存溢出事件进行了广泛的技术探讨,并得到了一些建设性的建议和结论。
IT技术小咖
2019/09/24
2.9K0
内存泄漏 - 从Class类加载器说起
详细讲解!从JVM直到类加载器
整个过程是,x.java文件需要编译成x.class文件,通过类加载器加载到内存中,然后通过解释器或者即时编译器进行解释和编译,最后交给执行引擎执行,执行引擎操作OS硬件。
java技术爱好者
2020/09/22
4320
JVM | 从类加载到JVM内存结构
我在上篇文章:JVM | 基于类加载的一次完全实践 中为你讲解如何请“建筑工人”来做一些定制化的工作。但是,大型的Java应用程序时,材料(类)何止数万,我们直接堆放在工地上(JVM)上吗?相反,JVM有着一套精密的管理机制,来确保类的加载、验证、解析和初始化等任务能够有序且高效地完成。
kfaino
2023/10/02
2750
JVM | 从类加载到JVM内存结构
在成为CTO之前,程序员怎样赚外快?
作为一个码code的程序员,虽然可能没有朋友,比较宅,但是整体花销往往不比正常人少。VPS,域名,MAC还有一堆的收费软件,数码设备等,都是卖肾的节奏。 当然作为程序员,我们也可以有更多的赚钱姿势,如果你认为只有接私单,那么你就OUT了,我们看看有没有其他的方式呢? 私单 最理想的单子还是直接接海外的项目,比如freelance.com等网站。一方面是因为挣的是美刀比较划算,之前看到像给WordPress写支付+发送注册码这种大家一个周末就能做完的项目,也可以到200~300美刀;另一方面是在国外接单子比较
春哥大魔王
2018/04/16
1.8K0
原 数据接收和数据返回呈现,都用一个类代替
import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; import javax.servlet.http.HttpServletRequest; public class Record extends HashMap implements Map {     private static final lo
kinbug [进阶者]
2018/06/13
4500
Java类加载-加载
我们已经将整个Class的构成讲述完了,不清楚的同学可以看一下关于Class文件的介绍,但是空有Class并没有什么用,在Class中的各种描述信息都需要被加载到虚拟机以后才能运行使用。
shysh95
2021/02/25
1.3K0
Java类加载-加载
python 数据图表呈现
平时压力测试,生成一些数据后分析,直接看 log 不是很直观,前段时间看到公司同事分享了一个绘制图表python 模块 : plotly, 觉得很实用,利用周末时间熟悉下。
orientlu
2018/09/13
1.2K0
python 数据图表呈现
ajax请求完之前的loading加载
很多时候我们需要引入框架来开发项目,这时我们可能会遇到页面还没加载完源码出来了的问题,给用户一种不好的视觉体验,这是便需要loading加载了,来完善用户体验!
ProsperLee
2018/10/24
1.5K0
ajax请求完之前的loading加载
DevExpress数据绑定呈现
数据库这里为了方便演示,用的SQL Server 由于我数据库中的表有8列数据,这里添加8列,并设置列名和绑定的数据名称:
别团等shy哥发育
2023/02/27
1.6K0
DevExpress数据绑定呈现
类加载
其中类加载的过程包括了加载、验证、准备、解析、初始化五个阶段。在这五个阶段中,加载、验证、准备和初始化这四个阶段发生的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始,这是为了支持Java语言的运行时绑定(也成为动态绑定或晚期绑定)。另外注意这里的几个阶段是按顺序开始,而不是按顺序进行或完成,因为这些阶段通常都是互相交叉地混合进行的,通常在一个阶段执行的过程中调用或激活另一个阶段。
码农戏码
2021/03/23
4980
类加载
我们知道在运行Java程序时,首先需要把源代码编译成二进制文件也就是class文件,然后虚拟机才能执行。那虚拟机在执行class文件时,都进行了哪些步骤呢。下面我们将详细分享一下。当类也就是class文件被加载到虚拟机内存开始,到卸载出内存为止。它将要执行以下7个步骤:
吉林乌拉
2019/08/14
4970
类加载
启动类加载器,Bootstrap ClassLoader,加载JACA_HOME\lib,或者被-Xbootclasspath参数限定的类 扩展类加载器,Extension ClassLoader,加载\lib\ext,或者被java.ext.dirs系统变量指定的类 应用程序类加载器,Application ClassLoader,加载ClassPath中的类库 自定义类加载器,通过继承ClassLoader实现,一般是加载我们的自定义类
葆宁
2019/04/18
4850
类加载
【Android 逆向】类加载器 ClassLoader ( 启动类加载器 | 扩展类加载器 | 应用类加载器 | 类加载的双亲委托机制 )
类加载器加载类流程 : Bootstrap ClassLoader 先加载系统的核心类库 , Extention ClassLoader 加载额外的 /lib/ext 类库 , Application ClassLoader 加载开发者自己开发的类库 ;
韩曙亮
2023/03/30
8920
从ng1看ng2 关于NgModule的简易归纳
最近开始折腾ng2,其实说是ng2,到目前为止,它已经发布了4.3版,就是这么的高产,高产似*,我连2都还木有完整的看完它竟然发布了4.的版本(鄙视脸)。
littlelyon
2018/10/19
9550
写一个Foreach帮助类,在razor中使用
esterday, during my ASP.NET MVC 3 talk at Mix 11, I wrote a useful helper method demonstrating an advanced feature of Razor, Razor Templated Delegates.
javascript.shop
2019/09/04
4980
jvm怎么加载类_jvm类加载器
原因: 1、存放在自定义路径上的类,需要通过自定义类加载器去加载。【注意:AppClassLoader加载classpath下的类】 2、类不一定从文件中加载,也可能从网络中的流中加载,这就需要自定义加载器去实现加密解密。 3、可以定义类的实现机制,实现类的热部署, 如OSGi中的bundle模块就是通过实现自己的ClassLoader实现的, 如tomcat实现的自定义类加载模型。
全栈程序员站长
2022/10/29
4670

相似问题

Shell脚本在特定单词之后打印一定数量的单词

34

在shell脚本中从文件中选择特定的单词

20

在特定单词之后提取单词

30

在shell脚本中搜索特定的单词

34

PHP在某个单词之后选择单词

25
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档