SESSION机制及其安全管理

来自Vett的博客

很多关于PHP的书都会介绍SESSION机制.但是往往介绍如何去使用,很少提及SESSION安全性雷区,如何正确的使用SESSION?

SESSION机制

为什么要有SESSION机制?

因为,HTTP协议是无状态的,SESSION是用于维持访问状态,区分访问者的机制.比如在没有SESSION机制的前提下,想让服务器完成每个访问者的个性化定制是不可能是事情.你可能会想到使用IP和UA等信息区分客户,但是在局域网通过网关连接广域网的时候就不能起作用,而且一旦涉及到登录等敏感操作的时候需要更加稳定,难以伪造的用户区分机制,这样就有了SESSION.

什么是SESSION机制?

SESSION是将用户信息存储在服务器上,并通过Cookie或URL传递一个SessionID给用户,与该用户的信息一一对应的机制.用户通过传递SessionID向服务器表明自己的身份.服务器通过传来的SessionID,确定用户的状态.

表面上看,SESSION是非常巧妙的安全的设计,它使得HTTP可以维持状态,在用户体验上得分不少.但是,不正确的使用SESSION会使得网站安全岌岌可危,甚至造成不可挽回的失误.

SESSION安全

由于SessionID就像一把钥匙,获取了这把钥匙,就获取了用户数据.所以,SESSION的攻击就集中在如何获取SessionID上.基本上可以分为两种情况:

  1. 截获SessionID
  2. 诱导持有SessionID的用户执行特定操作

截获SessionID只能作用于设计不良的网站上,或者浏览器安全性存在巨大隐患的场景中.第二条是CSRF攻击的基础.基本上对于SESSION低成本的攻击都可以归类为这两种.

值得注意的是CSRF攻击的预防,不能仅仅止步于对SESSION的管理上,而是要通过表单中插入Token等,只是CSRF攻击以SESSION机制作为其根本.

PHP中SESSION的安全性

以下是常见的几种攻击和防范方法:

1. 关闭session.use_trans_sid

session.use_trans_sid: 在没有开启cookie的网站上允许通过URL传递SessionID.

开启这项配置,攻击者可以通过迷惑用户使用带有SessionID的的URL访问目标网站,之后用户在此SessionID下留有的信息,对于攻击者都是可见的.

在关闭这项配置的时候也可以使用JavaScript读取用户cookie中的SessionID.

例如:
A网站存在上述缺陷,小明点击黑客提供的链接a.com/?ssid=aabbcc访问了网站A,并在该网站登录,然后退出.这时黑客在使用链接a.com/?ssid=aabbcc登录后发现正处于登录状态,然后进行非法操作.

如果a.com网站关闭session.use_trans_sid配置,这样小明就无法登录,因为禁用了cookie.这样虽然对用户体验很不友好,但是绝大多数成熟网站都是这样做的.更进一步,应该开启session.use_strict_mode防止类似aabbcc这种未初始化的SessionID被使用,但是黑客可以将aabbcc改为a.com正常生成的SessionID,虽然作用有限,但是强烈建议开启这个配置.

假设a.com关闭了session.use_trans_sid配置,小明也可以正常接收cookie,那么攻击还会发生吗?

2. 开启session.cookie_httponly

网站a.com强制要求用户使用cookie来接收SessionID.

这时黑客升级了自己的攻击方案,在a.com通过XSS,在小明经常访问的页面评论区注入了JavaScript脚本用来直接获取小明浏览器中的cookie数据.虽然攻击难度加大,但是小明会在毫不知情的情况下暴露SessionID.

网站a.com只要对用户的评论信息做转义就可以有效的防止XSS注入.这不属于SESSION安全的范畴,但是的确可以通过这种方法保护SessionID.最主要的是开启session.cookie_httponly,杜绝使用JavaScript读取cookie.但是这个设置有个前提,就是用户使用高质量的浏览器,因为这个设置只能起到通知浏览器的作用,具体逻辑是由浏览器实现的.

3.在表单中使用Token

网站a.com做了XSS防范,并且开启了session.cookie_httponly.

黑客继续升级自己的攻击方案,在自己的网站上使用JavaScript恶意向目标网站a.com提交表单,一旦小明开始向a.com提交,a.com索要SessionID,小明的浏览器就自动将SessionID传给a.com,根据表单的含义,黑客就可以简介的控制小明在a.com上的行为.这种方法就是常见CSRF的一种.

那么,a.com如何甄别提交表单的是小明还是黑客呢?就是在表单中加入隐藏的一个Token,或使用验证码,如果是黑客,这个Token是无法伪造的,而且验证码攻破难度在现如今几乎是不可能的.这样,a.com检测到的Token或验证码错误的情况下,不予操作.

其他工作

这样一来,a.com在面对常规的攻击时就能很好的应对了.还有一些工作也要跟进,防患于未然.

1. 尽可能频繁的更换SessionID

比如在登录成功后为用户更换SessionID.

2. 敏感操作时二次验证

例如支付时要求输入密码或验证码.

3. 编写可靠的SESSION回收程序

PHP的SESSION在过期后不会被立即删除,而是要等待gc(垃圾清理)程序不定期清理.高可靠性的网站应该尽量自己实现gc,在SESSION过期后尽可能快的删除.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容