博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个session id覆盖的小问题
阅读量:7000 次
发布时间:2019-06-27

本文共 774 字,大约阅读时间需要 2 分钟。

新项目线上部署,查看日志时,看到一个空指针异常。然后看到异常位置,跑到gitlab上搜到这个代码查看:

HttpSession session = request.getSession(false);if (session == null ||     !(session.getAttribute(Constants.VERCODE).equals(verCode))) {.....

这是把验证码放到session里了,然后从session里获取进行验证。但业务开发人员没考虑获取不到验证码的场景,然后……空指针了。

一个小问题,但为什么会这里获取不到验证码,为什么没有测试出来?

看完代码,继续看了下日志,获取验证码接口与登录接口的sessionId不一致。我们sessionId是存放在cookie里的,前端没做任何操作。

打开网站试了下登录,触发了这个空指针异常。。。但再次登录就正常,有点意思了。

然后看了下前端请求调用,发现了端倪。

会话正常流程是,前端初次请求后台接口,cookie里没有sessionId,后台初始化一个,并存放到cookie里返回。前端第二次请求的时候,携带这个cookie中的sessionId进行访问。

抓请求的时候发现,初次打开页面时,前端发起了两次后台请求。一个请求是获取验证码,另一个请求是查询一些公告信息。

两个接口都是以没有sessionId的状态进行请求,所以后台为两个接口都初始了session,不同的sessionId,验证码接口先返回,信息查询接口后返回,覆盖了浏览器cookie中的值。

这次,要不是后台开发的不严谨,估计只会以为自己是验证码输入错误而已……没料到这是一个必现的BUG。

转载于:https://www.cnblogs.com/coderzl/p/7521328.html

你可能感兴趣的文章
15.事件
查看>>
99.ext afteredit事件详解
查看>>
CSMA/CD
查看>>
Logistic回归
查看>>
jq ajax之beforesend(XHR)
查看>>
P2151 [SDOI2009]HH去散步
查看>>
python作业题
查看>>
C语言第二次博客作业---分支结构
查看>>
(转)windows系统下Python环境的搭建
查看>>
[Poetize6] IncDec Sequence
查看>>
matlab 获得corner点(未完待续)
查看>>
Windows下快速建立cocos2d-x项目
查看>>
python break ,continue和 pass 语句(八)
查看>>
发布一个Python小程序:ManHourCalendar
查看>>
一次sendmsg的改造过程
查看>>
Bugzilla
查看>>
HDU 4608 I-number
查看>>
题目1047:素数判定
查看>>
Codefroces 958C2 - Encryption (medium)
查看>>
牛客网NOIP赛前集训营-提高组(第七场)C 洞穴
查看>>