您好, 访客   登录/注册

基于MVC的网站登录模块安全性研究与设计

来源:用户上传      作者:

   摘要:MVC设计模式被广泛应用于企业及项目开发,且许多项目都离不开登录模块.登录模块的安全性将直接影响用户信息安全以及项目的可靠程度.针对网站登录模块的安全性,分别在MVC三层架构上提出了对用户数据进行安全性处理的方法,保障用户登录信息安全.经实际应用验证,能有效提高网站登录模块的安全性,提高网站质量.
   关键词:MVC;网站开发;登录;安全性
  中图分类号:TP311  文献标识码:A  文章编号:1673-260X(2019)02-0049-03
   MVC设计模式是软件工程学中一个非常重要的设计模式,其思想的核心就是分层,它能够有效分离数据和表现,并提供了分离功能层的机制[1].MVC将系统的各个组件进行分类,使系统开发变得非常灵活,同时又提高了系统设计的可重用性.网站登录模块是当前大多系统都必须要设计和实现的部分,该模块也常采用此设计模式来提高系统的灵活性和可重用性.
   网络安全问题[2]一直是计算机行业的焦点问题,安全登录也就成了开发者必须考虑的因素.若系统存在登录模块将不得不面临用户登录的隐私安全问题,以不断提高项目开发的安全性.因此,针对MVC设计模式的登录模块安全性研究具有一定的现实价值.
  1 MVC简介
   MVC是模型(model)、视图(view)和控制器(controller)的简称,是Trygve Reenskaug在1979年提出的一种GUI软件设计模式[3].MVC是一种软件设计典范,它很好地将业务处理与显示分离,将应用分为模型、视图以及控制层.视图层主要用于数据显示和用户交互;控制层主要用于接收用户请求,将请求分发给模型层进行业务处理,并将处理结果返还到视图层;模型层主要负责业务逻辑处理.该模式用一种业务逻辑、数据、界面显示分离的方法组织代码,视图层和控制层的分离,降低了各模块之间的耦合,在改进和个性化定制界面及用户交互的同时不需要重复编写业务逻辑.并且多个视图可以共享一个模型,利于后期的维护和测试.
   在Java EE平台上,JSP技术主要用于视图层,负责与外界进行交互;servlet技术主要用于控制层,作为JSP与JavaBean之间的枢纽;JavaBean主要用于模型层,进行数据业务处理[4].
  2 MVC在登录模块中的应用
   登录模块一般包含输入用户数据、接收用户数据、查询数据库判断用户口令以及登录结果显示等.基于MVC的安全登录模块则将上述流程拆分到不同模块中,并在每个模块有针对性的对数据进行处理,进一步提高登录模块的安全性.
   View层负责与用户进行交互,显示登录界面并进行用户信息收集,在View层中还可以对数据进行初步验证,确保用户输入数据的合法性;Controller层接收用户数据并调用模型层对数据进行二次验证和数据处理,待数据处理完毕之后将结果返回至视图层;Model层则专门负责业务逻辑处理,包括数据验证、验证码生成、密码加密、与数据库进行交互等.MVC各层任务如表1所示.
  3 登录模块安全性分析与设计
  3.1 视图层
   根据View在登录模块中所承担的任务,该模块所包含与用户的交互页面(登录页面login.jsp),其所面临的安全问题主要为用户输入恶意或非法数据来破坏程序的稳定性和安全性,如暴力破解、SQL注入、网络监听.
  3.1.1 暴力破解
   暴力破解主要是通过穷举法对用户密码进行破译,在经过大量尝试之后非法登入系统.为防止暴力破解,可以在View层添加验证码,其关键代码如下:
   其中,uri表示生成验证码的服务器路径,由控制层提供,具体验证码生成由模型层负责.
  3.1.2 SQL注入
   SQL注入式攻击一般是通过传输特殊字符给服务器,使得原本的SQL命令发生改变,从而欺骗服务器执行恶意的SQL命令.为防止SQL注入,可采用预编译的命令对象PreparedStatement来执行SQL语句(由模型层实现),其次可在View层用正则表达式对特殊字符进行过滤处理,其关键代码如下:
  3.1.3 网络监听
   用户关键数据在传输过程中很难避免被黑客监听,这就意味着黑客可以伪装成用户向服务器发送二次请求(重放攻击),并获得授权[5].为防止网络监听,可在客户端和服务端各持一份时间令牌,且用户每次访问都具有不同的时间令牌,使黑客无法模拟登录.其View层JS关键代码如下:
  3.2 控制层
   根据Controller在登录模块中所承担的任务,该模块主要由Servlet技术实现(LoginServlet.java),负责对用户数据的接收以及请求控制,其面临的安全问题主要有接收到的数据不合法、关键数据不一致和请求异常等.
  3.2.1 数据合法性检验
   数据合法性检验可以调用模型层进行二次验证,防止用户绕过View层的数据检验.
  3.2.2 数据一致性
   Servlet使用线程来处理用户请求,在拥有高效处理请求的同时易造成线程安全问题.为保证关键数据一致性,可对关键代码加上同步锁(synchronized),其关键代码如下:
  3.2.3 异常请求处理
   若用户所请求的资源地址不存在,则可在web.xml配置异常处理;若用户所请求的资源无权限访问,则可在控制器中加入拦截器;若用户提交的请求数据不合法,则可使用try/catch进行异常捕获.
  3.3 模型層
   根据Model层在登录模块中所承担的任务,该模块主要功能有具体的数据验证、加载驱动、读取数据库配置文件、连接数据库、与数据库进行交互以及验证码和安全策略的生成,其面临的安全问题主要有与用户数据持久化相关的安全问题和业务逻辑处理异常.   3.3.1 用户数据持久化安全问题
   用户数据持久化安全问题包括用户数据的合法性验证、防止大量非人为操作、防止重放攻击和持久化数据加密等.
   用户数据的合法性验证可使用java.util.regex包中的API来实现正则表达式检验;防止大量非人为操作可使用java.awt.image包中的API来绘制验证码;防止重放攻击可以在用户提交的数据中混入时间令牌,其关键代码如下:
  3.3.2 业务逻辑处理异常
   在加载驱动、读取数据库配置文件、连接数据库、与数据库进行交互的过程中可能会发生IOException、SQLException、ClassNotFoundException等异常,可使用try/catch进行异常捕获.
  4 安全性测试
   为了进一步验证登录模块的安全性,测试基于MVC的安全性处理方法是否有效,本文对用户数据合法性、数据库密码安全性、防止SQL注入以及防止网络监听等进行了测试.
  4.1 数据合法性测试
   在View层对用户输入的数据进行了合法性验证,当输入不符合要求的数据时将会提示数据信息不合法.
  4.2 数据库密码安全性测试
   对数据库密码进行安全性处理前后进行比对,未进行安全性处理之前的数据库密码进行明文显示,如“lucy123”,该密码是对数据库管理人员完全开放的,用户的个人信息存在极大的安全隐患.而进行安全性处理之后的数据库密码将以32位十六进制形式显示为“861A628F450DEF33619F6232 540441CC”,管理人员也无法获得真实的用户密码.
  4.3 SQL注入测试
   SQL注入是开发者必须考虑的问题,若用户在用户名中输入“ 'or 1 = 1--”则会将SQL语句篡改为SELECT * FROM USER WHERE username=''or 1=1--' AND password=……,--符号之后的SQL代码将视为注释被忽略,此时SQL就变成了SELECT * FROM USER,主要表中存在数据,用户就能直接登录成功;经过安全性处理之后,输入非法字符将无法通过验证.
  4.4 防止网络监听
   防止网络监听最有效的办法就是一次一密,即用户所传输的密码会随着时间变化而变化.黑客或者非法用户即使截获到密码实施重放攻击,此时密码也将无效,测试效果如下.
   从上述测试结果可以看出未防止网络监听时用户密码虽然进行了加密,但是密码不随时间变化,很容易被黑客监听并实现重放攻击,采取防止网络监听措施之后的传输密码会随着时间不停变化,实现一次一密,有效防止重放攻击.
  5 总结
   本文对网站登录模块的安全性进行了研究与设计.从MVC的三层结构入手,讲述了视图层、控制层以及模型层在登录模块安全性中所需要承担的任务以及面临的安全问题,并针对这些安全问题提出了相应的解决方案和数据处理方法.经测试对比分析,在MVC三层架构上所提出得用户数据安全性处理方法能有效保障用户登录信息安全,加强网站登录模块的安全性,提高网站质量.
  参考文献:
  〔1〕陈海洋.基于MVC模式的web系统的解决方案[D].电子科技大学,2007.
  〔2〕王世伟.论信息安全、网络安全、网络空间安全[J].中国图书馆学报,2015,41(02):72-84.
  〔3〕Reenskaug T. Thing-model-view-editor—An example from a planningsystem[J]. technical note, Xerox Parc, 1979.
  〔4〕陆荣幸,郁洲,阮永良,王志强.J2EE平臺上MVC设计模式的研究与实现[J].计算机应用研究,2003(03):144-146.
  〔5〕甄玉磊.网络控制系统中重放攻击的检测与对策[D].北京交通大学,2016.
转载注明来源:https://www.xzbu.com/1/view-14745172.htm