Web应用程序可以同时处理很多HTTP请求。开发人员常常在使用变量时不注意 线程 安全问题。
线程安全 是指一个对象或类的成员变量在 多线程 并发访问的时候总是保持有效的状态。
当另一个用户在同一时刻加载同一个页面时,可能存在可被利用的并发漏洞。
下面是一个购物车并发漏洞的模拟实验。实验环境的介绍请参考: Web安全漏洞实验平台Webgoat学习(1):怎么用?
实验页面如下图所示,你的目标是利用存在的购物车并发漏洞,以较低的价格购买高价格商品。
实验步骤如下:
1. 开启两个浏览器窗口,窗口A中,选择较便宜的商品,如$169的Hitachi – 750GB External Hard Drive,点击【Update Cart】按钮将商品加入购物车,然后点击【Purchase】购买按钮。如图:
2. 在窗口 B 中,选择较贵的商品,如$1799的Sony – Vaio with Intel Centrino,然后按【Update Cart】更新购物车按钮。如图:
3. 打开窗口 A,点击【Confirm】确认按钮,结果显示以较低的价格$169购买到了价格为$1799的商品,实验目标完成。如图:
原因:
在代码中使用了 静态变量 ,且都 没有做线程安全保护 ,代码( JAVA )如下:
// Shared Variables private static int total = 0; private static float runningTOTAL = 0; private static int subTOTAL = 0; private static float calcTOTAL = 0; private static int quantity1 = 0; private static int quantity2 = 0; private static int quantity3 = 0;