摘要:在信息化迅速发展的时代,新媒体正在被广大的年轻群体所接受,特别是在校大学生,以微信为代表的新媒体已成为必不可少的一个信息交流平台。本文完成基于微信平台的校园信息查询系统的设计与实现,将相关信息发布在微信平台上,方便学生在微信上随时随地查询信息,并对系统的安全策略及测试效果进行了分析。
引言
近年来,随着国内高校信息化的开展,很多高校已经构建了网络信息服务系统,而且信息化系统的移动终端发布方式也多种多样。这些网络信息系统的使用,极大地提高了办公效率,方便了师生获取相关信息。但是随着时代的发展和科技的进步,各种智能手机等移动终端逐渐普及,原来的信息发布架构在移动终端上出现了系统兼容性和界面友好性差等诸多问题,已经不能完全满足用户的新要求[1]。
面对诸多问题,很多研发人员推出了手机App,尽管在一定程度上能解决问题,但是传统的App开发周期长,推广费用较高,用户接受能力较差,占用空间多,升级维护比较繁琐,因此并不是一种合适的解决方法。很多人也尝试设计移动终端的发布方案,但会遇到一些问题,例如发布终端的平台和兼容性问题[2]、信息收集整理问题、接口的安全性等问题。
微信软件本身完全免费,也因为其灵活、方便、智能,且节省资费受到大家欢迎[3]。微信公众平台是腾讯公司在微信的基础上新增的功能模块,通过这一平台,个人和企业都可以打造一个微信的公众号,并实现和特定群体的文字、图片、语音等全方位沟通、互动[4]。它以其方便快捷的交流方式风靡高校,随着微信产品不断升级,校园微信平台发展潜力巨大。
本文就是利用微信平台的特点,将微信平台与高校的教务信息发布系统相结合。依靠这个平台,可以实现比如教学计划安排发布查询、课表安排查询、成绩查询、及时发布通知公告等功能。让学生在学校能够更加方便快捷地了解自己和学校的信息。同时对内能够给学校一个及时了解学生动态并进行学生思想教育工作的平台。对外能够形成一个学校品牌,塑造学校形象。
一、基于微信平台信息查询系统的设计
1.设计思路
以微信公众平台作为载体,将微信公众平台与高校内部教务系统进行对接,以服务为主,提供学生课程表查询,学生成绩查询,学期排名查询等服务,为学生提供一个更加方便快捷的服务平台,以此吸引学生关注此平台,从而实现用户通过微信查询各种校园信息的功能。本文设计基于微信平台的信息查询系统主要由用户、微信服务器、中间接口服务器以及各类的接口信息系统组成,其如图1所
图1 基于微信平台的信息查询系统
2.基于微信平台的信息系统的实现
微信查询系统主要由服务器模块、数据库模块、身份验证模块、课程表查询模块、成绩查询模块、排名查询模块、四六级查询模块的设计来实现。
(1)服务器模块:微信公众平台使用分为编辑模式和开发者模式。编辑模式可以根据预先设定的关键字进行对应的回复;而编辑者模式则可以编写程序根据需求实现不同的功能和消息回复。因此我们选择使用开发者模式实现该平台。目前选用Linux+PHP+MySQL平台做程序支撑。当用户发送消息时,微信官方服务器将用户消息以xml数据的形式转发到我们自己的服务器,经过我们的程序处理后,再按照指定的格式提交给微信官方服务器,再由微信官方下发给用户,从而实现一次消息的发送。服务器平台选用百度云[5]的免费服务器平台。
(2)数据库模块:列举一些重要的数据表作用。绑定信息表:主要存储微信OpenID与学生学号的对应关系;考试成绩表:分两张表存储,一张表存储最近一学期的成绩信息,另一张存储历史成绩信息,主要是因为最新一学期的成绩有可能随着新成绩的出现需要及时的更新,而且学生的关注力度比较大,查询次数较多,而往年的成绩大家都已经知晓,关注较少;学生信息表:这里主要存储学生在学校中的学号,专业班级等信息;课程安排表:主要存储各专业班级的课程安排信息。
(3)身份验证模块:身份验证需要学生通过浏览器页面来录入学生的身份信息与已经有的信息进行比对,程序中使用了学生学号和身份证号码前10位进行验证。在微信中,每一个微信用户都有一个唯一的OpenID值,用户验证通过后,将学生学号与OpenID值进行绑定,从而完成身份信息的认证与绑定。因为认证过程是在网页中实现,虽然通过网页实现较为灵活,但是容易被非法用户攻击,因此在认证页面中重点做了数据过滤的措施,以确保用户信息的安全。首先,判定用户是否使用微信登录此网页,打开网页时,网页head数据中会携带浏览器的信息,在Android和iOS的系统中,默认携带的头文件中包含有MicroMessenger字段,而在Windows Mobile操作系统中,头部携带IEMobile字段,以此来判定用户浏览器信息。其次,微信平台的OpenID虽然各不相同,但是同一个微信平台的OpenID值前六位都是唯一的,而且每一个OpenID都是28位的字符串。验证通过后再将用户的OpenID与数据库中的信息进行比对,如果该用户已经绑定了自己的账号,则禁止其再绑定其他的用户账号,如果没用,则向用户展示提交验证信息的页面。用户将验证信息提交后再次对浏览器,OpenID等信息进行判定,通过后再对用户提交的信息进行过滤,依照试验学校的惯例,学生证号为8位数字,身份证号码最多为18位,这里要求至少输入10位。全部验证通过后,将用户信息存储到数据库中,完成学生信息绑定。
(4)课程表查询模块:在课程表查询功能中,用户只需要回复所要查询的专业班级,由程序去判断提交的字符是否合法,如果是正常的查询请求,则去数据库中查找对应专业班级的课程信息,回复给用户,默认将数字1~5分别对应为自己周一到周五的课程信息,学生只需要回复1~5数字即可快速查询对应的课程信息。此外课程表查询模块中,最关键的是课程信息的录入。高校每学期课程安排信息千余条,学校发布课程信息目前主要通过Excel表的形式发布。要想快速有效地更新课程表数据,必须使用程序去直接读取Excel表中的内容。使用PHP程序读取Excel时可以使用PHPReader类库,也可以使用PHPExcle类库,相比之下前者使用简单,容易上手,但是只能读取Excle,后者使用比较复杂,但是功能强大,可以对Excle表格进行查询、修改、调整格式等操作。因为我们只需要对课程安排的表格进行读取,并存入到数据库,因此使用PHPReader类库便可以满足我们的需求。读取Excle表格文件因为时间较长,而PHP语言默认30秒钟执行不完会超时报错,并停止执行,因此需要先对程序进行超时设定,然后导入该类库的核心文件并初始化即可使用。需要注意的是,PHPReader会将整个表格的数据以一个对象的形式存储在内存中,因此,该程序运行时对内存占用比较多,容易出现内存不足的情况,不能读取数据量较大的文件。 (5)成绩查询模块:在测试平台中,默认定义数字8和9分别对应最新的成绩查询功能和往年的成绩查询。当接收到数字8、9或者“查成绩”字样时,首先根据用户的OpenID在用户表中查找该OpenID对应的学生学号,然后根据学号去成绩表中查找对应的成绩信息,通过消息返回即可。 (6)排名查询模块:通过编程,将已有的成绩信息生成排名数据,存在排名表中,当收到排名的字样时,根据OpenID查找对应的学号,即可根据学号查找到对应的排名信息。 (7)四六级成绩查询模块:四六级成绩查询功能的实现主要以模拟用户登录学信网,并提交相应的数据来获取网页返回结果,然后从返回的内容中过滤出有用的数据返回。 二、服务器与微信平台对接 微信公众平台的对接规范是基于 HTTP 协议[6],通过“HTTP GET”和“HTTP POST”方法来与接口服务器交互数据。为了安全性,对接首先要进行URL和Token验证,其中URL是用来接收微信服务器数据的接口URL。Token可任意填写,用作生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性)。提交信息后,微信服务器通过GET请求到填写的URL上,GET请求同时携带四个参数,如表1所示。 服务器接收到signature参数后对请求进行校验,校验流程如下: (1)用token、timestamp、nonce三个参数按照字典序排序; (2)将三个参数字符串拼接成一个字符串后进行sha1加密; (3)用加密后的字符串与signature进行对比,确认该请求是否来源于微信服务器。 若验证通过,确认此次请求是来自微信官方服务器,则原样返回echostr内容,对接生效,开发者成功,否则对接失败。对接成功后此部分验证内容既可以删除也可注销。 三、数据安全策略 学生数据作为学习的核心数据至关重要,因此在数据安全方面的策略必不可少。 1.服务器平台策略 从安全角度考虑,服务器平台选用了较为安全的百度云Linux服务器平台,对文件目录读写权限严格控制。在端口控制上,禁用了除80以外的其他全部端口。数据库中单独设置用户表可写,其余设置只读权限。 2.网页平台策略 一般情况,在网页平台中,对用户数据进行严格过滤是比较有效的Web安全策略[7],在此应用中,除了限制浏览器访问权限,以及对用户提交的数据过滤以外,基于微信平台还有特殊的策略,因为微信平台的特殊性,在链接中会携带有用户唯一标识的openid,因此,链接也具有一定的隐私性,倘若用户将链接分享,会对用户隐私造成泄漏,因此,在平台中通过js程序禁用了关键页面的链接查看和分享功能。
|