伴随着我国科学技术以及高等教育事业的蓬勃发展, 学校规模不断扩大, 招生人数急剧上升, 学生在校期间的日常安全问题受到越来越多的重视[1], 这对学校的日常监督工作提出了更高的要求.目前, 高校各种学生信息管理系统比比皆是, 但是比较关注学生安全信息管理方面的系统少之又少, 尤其是包含数据分析的此类系统更是微乎其微[2]. 针对当前合理的需求, 本文设计了一套针对学生安全的管理系统[3], 通过对学生携带设备上传的数据进行分析实现对学生的安全管理, 有效的完善了学校的安全监督机制. 综上所述, 本文论述的学生安全管理系统具有相当可观的应用推广价值.
2 系统整体设计 2.1 设计思想高校学生安全管理系统由后台服务器和学生便携设备两部分组成, 本文主要介绍后台服务器以及后台服务器同学生便携设备进行数据交互这两部分内容, 关于学生便携设备本身的涉及在此不做介绍.
设计思路如下: 学生每日携带便携设备进出学校, 便携设备实现早晚定时自动开关机, 定时上传数据, 每条数据包含设备编号, 经纬度坐标, 周围基站ID, 当前时间等多种类型的信息. 学生在进入和离开学校时可通过考勤按键触发考勤功能, 紧急情况下通过触发SOS报警按键实现报警功能, 数据会及时上传到后台服务器, 服务器通过socket实现对设备上传数据的接收以及写入数据库, 数据第一时间显示在管理平台, 有助于学校对学生进行及时的管理与帮助.
2.2 开发环境本次设计采用WAMP环境开发, 即Windows+Apache+MySQL+PHP[4], WAMP是Windows系统中开发网站的经典组合, 对于不熟悉Apache+MySQL+ PHP环境的新手, 可以通过一键安装的方式快速部署服务器所需要的环境, 将系统部署在www目录下即可实现外部访问. 这是WAMP集成环境的最大优势.
2.3 系统结构针对传统的C/S与B/S架构, 经过多方面综合考虑, 本次设计采用B/S与C/S两种模式的混合模式进行设计[5]. 服务器对便携设备上传数据的接收过程采用C/S架构, 通过Workerman框架实现对数据的接收和存储.管理员通过管理平台对学生日常安全进行监控为B/S架构, 管理平台通过ThinkPHP框架进行搭建. 这样的设计方式只需在服务器端对系统进行开发以及编写socket的服务器端代码, 有效的减少了整套系统开发的成本, 并且对客户端要求较低[6], 学生只需要携带便携设备, 管理员可直接通过浏览器对学生进行安全监管.两种框架的配合使用, 既保证了学生安全管理系统的数据来源, 又保证了管理员通过系统对学生进行实时监控. 这是本次设计的第一个创新点
3 系统整体实现本节将对系统的三个重点模块进行详细阐述, 分别为后台管理平台, socket设计, 以及数据库设计.
3.1 管理平台设计后台服务器上的管理平台采用html+css+js实现前台页面, 后台采用PHP语言进行开发. PHP在众多的WEB开发服务器端脚本语言拥有突出的优势. 首先它是开源的, 所有的源代码均可下载浏览. 其次PHP的使用是免费的, 这样在开发成本上大大胜过了ASP与JSP[7]. 最后, PHP具有良好的平台移植性, 对UNIX, LINUX, Windows都有良好的支持.
目前主流的PHP框架种类非常多, 包括国外的Laravel、Phalcon、Symfony2, 以及国内的主流框架ThinkPHP, YII, CI等. 本次设计采用的是国内的ThinkPHP框架.
3.1.1 ThinkPHP介绍ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架, 采用MVC模式和面向对象的结构[8], 遵循Apache2开源协议, 具有丰富的查询机制, 简单的CURD操作. 支持MySQL、PgSQL、Sqlite多种数据库以及PDO扩展, 自身包含了底层架构、兼容处理、基类库、数据库访问层、模板引擎、缓存机制、插件机制、角色认证、表单处理等常用的组件, 并且对于跨版本、跨平台和跨数据库移植都比较方便.
3.1.2 权限及功能后台管理平台在设计的过程中划分为三种权限, 不同权限具有不同的功能. 用户在登录页面输入账号密码后, 在登录信息正确的情况下, 后台会判断用户对应的权限, 从而跳转到不同的页面, 实现不同的功能. 同时高级权限可以实现对低级权限的管理, 低级权限仅有基本操作功能.
本次设计的权限包括: 超级管理员, 学校负责人, 班主任. 权限管理描述如图1所示, 不同权限详细功能如下所述:
(1) 超级管理员: 账号由开发者进行管理, 主要负责为学校负责人分配初始账号, 管理所有校级负责人, 添加删除设备, 监控所有设备运作情况等.
(2) 学校负责人: 编写学校基本信息, 为不同班级班主任分配账号, 申请设备, 查看该校所有设备运作情况, 查看各个班级学生基本信息, 以及查看各班负责人上报的班级学生每日安全数据信息等.
(3) 班主任: 直接对学生安全进行负责, 包括学生与设备绑定, 查看班级学生每日考勤时间, 学生当天运动轨迹, 学生是否有上传报警信息等.
3.1.3 系统安全设计(1) SQL注入攻击
众所周知, SQL注入攻击是一种常见的WEB攻击形式, 这种攻击存在的原因主要是因为某些系统后台程序没有实现对用户输入的原始数据进行严格的验证, 从而使得某些不法分子通过恶意手段获取后台数据库的用户数据信息后进一步执行某些破坏性操作.
针对SQL注入攻击, 后台系统的查询语句采用数组方式进行查询, 针对小部分字符串查询条件, 采用预处理机制对存在安全隐患的数据进行过滤[7].
(2) URL加密算法
考虑到数据在传输过程中的安全问题, 加密是每一个系统必须做的工作. 本次设计的加密工作主要在URL上进行. 针对URL上的某些重要参数, 通过加密的方式让使用者看到加密后的数据信息. 加密算法与解密算法由开发者进行编写, 这是本次设计的另一个创新点.
PHP中常见的加密算法如MD5加密, sha1加密, base64加密等[8]. 其中常见的MD5加密算法为单向散列加密技术, base64虽然属于对称加密算法, 但是由于频繁使用, 存在安全隐患. 另外在某些第三方网站, 可以通过付费的方式对传统的加密算法进行破译. 综合考虑, 本次设计的加密算法由开发者自行编写.
本次设计将整个加密/解密过程封装为两个函数. 加密的具体实现方法为: 首先对用户输入的字符信息通过字符串拼接, 得到新的字符串. 其次, 对新字符串通过base64加密函数进行加密, 再通过字符串分割函数将加密后的字符串分割为数组. 再次, 通过数组循环的方式对数组的每个元素再次进行拼接, 得到新数组, 将其转回字符串. 最终, 替换字符串的某些特殊字符, 这样便得到了加密后的最终结果, 最终加密效果会在本文的测试结果部分进行展示.
加密实现效果如下: 用户提交的表单数据通过异步的方式传入后台, 后台程序针对重要参数进行加密, 将加密结果输出到前台, 前台将得到的加密参数以及其他参数通过URL拼接的方式跳转到指定页面, 后台通过对应解密算法进行解密, 恢复原始数据, 然后进行业务逻辑处理, 有效地提高了系统的安全性.
3.2 Socket设计针对学生便携设备同公网服务器的数据通信, 本次设计采用socket的方式进行数据的收发, 在公网服务器上通过Workerman框架实现对便携设备上传数据的处理.
3.2.1 Socket介绍Socket是进程间通讯的一种机制. Socket因为要进行网络间信息交互, 所以其必须指定其在网络上的地址. 因此一个socket主要由5个信息构成, 分别为:协议, 本地地址, 本地端口号, 远地地址, 远地端口号. Socket的主要类型包括三种[9]: (1)流式socket, 通讯双方需要建立一种可靠连接, 采用TCP协议. (2)数据报socket, 它是一种面向无连接的服务. (3)原始socket, 这种方式允许对底层协议如IP或ICMP直接访问.
3.2.2 Workerman介绍Workerman是一款纯PHP开发的开源高性能的PHP socket服务器框架. 基于Workerman可以实现任意TCP/UDP通讯服务器端开发. Workerman的主要优势有: 纯PHP开发, 支持多进程, 支持TCP/UDP, Http等多种协议, 支持高并发, 支持长连接等[10].
Workerman通过开启一个主进程和多个子进程对外提供服务, 每个进程独立工作, 主进程负责监控子进程, 子进程负责数据的接收以及业务逻辑处理. 每个进程可以实现上千客户端的并发连接.
3.2.3 Workerman使用本次设计中socket数据接收部分详细过程为: 数据传输格式采用JSON, 服务器端通过开启端口接收客户端上传的数据, 对数据进行解析并进行处理. 针对异常数据以及异常操作向客户端返回错误信息, 停止操作. 在数据正确写入数据库的情况下, 并向客户端返回正常描述, 与客户端断开连接, 重新开始监听工作.
系统中Socket数据接收工作流程图如图2所示.
3.3 数据库设计本次系统设计采用的数据库为MySQL. MySQL数据库是目前主流的大型通用数据库管理系统之一, 其凭借其强大的功能, 较快的响应速度和开放源代码等特点, 在Web系统中得到了广泛的应用[11].
3.3.1 数据库设计工具
此处使用MySQL专业的可视化工具Navicat for MySQL来设计数据库, Navicat是一款设计高效, 可靠的数据库管理工具, 以图形界面的方式帮助开发人员实现快速开发.
3.3.2 数据表设计系统中的主要数据表包含:学生基本信息表, 管理员信息表, 班级信息表[12].
(1) 管理员信息表
管理员信息表staff_info, 此表存放包括系统用户基本信息, 用于登陆系统时通过username字段以及password字段对用户输入信息的验证. 通过auth与auth_id两个字段实现与外表进行关联, 考虑到系统安全问题, password字段采用MD5加密算法.管理员信息表设计如表1所示.
(2) 学生信息表
学生信息表student_info, 此表用于存放学生的基本信息, 通过device_id字段与智能设备表进行外键关联, 通过class_id字段与class表进行外键关联.学生基本信息表设计如表2所示.
(3) 班级信息表
班级信息表用于存放当前学校所有班级的基本信息, 包括班级名称, 所属年级, 班主任等信息, 通过grade_id外键实现与grade年级信息表外键关联.班级信息表设计如表3所示.
4 测试结果 4.1 数据接收效果
通过Workerman框架实现了对便携设备上传数据的接收, 此处通过print_r函数将接收结果输出到windows的cmd中, 数据接收结果如图3所示.
4.2 URL加密实现效果
通过测试结果发现, 对于设备id号这个敏感参数, 通过自行编写的加密算法成功实现对其加密并在URL中进行传输, 后台程序首先对该加密参数通过对应的解密算法进行解密处理, 恢复出用户输入的原始数据, 再进行对数据库操作, 并将结果返回给用户, 有效的维护了系统的安全性, 保证敏感数据不会被泄露.
5 总结
本文提出了一种针对高校学生安全问题的解决方案, 详细阐述了通过ThinkPHP框架以及Worker- man框架实现从数据接收, 到数据存储, 最后实现数据展示及操作的整个流程. 本次设计提出的方案目前已正式投入使用, 使用过程中安全系数高, 运行稳定, 今后将对系统的功能进一步优化与扩展.
[1] |
刘云生. 学生安全管理中的教育放逐与应对之策. 中国教育学刊, 2016(6): 47-53. |
[2] |
陈凤良. 高校学生安全信息系统设计初探. 绵阳师范学院学报, 2012, 31(8): 72-75, 92. |
[3] |
金程成. 学生安全状态管理系统的设计与实现[硕士学位论文]. 武汉: 华中科技大学, 2013.
|
[4] |
何佩佩, 韩汉光, 谢颖华. 基于WAMP的网站流量数据分析. 计算机系统应用, 2014, 23(7): 94-99. |
[5] |
刘敏智. 基于C/S和B/S混合模式的教务管理系统的设计[硕士学位论文]. 石家庄: 河北科技大学, 2013.
|
[6] |
张劲勇. 基于C/S和B/S混合结构学生管理系统的设计与实现. 科技信息, 2010(17): 55-56. DOI:10.3969/j.issn.1673-1328.2010.17.055 |
[7] |
齐剂. PHP技术应用于中小企业网站开发[硕士学位论文]. 长春: 吉林大学, 2012.
|
[8] |
徐诚斌, 王金平. MVC在ThinkPHP框架中的应用研究. 信息与电脑(理论版), 2011(3): 160. |
[9] |
徐朋. 基于SOCKET的跨平台通讯系统的研究与设计[硕士学位论文]. 沈阳: 大连理工大学, 2015.
|
[10] |
刘新星. 基于ZigBee的远程控制智能家居系统设计[硕士学位论文]. 武汉: 武汉邮电科学研究院, 2016.
|
[11] |
黄冬英. 基于分布式数据库的高校学生档案管理系统设计与实现[硕士学位论文]. 苏州: 苏州大学, 2016.
|
[12] |
常莹, 朱庆华, 贾燕军. 学生管理系统中的数据库设计. 教育教学论坛, 2012(38): 244-245. |