房费制 它 结账BUG
2015-07-05 09:16
204 查看
声明:以下内容仅仅是对在桌子上的卡与卡表的后面,适合学生的表!
最近,我们已经开始做VB.NET系统重构版,在这里跟大家聊聊我在机房收费系统中发现的漏洞。
在机房收费系统中有这样一个窗口--结账。个人觉得结账的功能是:领导对操作员注冊退卡进行结账,简单的说就是领导来收钱,假设你是一个操作员,每天充值退卡,你要知道你这段时间都赚了多少钱。
今天要说的重点就是卡表的结账!在结账中,有一个购卡。有一个退卡。
也就是说,对于同一张卡,它注冊后须要结账一次。退卡后也须要结账一次。
让我们来看看我数据库的卡表设计:
这里我们先不要纠结卡号是否为主键,每一个字段的数据类型对不正确。今天主要讲的是图中红色框框中的东西!假设你的注冊和退卡在一张表中,假设你的卡表设计没有这四个字段,那么我能够非常肯定的告诉你,你的结账有漏洞。
以下我们就来详细的说明为什么没有这四个字段就会有漏洞:
如图。一般大家的卡表设计都是这样,仅仅有一个IsCheck字段和一个Handler字段。这样我们在结账的时候,假设有一张卡正在使用、未结账,然后我们就能在结账-购卡中把它查询出来。然后我们如今把它结账,这条记录的IsCheck字段就变成“已结账”。然后我们再对这张卡进行退卡操作!
这时的退卡就没有结账,但是我们在结账-退卡中却查询不出来!
这时为什么呢?如今我们来对照一下我们查询时使用的SQL语句:
结账-购卡:
结账-退卡:
通过对照这两条SQL语句,我们就能知道,假设结账-购卡的时候就把IsCheck字段改成“已结账”那么我们结账-退卡的时候就查不出来这条记录。
说完了registerIsCheck和logoutIsCheck字段的由来,以下再说说registerHandler和logoutHandler的由来:
假设我们的卡表里面仅仅有一个Handler字段。那么假设我们在操作员1处购卡,在操作员2处退卡,那么该记录的Handler最后应该是谁呢?
通过以上的论述,相信大家对红色框中的四个字段的由来非常信服了,假设大家还有什么不懂地方,能够找我私下讨论。
最近,我们已经开始做VB.NET系统重构版,在这里跟大家聊聊我在机房收费系统中发现的漏洞。
在机房收费系统中有这样一个窗口--结账。个人觉得结账的功能是:领导对操作员注冊退卡进行结账,简单的说就是领导来收钱,假设你是一个操作员,每天充值退卡,你要知道你这段时间都赚了多少钱。
今天要说的重点就是卡表的结账!在结账中,有一个购卡。有一个退卡。
也就是说,对于同一张卡,它注冊后须要结账一次。退卡后也须要结账一次。
让我们来看看我数据库的卡表设计:
这里我们先不要纠结卡号是否为主键,每一个字段的数据类型对不正确。今天主要讲的是图中红色框框中的东西!假设你的注冊和退卡在一张表中,假设你的卡表设计没有这四个字段,那么我能够非常肯定的告诉你,你的结账有漏洞。
以下我们就来详细的说明为什么没有这四个字段就会有漏洞:
如图。一般大家的卡表设计都是这样,仅仅有一个IsCheck字段和一个Handler字段。这样我们在结账的时候,假设有一张卡正在使用、未结账,然后我们就能在结账-购卡中把它查询出来。然后我们如今把它结账,这条记录的IsCheck字段就变成“已结账”。然后我们再对这张卡进行退卡操作!
这时的退卡就没有结账,但是我们在结账-退卡中却查询不出来!
这时为什么呢?如今我们来对照一下我们查询时使用的SQL语句:
结账-购卡:
select * from T_Card where IsCheck='未结账' and handler=@handler
select * from T_Card where regitsterIsCheck='未结账' and registerHandler=@handler
结账-退卡:
select * from T_Card where status='不使用' and IsCheck='未结账' and handler=@handler
select * from T_Card where status='不使用' and logoutIsCheck='未结账' and logoutHandler=@handler
通过对照这两条SQL语句,我们就能知道,假设结账-购卡的时候就把IsCheck字段改成“已结账”那么我们结账-退卡的时候就查不出来这条记录。
说完了registerIsCheck和logoutIsCheck字段的由来,以下再说说registerHandler和logoutHandler的由来:
假设我们的卡表里面仅仅有一个Handler字段。那么假设我们在操作员1处购卡,在操作员2处退卡,那么该记录的Handler最后应该是谁呢?
通过以上的论述,相信大家对红色框中的四个字段的由来非常信服了,假设大家还有什么不懂地方,能够找我私下讨论。
相关文章推荐
- 那些逐渐消失的技艺
- Quartz.NET - Quartz.NET Quick Start Guide
- 优化工作效率
- Quartz.NET - Quartz.NET Quick Start Guide
- 如何让自己的讲话提高档次
- hdu2025查找最大元素
- Quartz.NET 2.0 学习笔记(1) :Quartz.NET简介
- 面向对象设计的基本原则
- Quartz.NET 2.0 学习笔记(1) :Quartz.NET简介
- android学习笔记(九)——动画效果的实现1tween动画
- 队列的顺序存储
- Topshelf 和 Katana:统一的 Web 和服务体系结构
- Topshelf 和 Katana:统一的 Web 和服务体系结构
- 牛人看外文文献的方法
- 九的余数
- 腾讯、百度、阿里深圳建大厦 三巨头玩地产谁最强?
- 使用Topshelf创建Windows 服务
- 使用Topshelf创建Windows 服务
- 用指定颜色填充一个连接域
- Nine Great Books about Information Visualization