并发测试
intro
每一个开发都会写bug,出现bug也不一定是一件坏事.
从每一次写bug的过程中进行总结,都可以让技术水平得到提高.
因为这次发现的bug比较有价值,所以记录了下来.
测试的职责验证正常/异常的逻辑是否正确.
一个好的测试在验证功能的同时,还会review代码是否规范和是否严谨,我很庆幸我身边有几位这样的测试.
对于写出不好看的代码,我是比较讨厌的,会让整个人都觉得不舒服.
我认为每一行代码都应有自己的"灵魂"((⊙v⊙)嗯,太装x了).
所以我写出了很多shit一样的代码…功能上线后再进行重构…所以,这也就是最近这段时间木有发博客的原因.(借口…)
好了好了,扯远了.言归正传
error
产品/运营:我们要有一个抽奖活动,每个用户活动期间只能参加一次.
开发:ok,完成了.
测试:功能验证通过了.
黑客:哇,有bug.大赚一笔美滋滋!!!
process
业务逻辑本身非常简单,所以开发如下:
if(判断使用户是否参加过抽奖)
{
进行抽奖
记录用户已经抽奖
}
else{
已经抽过
}
而实际如果都是正常用户的情况下,代码本身看起来好像并没有问题.但是互联网中有一群非常讨厌的人存在,黑客/羊毛党等等.
实际:在高并发并发中这一段代码是有问题的,大量请求可能都进入了未抽过奖的逻辑判断,而导致奖品超发.
修正1:
if(判断使用户是否参加过抽奖,如果没有抽过,标记用户已经抽取)
{
进行抽奖
}
else{
已经抽过
}
修正2:
if(判断使用户是否参加过抽奖)
{
if(这次请求是否加锁,如果没有加锁){
加锁该次请求
进行抽奖
记录用户已经抽奖
}else{
领取失败
}
}
else{
已经抽过
}
关于加锁我习惯使用REDIS INCR key,返回INCR后的值.
其实在工作的过程中,我发现很多人都有写过这样的bug.只是因为价值不够大,没有特意去说.
嗯,然后听说马蜂窝318有个很给力的活动.然后一个可恶的测试就发现了这个bug,并加以利用.真是可恶啊!!!

这里再安利一款工具Charles,做客户端的小伙伴应该很常用.其实我也想安利Burpsuite,因为太贵了….买不起

end
所以以后在开发的过程中,不仅需要关注参数是否正确,请求是否越权,是否存在xss,是否存在sql注入,是否存在任意命令执行,
是否存在超时请求,是否存在并发问题…..
真是可恶啊!!!!!! 人与人之间没有任何信任可言!!!