竞争条件通常是在操作系统编程时会遇到的安全问题:当两个或多个进程试图在同一时刻访问共享内存,或读写某些共享数据时,最后的竞争结果取决于线程执行的顺序(线程运行时序),称为竞争条件( Race Conditions)。

比如:从“会员中心”登录账号后,在“个人中心”->“资产中心”的“我的预存款”页面
2.png

点击提现按钮后,将向服务端发送支付密码参数(payPwd)、申请提现金额参数(amount)以及cookies信息。通过抓取数据包可发现,支付密码参数(payPwd)明文传输。

3.png

修改提现金额小于可提现金额,通过重放脚本重放此提现过程,实现在服务端提现金额修改前,短时间快速提交多笔提现请求。脚本运行如图:
4.png

取消提现可获取额外的可用预存款。
5.png

产生原因:定义成员变量userName属于Servlet整个类中共享的资源,在方法体中定义的局部变量name,成员变量(也就是全局变量)随着对象的存在而存在,随着对象的销毁而销毁,那么就是servlet实例只要存在,userName成员变量其实被所有线程共享,代码如下:

7.png

标签: none

添加新评论