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框架設計可實現安全性:識別關鍵業務需求,優先考慮相關安全要求。制定彈性安全策略,分層應對威脅,定期調整。考慮架構靈活性,支援業務演變,抽象安全功能。優先考慮效率和可用性,優化安全措施,提高可見度。
