学生信息查询系统
技术栈 🀄️
- Django
- requests
- rsa
- nginx
项目简介 ➖
此项目旨在「方便同学查询学科成绩」,以往查询成绩的方式主要为
- 登录教务系统,查看成绩,需要连接学校内网,过程较为繁琐
- 登录今日校园app,较方便,不过会遇到找不到入口的问题
- 校内公众号后台入口,也很OK
本项目亮点 - 省去了中间的繁琐环节,仅通过一个网址入口登录,即可跳转成绩页面,显示在校所有科目的成绩及对应学分等,成绩数据来源为学校教务系统,戳👇
-
查询地址 - 「https://scores.search.chenxuefan.cn/」(已停止维护)
项目截图 🤚
/查询页面,背景为学校内景/
/查询结果页面/
技术细节 🧵
1. 抓包与登录操作
常规操作,右键检查,抓一波包,找到登录的那一条请求,点开一看,果不其然,登录信息果然有点东西 😇
问题不大,一个个来分析,从上图可以发现,登录参数有这几个
csrftoken
- 大眼瞪小眼,好家伙又是你。anyway觉得陌生或不熟悉这个参数名的话可以通过开发者工具的搜索框搜一下,看是从哪一条请求里面来的,总之这个参数值通常在网页表单控件的源html代码里可以找到,不是很难拿到language
- 见名知意,语言,不是特殊参数yhm
- 见名知意,用户名,也就是学号,且没有被加密mm
- 第一眼,密码;第二眼,被加密了;第三眼,懵逼中…;第四眼,持续懵逼中…
好了,难点来了,遇到问题,不要慌。首先我们现在可以确定,密码是被加密了的,并且经过测试,无论我输入什么样的密码,被加密后的字段长度都是一样长的
这就比较有趣了,经过多方查证资料之后,我了解到这是一段被RSA加密算法
加密后的SHA-256函数值
,RSA加密算法即“非对称加密算法”,以前学区块链的时候了解过,简单来讲就是公钥加密私钥解密,而公钥是公开的(废话),所以公钥肯定藏在某一个请求里面,经过测试,这条请求,就是加载初始网页的时候,唯一的一条动态加载(XHR)的请求,点进去一看,链接中间带有getPublicKey
字段,嗯,靠谱
把它找出来,发送一个请求就可以拿到两个公钥参数exponent
modulus
,接着用公钥给原密码加密,进而得到跟上文一样的加密结果,劲!
详细操作见项目代码。
这样的加密方式,在很多平台也都被频繁地使用,所以需要掌握。
关于RSA加密的推荐阅读 - 【来龙去脉系列】RSA算法原理
2. CentOS7下部署Django项目
技术栈 - centos7+nginx+uwsgi+python3+django
做好了整个Django项目就可以上线到服务器了,服务器是阿里云的,域名是用之前的域名申请的二级域名,具体的流程参考这篇官方文档 - 「https://www.django.cn/article/show-4.html#banqian」
整个部署过程简单概括分三块 - django、uwsgi、nginx
-
将做好的项目上传到服务器之后,部署运行这个项目所需的环境,最后让这个Django项目能够运行起来
-
配置uwsgi,在项目根目录下创建
mysite.xml
文件,添加如下代码,运行此文件<uwsgi> <socket>127.0.0.1:8997</socket> <!-- 内部端口,自定义 --> <chdir>/data/wwwroot/mysite/</chdir> <!-- 项目路径 --> <module>mysite.wsgi</module> <!-- mysite为wsgi.py所在目录名--> <processes>4</processes> <!-- 进程数 --> <daemonize>uwsgi.log</daemonize> <!-- 日志文件 --> </uwsgi>
-
添加nginx配置文件,即配置
nginx.conf
文件,具体代码参考上方的文档,其中的对应参数需参考上一步的代码,这个过程为使得文件生效,需重启nginx和uwsgi服务,用到的命令:systemctl start/stop/restart nginx.server #启动/关闭/重启nginx service nginx start/stop/restart #启动/关闭/重启nginx killall nginx #杀死所有nginx进程 nginx -t #检查nginx配置文件 uwsgi -x mysite.xml #运行xml文件 killall uwsgi #杀死所有uwsgi进程
更多👴
完结撒花 🌹