我应该在PHP中清理我的会话吗?

时间:2010-06-22 21:32:08

标签: php

显然,人们应该在创建会话时对会话进行清理,但人们在使用会话之前对会话进行消毒的想法是什么?

2 个答案:

答案 0 :(得分:5)

关于标准会话的一些基础知识(使用cookies):
当用户首次访问您的网站时,session_start()将使用哈希作为文件名创建一个文件(或多或少随机(*)(请参阅session_save_path ())。
PHP将在该文件中存储所有$ _SESSION变量。同时,用户获得具有该哈希(会话ID)的cookie 用户是否请求其他站点(使用会话ID发送cookie)PHP将检查具有该哈希的文件是否存在。如果是这样,其中的所有内容都将被读入$ _SESSION。

用户与之联系的所有内容都是哈希。只要您清理掉写入$ _SESSION(来自用户)的所有内容,就无需在读取这些值时再次检查。


你需要做的就是尽可能地(从你身边)尽可能地“窃取”会话ID(或者使用它)。

一个好的开始是只允许使用cookies。 URL中的会话ID最终由搜索引擎复制/粘贴或缓存

ini_set('session.use_cookies'     ,1);
ini_set('session.use_only_cookies',1);
ini_set('session.use_trans_sid'   ,0);
在session_start()之前

应该执行此操作,有关详细信息,请参阅Session Configuration


删除当前会话,创建一个新会话(新哈希)会迫使可能的攻击者快速采取行动

session_regenerate_id(true);
在session_start()完成后,

。 (session_regenerate_id())


保存用户IP(部分)并在会话发生变化时销毁会话是另一种选择

// first call:    
$_SESSION['userip'] = $_SERVER['REMOTE_ADDR'];

//following calls:
if ($_SESSION['userip'] != $_SERVER['REMOTE_ADDR']) { session_destroy(); } 

你可能会遇到麻烦,因为可能会有一些用户频繁更改IP ..其他$ _SERVER变量也可以使用(例如$ _SERVER ['HTTP_USER_AGENT'])。 (Predefined Variables


还有一些其他的事情你可以做(​​加密SID,所以人们不会知道文件名,HTTPS总是很好,..),但这应该让你开始。 Google肯定会在“session security”上找到一些不错的教程。

编辑:固定链接。

答案 1 :(得分:1)

  

我应该在php中清理我的会话吗?

是的,因为所谓的:

另见:

PHP Security Guide: Sessions