Concurrency 并发
它包括通常由于Java静态方法使用不当造成的威胁的安全问题和购物车并发的缺陷 。Web应用程序可以同时处理的HTTP请求

原理:

线程安全是指一个对象或类等领域始终保持有效状态时,由多个线程同时使用。它通常是可以利用加载另一个用户精确地在同一时间在同一页的并发错误 。因为所有的线程共享相同的方法区,方法区是所有类变量存储,多个线程可以尝试同时使用相同的类变量 。

Thread Safety Problems

目标:

是指多个用户同时试图同一个功能,从而造成并发错误,获取他人信息。

演示

clip_image002

这里要求我们以’jeff’和’dave’这两个用户同时提交请求,以便造成并发错误,获取别人信息。

clip_image004

clip_image006

同时按提交就完成了,这里就获得了他人信息

Shopping Cart Concurrency Flaw

购物车并发缺陷

利用并发问题,以达到低价购买商品

举个例子:
帐户A 有100 存款
帐户B 有100 存款.。
用户1 和用户2 都希望从帐户A 转10 分到帐户B,
如果是正确的交易的结果应该是:帐户A 80 分帐户B 120 分
然而,由于并发性的问题,可以得到下面的结果:
用户1 检查帐户A ( = 100 分)用户2 检查帐户A ( = 100 分)
用户2 需要从帐户A 拿取10 分( = 90 分) ,并把它放在帐户B ( = 110 分)
用户1 需要从帐户A 拿取10 分(仍然认为含有100 个分) ( = 90 分) ,并把它放到B( = 120 分)
结果:帐户A 90 分帐户B 120 分

演示
clip_image008

打开浏览器浏览同一页面

clip_image009

在窗口A中选择一个低成本的项目,点击“购买”

clip_image010

在窗口B选择一个高成本项目购买,点击“更新”。这样可变的价格已被覆盖了。

clip_image012

在窗口A单击“确认”,那么你就以较低的价格购买了。