为了避免这样的错误,可使用Java异常处理机制,改善后的代码如下:
public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("请输入一个整数:"); String str = sc.nextLine(); // 接收键盘记录 int num = 0; try { num = Integer.parseInt(str); // 将字符串转换为整数 } catch (Exception e) { System.out.println("类型转换异常!"); } System.out.println("您输入的是:" + num); } |
这样即使程序再出错,也不会直接崩溃,再次输入字符串"Hello"进行测试,结果如图10-18所示。
可能有人会说:使用异常处理是比较合理的做法,怎么可能造成0元购买商品漏洞呢?请读者注意一下图 10-18,程序的执行流程最后显示的是"您输入的是0",程序虽然没有退出,但这个0可能会影响之后的代码执行结果。
有些支付页面会做一些这样的异常处理措施,但如果没有正确地使用异常处理,则可能会隐藏安全隐患。
图10-18 异常处理
逻辑漏洞的例子数不胜数,这里关键是看程序员的思维,很多程序都是闭源的,我们看不到其源码,只能"盲目"地修改HTPP请求参数测试,也就是Fuzz Testing。
常见的支付逻辑漏洞场景还有商品价格修改、物流运费修改等。
本文选自《Web安全深度剖析》第十章,本站经电子工业出版社和作者的授权。
版权声明:51Testing软件测试网获电子工业出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。