自主项目(“新闻博客系统”)特殊功能实现讲解(面试重点)

项目的主要功能,说说

一,验证码功能的实现

通用验证码实现方法

详见项目里的实现文件

二,实名认证功能实现

买了阿里云的服务器,在服务器上挂vpn,然后通过vpn可以访问学校内网。用户验证时,输入学号和教务处密码,然后前端通过简单的对称加密,传输到后端服务器解密,然后模拟一个http请求访问学校的教务网站,如果验证通过即完成实名认证。之后在数据库保存认证的学号。

三,项目中的session和token双重验证

Session是服务器在内存中开辟一段空间存放用户此会话信息,并返回给用户SessionID,下次请求通过请求头中的SessionID就可以拿到该用户Session域中的信息。我用Session做了用户的自动登录,每次通过SessionID判断用户是否已在登录状态。
Token是用来判断该次请求的安全性的,在提交信息的网页的表单处加上一个hidden的随机字符串作为Token,每次都会更换。服务器每次都校验该Token,只有是最新的token才放行。这样可以解决表单重复提交问题,而且防范CSRF攻击。

CSRF是跨域请求伪造攻击。大体上就是当用户持有A网站的通行证时,黑客通过获取用户的cookie获得通行证,然后拿着这个通行证去访问A网站。但由于token的存在,黑客无法拿到含有最新的token的页面,因此在冒充用户访问A网站时无法通过验证

四,防止缓存穿透

缓存穿透,是指查询一个数据库一定不存在的数据。正常的使用缓存流程大致是,数据查询先进行缓存查询,如果key不存在或者key已经过期,再对数据库进行查询,并把查询到的对象,放进缓存。如果数据库查询对象为空,则不放进缓存。

想象一下这个情况,如果传入的参数为-1,会是怎么样?这个-1,就是一定不存在的对象。就会每次都去查询数据库,而每次查询都是空,每次又都不会进行缓存。假如有恶意攻击,就可以利用这个漏洞,对数据库造成压力,甚至压垮数据库。即便是采用UUID,也是很容易找到一个不存在的KEY,进行攻击。

在工作中,会采用缓存空值的方式,也就是【代码流程】中第5步,如果从数据库查询的对象为空,也放入缓存,只是设定的缓存过期时间较短,比如设置为60秒。

五,项目用了几张表,那些表的操作比较活跃

用户信息表,管理员信息表,新闻表,评论表,url地址表,新闻类别表,菜单关系表,日志表,新闻作者表

新闻表以及评论表吧

六,校内学生验证怎么实现的

我是用简单的对称加密把同学输入的账号和密码进行加密传到后台,服务器进行解密并模拟一个http请求访问学校教务处网站,如果用同学输入的账号密码登录成功则校验成功,然后只保存他的学号,否则校验失败。

扫描二维码关注公众号,回复: 5785919 查看本文章

七,拦截器设计

八,新闻异步加载

九,富文本编辑器的实现新闻输入以及编写

十,评论功能的异步加载实现

猜你喜欢

转载自blog.csdn.net/qq_39213969/article/details/89042297