成绩单之王

期末考试后, 另一件重要的事情就是查成绩。有的学校在老师录入成绩后, 学生可以实时查看。对于我校而言, 由于政策原因, 我校的成绩是在假期开始后几周的周五统一向学生开放查询, 与老师何时录入关系不大。然而, 同学们对成绩的追求与生俱来, 这也包括追求尽早查到自己成绩。

起初, 成绩只能在教学管理系统查询, 按照规定定时发布。然而, 随着校内信息化设施, 如自助服务机以及电子成绩单的建设, 所谓的攻击向量也在增加, 每一个有可能泄漏成绩的服务都被同学们彻底研究。一个又一个漏洞被发现、利用和查封。

自助服务机部署不久, 同学们便发现打印纸质成绩单的预览界面能够实时显示成绩。接着几天, 自助服务机前面总是有长长的队伍。学校有关部门(信息化技术中心和注册中心)给出的缓解方案是在预览界面打码。但是这并不妨碍愿意为学校做贡献的同学付费打印纸质成绩单, 10元一次。因为打印出来的成绩单上面显然是没有打码的。

几年后, 学校又推出了电子成绩单的服务, 在线支付后即可获得由学校数字签名的电子成绩单一份, 上面的成绩也是实时的, 价格同样是10元一次。不过, 毕业生可以享受免费获得电子成绩单的待遇。顺便一提, 在此之前有同学发现可以利用二学位的系统查询平均学分绩点, 这个学校还没有修复, 或者没必要修复。

然而, 绝大多数同学们是不愿为查一次成绩而付费的。同时, 新事物和新技术的诞生总是伴随着缺陷, 电子成绩单服务也不例外。在2018年暑期小学期, 有同学在私下讨论一个神秘的网址, 在这个页面里输入自己的邮箱, 就可以免费获得电子成绩单, 其中包含实时的成绩。后来与学长讨论得知, 这个网址实际上正是毕业生免费获得电子成绩单的入口, 有趣的是系统并没有检查访问该页面的学生是否真是毕业生。学校有关部门给出的缓解方案是显而易见的——加入相关检查。

故事到此并没有结束。在大黑阔n+e的带领下, 同学们又进一步发现电子成绩单的支付流程存在漏洞: 创建订单时, 支付的金额是由前端传入的。于是, 同学可以在创建电子成绩单订单时将金额修改为0.01元(这是支付系统支持的最小金额, 再低就无法支付成功了), 支付成功后照样可以获得电子成绩单。支付的金额整整变为原来的一千分之一。缓解方案也是显而易见的——金额等参数不由前端传入, 而是由后台计算。

一波未平, 一波又起, 这就是生活的常态啊! 在上面这个漏洞没有修复前, lc哥哥又发现支付流程的另外一个漏洞: 电子成绩单系统没有验证支付网关返回数据的数字签名或者HMAC。这样, 同学伪造支付成功的数据提交给电子成绩单系统, 即可欺骗系统认为支付成功, 从而发送电子成绩单给同学。缓解方案仍然是显而易见的——在电子成绩单系统加入数字签名或HMAC验证。

至此, 没有其他已知的方法可以免费查询实时的成绩了, 学校也获得了最终的胜利, 获得了成绩单之王的称号。

无论如何, 在一个约定的日子查询成绩, 总是比提前查成绩更庄重、有仪式感。在那天, 同学们可以共同分享自己得高分的喜悦或者得低分的悲愤。然而, 在”放管服”改革的浪潮之下, 学校有关部门(教务处)也应该为学生考虑更多一些, 减少学生的发病率[1], 将决定何时发布课程最终成绩的权利下放给每一位任课老师, 也就是改为所谓的实时出成绩。

总之, 在学校政策没有变化之前, 希望其他广大同学在学校正式发布成绩之日查询到自己满意的成绩, 高高兴兴回家过年。

这篇博客献给为成绩日日夜夜辛苦奋斗的同学们, 以及维护校内信息系统稳定运行的运维和研发团队的老师同学们。

相关阅读:

[1] 足不出户, 如何提前查看成绩

几张图片:

发表评论

注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)

本文链接:https://twd2.me/archives/11513QrCode