显然,人们应该在创建会话时对会话进行清理,但人们在使用会话之前对会话进行消毒的想法是什么?
答案 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)