php5 的 session 详解之三:SESSION 安全
会话模块不能保证存放在会话中的信息只能被创建该会话的用户看到。根据其存放的数据,还需要采取更多措施来主动保护会话的完整性。 评估会话中携带的数据并实施附加保护措施通常要付出代价,降低用户的方便程度。例如,如果要保护用户免于受简单的社交策略侵害(
会话模块不能保证存放在会话中的信息只能被创建该会话的用户看到。根据其存放的数据,还需要采取更多措施来主动保护会话的完整性。
评估会话中携带的数据并实施附加保护措施通常要付出代价,降低用户的方便程度。例如,如果要保护用户免于受简单的社交策略侵害(注:指在 URL 中显示的会话 ID 会被别人在电脑屏幕上看到,或被别的网站通过 HTTP Referer得到等),则应该启用 session.use_only_cookies。此情形下,客户端必须无条件启用 cookie,否则会话就不工作。有几种途径会将现有的会话 ID 泄露给第三方。泄露出的会话 ID 使第三方能够访问所有与指定 ID 相关联的资源。第一,URL 携带会话 ID。如果连接到外部站点,包含有会话 ID 的 URL 可能会被存在外部站点的 Referer 日志中。
第二,较主动的攻击者可能会侦听网段的数据包。如果未加密,会话ID会以明文方式在网络中流过。对此的解决方式是在服务器上实施SSL并强制用户使用。默认情况下,所有与特定会话相关的数据都被存储在由INI选项session.save_path 指定的目录下的一个文件中。对每个会话会建立一个文件(不论是否有数据与该会话相关)。这是由于每打开一个会话即建立一个文件,不论是否有数据写入到该文件中。注意由于和文件系统协同工作的限制,此行为有个副作用,有可能造成用户定制的会话处理器(例如用数据库)丢失了未存储数据的会话。上面介绍的函数下文将会用到,但还有一些有关 session 的函数也介绍一下:session_encode
函数功能:sesssion 信息编码
函数原型:string session_encode(void);返回值:字符串
功能说明:返回的字符串中包含全局变量中各变量的名称与值,形式如:a|s:12:"it is a test\";c|s:4:"lala"; a 是变量名 s:12 代表变量 a 的值"it is a test 的长度是 12 变量间用分号”;”分隔。
session_decode
函数功能:sesssion 信息解码函数原型:boolean session_decode (string data)
返回值:布尔值功能说明:这个函数可将 session 信息解码,成功则返回逻辑值 true
Php5 不再使用 session_id,而是把它变成一个常量 SID,并保存在 cookie 中。如果客户端禁用了cookie,php 会自动通过 url 自动传动传递 SID,其条件是设置php.ini中的 session.use_trans_sid = 1。此时即使客户端即使禁用了 cookie也没关系了。用 strip_tags() 来输出 SID 以避免 XSS 相关的攻击。
Session 跨页传递问题:
session 跨页传递需要考虑三种情况:
1客户端禁用了 cookie。2浏览器出现问题,暂时无法存取 cookie
3 php.ini 中 的 session.use_trans_sid = 0 或者编译时没有打开--enable-trans-sid选项
为什么会这样呢?下面解释一下原因:
Session 文件分为两部分:session 变量保存在服务器端(默认以文件方式存储session);而 session id 则以 cookie 形式保存在客户端。(注意:session 默认是基于 cookie 的)。当用户的浏览器向服务器提出请求时,同时发送包含session id的cookie(默认情况下)。服务器根据客户端提供的 session id 来得到用户的文件,即保存在服务器端的 session 变量值。事实上,session id 可以使用客户端的Cookie 或者 Http1.1 协议的 Query_String(就是访问的 URL 的“?”后面的部分)来传送给服务器,然后服务器读取 Session 的目录......。也就是说,session id是取得存储在服务上的 session 变量的身份证。当代码session_start();运行的时候,就在服务器上产生了一个 session 文件,随之也产生了与之唯一对应的一个 session id,定义 session 变量以一定形式存储在刚才产生的 session 文件中。通过 session id,可以取出定义的变量。跨页后,为了使用 session,你必须又执行 session_start();将又会产生一个 session 文件,与之对应产生相应的session id( 注 : 又 会 产 生 是 有 条 件 的 , 如 果 用 户 没 有 禁 止 Cookie 的话,session id 是可以隐藏的传过去的,也就是说不会产生新的 session id,但如果禁止了 Cookie 的话,就需要手动传递 session id 来解决此问题了,见例 2)),用这个session id 是取不出前面提到的第一个session文件中的变量的,因为这个session id 不是打开它的“钥匙”。如果在 session_start();之前加代码session_id($session id);将不产生新的 session 文件,直接读取与这个 id 对应的 session 文件。PHP中的session在默认情况下是使用客户端的 Cookie 来保存 session id的,所以当客户端的 cookie 出现问题的时候就会影响 session 了。必须注意的是:
session不一定必须依赖cookie,这也是session相比 cookie 的高明之处。当客户端的Cookie被禁用或出现问题时,PHP会自动把 session id 附着在 URL 中,这样再通过 session id 就能跨页使用 session 变量了。但这种附着也是有一定条件的,
其一:“php.ini 中的 session.use_trans_sid = 1 或者编译时打开打开了--enable-trans-sid 选项”;
其二:运行 PHP 的服务器必须是 unix/linux系统,windows 不具备此项功能。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

在Windows11操作系统中,安全中心是一个重要的功能,它帮助用户监控系统安全状态、防御恶意软件和保护个人隐私。然而,有时候用户可能需要临时关闭安全中心,例如在安装某些软件或进行系统调优时。本文将详细介绍Windows11安全中心的关闭方法,帮助您正确和安全地操作系统。1.如何关闭Windows11安全中心在Windows11中,关闭安全中心并不

Windows操作系统作为全球用户数量最庞大的操作系统之一,一直以来备受用户青睐。然而,在使用Windows系统时,用户们可能会遇到诸多安全隐患,如病毒攻击、恶意软件等威胁。为了强化系统安全,Windows系统内置了许多安全保护机制,其中之一便是Windows安全中心的实时保护功能。今天,我们将会详细介绍Windows安全中心实时保护的关闭方法。首先,让我们

在今天的数字化社会中,计算机已经成为我们生活中不可或缺的一部分。而作为最为普及的操作系统之一,Windows系统在全球范围内被广泛使用。然而,随着网络攻击手段的不断升级,保护个人计算机安全变得尤为重要。Windows操作系统提供了一系列的安全功能,其中“Windows安全中心”是其重要组成部分之一。在Windows系统中,“Windows安全中心”可帮助我们

在使用C++实现机器学习算法时,安全考虑至关重要,包括数据隐私、模型篡改和输入验证。最佳实践包括采用安全库、最小化权限、使用沙盒和持续监控。实战案例中展示了使用Botan库对CNN模型进行加密和解密,以确保安全训练和预测。

为保护Struts2应用程序,可以使用以下安全配置:禁用未使用的功能启用内容类型检查验证输入启用安全令牌防止CSRF攻击使用RBAC限制基于角色的访问

Slim和Phalcon在PHP微框架的安全性对比中,Phalcon内置有CSRF和XSS防护、表单验证等安全特性,而Slim缺乏开箱即用的安全特性,需手动实施安全措施。对于安全至关重要的应用程序,Phalcon提供了更全面的保护,是更好的选择。

如何增强SpringBoot框架的安全性增强SpringBoot应用的安全至关重要,以保护用户数据和防止攻击。以下是增强SpringBoot安全性的几个关键步骤:1.启用HTTPS使用HTTPS在服务器和客户端之间建立安全的连接,防止信息被窃听或篡改。在SpringBoot中,可以通过在application.properties中配置以下内容来启用HTTPS:server.ssl.key-store=path/to/keystore.jksserver.ssl.k

通过平衡安全需求和业务需求,Java框架设计可实现安全:识别关键业务需求,优先考虑相关安全要求。制定弹性安全策略,分层应对威胁,定期调整。考虑架构灵活性,支持业务演变,抽象安全功能。优先考虑效率和可用性,优化安全措施,提高可见性。
