Session安全性研究及应用
【摘要】本文深入研究了在身份认证中维持用户状态信息的重要对象Session的工作原理,并依据现有的理论基础,从Web应用程序中身份认证面临的实际问题出发,提出了非正式注销存在的安全性问题。论文结合Session的工作过程和利用浏览器的缓存技术,提出具有实用性的解决方案,使SessionWeb身份认证中的应用更加合理、有效,增加了身份认证的安全性。为了验证结论的有效性,将本文提出的解决方案应用于基于Web的网络考试系统中,证明了这种方案的适用性,达到本文的设计目的。
【关键词】Web身份认证;Session失效;安全性
AbstractThis article further study the working principle of Session which are important object maintaining the user status information at identity authentication.And according to existing theorystarting from the identity authentications practical problems in the web applicationproposed the safety problem of informal logging out and etc.This paper combines the working process of Sessionand using browser’s cache technologyproposed practical solutions.It makes Sessions application in the web identity authentication
more reasonable and effectiveand increases identity authentications safety.In order to verify the validity of the conclusionwe apply the proposing solution to webs network test systemit proves applicability of this schemeand achieve this papers designed purpose.
Key wordsWeb identity authenticationSession invalidsecurity
1.引言
Web中最薄弱部位的安全程度决定了整个网站的抗攻击能力,身份认证恰恰就是网站应用中最薄弱的环节,深入研究身份认证有助于整个网站的安全与稳定。但是很多开发人员由于缺少对Session的了解,影响了Web应用程序的安全。
2.Session机制
2.1 Session产生背景
随着动态网站兴起,保持用户会话的连续性成为网站开发中身份认证的关键问题,Session
Web技术中的地位也日趋显著。由于HTTP协议的无状态记忆特性,客户端脚本每次和服务器进行交互时都需要开始一个新的连接。也就是说,服务器认为两次连续的请求之间没有任何关系。
在电子商务等一些交互网站中,应用程序要分辨不同的用户和在不同的页面之间传递数据等,所以保持会话的连续性是必不可少的。为了弥补HTTP协议的缺陷,Session产生了。
2.2 Session定义
SessionRFC2109中的定义是:允许客户端和服务器端通过使用HTTP的请求与响应头中的数据来交换状态信息的技术Session是开发动态Web网站时,身份认证中使用的重要对象之一,是基于HTTP协议的、有状态的、利用具体的动态页面技术来实现的。
在不同的环境中Session有不同的含义。从Web用户角度来讲,注册用户打开浏览器登录一个动态网站、访问网站、关闭浏览器结束访问,这一系列的动作构成一个会话;而从Web开发者的角度来讲,Session是一个数据结构,用来存储用户登录信息。
2.3 Session机制的工作流程
对于每一个第一次向服务器提出网页请求的用户,Web服务器都会运用一个非常复杂的算法给它分配一个不会重复的编号,我们叫它SessionId,这个编号由24位字符组成,并保存在提出该申请的用户的客户端Cookie中,如果浏览器不存储Cookie,则它将依赖于URL进行工作。服务器用它来区分不同用户,同时服务器会自动产生与其相对应的Session对象。
一个网站不可能只有一个用户对其进行访问,当多个用户同时对网站进行访问时,服务器会根据附加在HTTP头中的SessionIdSession变量值分别保存在对应用户的Session结构中。
2.4 管理会话
Session对象是用来保存用户会话期间所需的数据,相当于存在于网站多个页面间的全局变量。用Session存储字符串,数组和对象都可以。Session在用户访问网站的整个过程中一直有效,但是对于不同的网站,Session的保存位置有所不同。一般情况下,内存中有相应的数据结构来存放Session数据,也有些网站将Session数据存放在数据库或是客户端硬盘文件上。
Session对象的常用属性是TimeoutTimeout属性用来设定Session对象的有效时间(默认设
置为20分钟)。如果在timeout属性所设置的时间内用户没有和Web服务器进行交互,那么服务器认为会话结束,从而销毁Session。浏览器是运行在客户端的软件,虽然用户关闭了浏览器、结束了对网站的访问,但是服务器并不知道,不会删除Session对象,冗余的Session信息会占用服务器的存储空间,所以设置适当的会话有效时间是十分必要的。Session对象的两个事件,决定会话的产生和销毁[19]
会话开始事件和会话结束事件。
1)会话开始事件
会话开始事件是在一个会话开始时被触发,应用程序调用Session_Onstart()过程,在该过程中,经常编写将用户登录信息(如用户ID、密码、角与权限等)赋给Session对象的代码。
2)会话结束事件
会话结束事件是在一个会话结束时被触发,由于每个访问网站的用户都将被创建一个Session对象,过多的冗余Session会占用服务器资源,容易造成系统瓶颈,所以在会话结束
时,也就是在Session_onend()事件被触发时,要将创建的Session对象销毁。
2.5 结束会话
当遇到以下几种情况时会话过程将结束:
1)超过设定的会话有效时间,标记过期。
2)执行销毁会话的代码。
3.“真正注销漏洞问题描述
Session对象是用来存放操作过程中用户信息和传递页间数据的。浏览器不会在关闭时去主动告知服务器自己将要关闭,所以Session对象会在一定时间内贮存在服务器上,这样不仅增加服务器负担,更严重的会造成用户私人信息的泄露。
3.1 问题的提出
使用浏览器的后退按钮可以让浏览者方便、快捷地的访问曾经访问过的网页:这虽然给我们带来了方便,随之也给我们带来了安全隐患。
首先,有些应用程序要求用户必须按照预定的顺序对页面进行访问(如考试系统,已经提交的试题,就不允许再次进行查看和修改),使用浏览器的后退按钮,有可能会打乱程序事先设定好的访问顺序。
其次,合法用户通过在一个网站跳转到其它网站后,非法用户可以只通过单击浏览器的后退session数据错误是什么意思”按钮,系统不要求非法用户输入用户名和密码,便可退回到合法用户之前的访问的网站,查看用户个人信息,导致合法用户信息被窃取。
第三,在Session对象尚未失效的情况下,恶意用户可以在浏览器的历史记录中查用户的访问记录。在不提供用户名和你们的情况下查看其他用户的个人信息。
以上三种情况的产生都是源于没有实现Session对象的真正注销。所以,在正确的时候及时清空会话有助于增强应用程序的运行效率,并且对应用程序的安全性也有很大的提高。
3.2 “真正注销功能实现思路
解决以上提出问题的措施,我们需要两步来完成:
第一步,要禁止浏览器缓存。这样会强制浏览器每次访问页面,即使是重新访问页面,都要从服务器端下载,而不是从客户端浏览器缓存读取。这里浏览器禁用缓存,主要有两种模式,第一种是基于服务器端的,第二种是基于客户端的。(基于客户端的禁止浏览器缓存对浏览器的版本有限制,所以不推荐使用。)
第二步,由于浏览器缓存被禁止了,每次访问页面都要从服务器端下载,所以,我们可以需要身份证明才可以访问的页面中检查Session对象,判断该页面是否允许被该用户访问。
实现的具体方法是,借助一个会话级变量检查用户是否是首次访问页面(变量值为空,表示是首次访问;不为空,表示是再次访问)。如果变量值不为空,表示不是首次访问,那么就把该变量的值赋为空,并把页面跳转到登录页面。如果变(下转第25页)(上接第16页)量值为空,表示首次访问,用户可以使用该页,并在提交该页面表单时将该会话变量赋予一个值,以标记该页已被访问过,这样,当用户点击后退按钮请求页面,浏览器将重新从服务器获取,服务器检查到会话变量不为空,于是清除变量,将用户跳转到登录页。
3.3 “真正注销功能在网络考试系统中的实现
在网络考试系统中,我们要求考生无法再次查看和修改已经提交完毕的试题,所以对于考生试题目录下的每个页,都要求浏览器禁用缓存功能,并且判断用户是否是首次访问。
核心代码如下[44][45]
Response.Buffer = True
Response.ExpiresAbsolute = Now() - 1
Response.Expires = 0
Response.CacheControl = “no-cache”
’在服务器端清除浏览出缓存
If LenSession”FirstVisit”)) > 0 then
FirstVisit中值不为空,表示用户是再次访问
Session”FirstVisit” = ““
’清除会话变量
Response.Redirect “/login .asp”
Response.End
’将用户跳转到登录页
End If
’若程序能运行到此处,说明用户允许查看当前页面内容,以下则是网页内容
在必须要求用户进行身份认证才可查看的页面被打开时,我们要对会话变量赋予一个不为空的值。如:
Session”FirstVisit” = “NO”
3.4 实现价值
上述解决方案在网络考试系统中顺利应用,实现了未经登录的考试无法进行考试,和考生必
须按照预定的考试流程进行答题的功能。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。