PHP会话会话的安全性分析

从而达到方便快捷的目的,但当它存储信息时,就会出现一些敏感的东西。这些东西可能成为目标,如银行帐户、信用卡交易或文件记录。这就要求在编写代码时,必须采取安全措施以减少成功攻击的可能性。

主要的安全措施有以下两个方面。

1,防止攻击者获取用户会话ID.

很多访问会话ID,攻击者可以通过查看明文通信获得,所以会话ID的URL或通过加密连接传输的饼干是很危险的;而在URL(如_get)(参数)传递会话ID是不安全的,因为历史上存储的URL浏览器缓存,便于阅读。(你可以考虑使用SSH加密传输)

有一种更微妙的攻击方式。攻击者通过一个被脚本攻击破坏的Web站点,将受损站点上的用户重定向到另一个站点,然后将下列代码插入重定向站点的URL中。
213456465412312365465412312 PHPSESSID =;

最后,它被发送到Web应用程序。当用户查看Web应用程序时,PHP找不到与会话ID相关的数据并创建一些数据。用户不知道发生了什么,但是攻击者知道会话ID,并且可以使用此会话ID输入应用程序。

有两种方法可以防止这种攻击。
(1)检查session.use_only_cookie打开php.ini.if这种情况,PHP将拒绝基于URL的会话ID。
(2)启动一个会话时,在会话数据的一个变量,变量表示会议是由用户创建的;如果没有这个变量会话数据,会话ID是假的,你可以打电话给session_regenerate_id函数为当前会话分配一个新的会话ID。

实例:

通过判断变量是否存在,它决定了真假的会话ID。如果它存在,它表明会话ID是真实的,否则是错误的,并使用session_regenerate_id()函数来改变会话ID,然后创建一个新会话的会话ID。

代码如下:
复制代码代码如下所示:
< PHP
session_start();
如果(!isset($ _session { 'shili1 ' })){ / / shili1确定一个变量的配置
old_id美元= session_id(ID); / /原始会话变量名
(session_regenerate_id); / /得到一个新的会话ID
new_id美元= session_id(ID); / /新的会话变量名
回声老old_id美元; / /输出原始会话ID
回声新new_id美元; / /输出新的会话ID
_session美元{ 'shili1} = true;}
>

运行结果如图所示。
这只是一个例子。输出会话ID是为了更好地理解和应用这个函数而设计的,但是在编程中,它不需要输出会话ID。

2,限制攻击者获取会话ID。

限制攻击者获取会话ID的方法如下所示。
(1)使用函数(MD5)在用户代理头添加到一些附加字符串数据之后计算散列值(散列)。(散列函数)接受任意大的数据集并将其转换成完全不同的数据。此数据非常短。生成的哈希值完全不可重复,也不能由另一个输入生成。

在用户代理字符串后面添加一些数据,攻击者不能通过计算公共代理值的MD5编码来测试用户代理字符串。

(2)编码的字符串保存在用户的会话数据中。
(3)每次从用户接收请求时检查哈希值。

此方案的代码如下所示:
复制代码代码如下所示:
< PHP
定义('ua_seed ','webapp);
session_start();
如果(!isset($ _session { 'user_agent ' })){
_session美元{ 'user_agent} = MD5($ _server { 'http_user_agent}。ua_seed);
其他{ }
如果($ _session { 'user_agent}!= MD5($ _server { 'http_user_agent}。ua_seed)){ } }
>

通过给攻击者造成一些麻烦,即使获得会话ID,攻击者也不能被销毁,这样可以减少对系统的损失。