机房收费系统 之 结账漏洞

声明:以下内容只对将卡表和退卡表放在同一张表的同学适用!

最近大家都已经开始做VB.NET机房收费系统重构版,在这里跟大家聊聊我在机房收费系统中发现的漏洞。

在机房收费系统中有这样一个窗体--结账。个人认为结账的功能是:领导对操作员注册退卡进行结账,简单的说就是领导来收钱,如果你是一个操作员,每天充值退卡,你要知道你这段时间都赚了多少钱。

今天要说的重点就是卡表的结账!在结账中,有一个购卡,有一个退卡。也就是说,对于同一张卡,它注册后需要结账一次,退卡后也需要结账一次。

让我们来看看我数据库的卡表设计:

这里我们先不要纠结卡号是否为主键,每个字段的数据类型对不对。今天主要讲的是图中红色框框中的东西!如果你的注册和退卡在一张表中,如果你的卡表设计没有这四个字段,那么我可以很肯定的告诉你,你的结账有漏洞。

下面我们就来具体的说明为什么没有这四个字段就会有漏洞:

如图,一般大家的卡表设计都是这样,只有一个IsCheck字段和一个Handler字段。这样我们在结账的时候,如果有一张卡正在使用、未结账,然后我们就能在结账-购卡中把它查询出来。然后我们现在把它结账,这条记录的IsCheck字段就变成“已结账”,然后我们再对这张卡进行退卡操作!这时的退卡就没有结账,可是我们在结账-退卡中却查询不出来!这时为什么呢?现在我们来对比一下我们查询时使用的SQL语句:

结账-购卡

select * from T_Card where IsCheck='未结账' and [email protected]
select * from T_Card where regitsterIsCheck='未结账' and [email protected]

结账-退卡

select * from T_Card where status='不使用' and IsCheck='未结账' and [email protected]
select * from T_Card where status='不使用' and logoutIsCheck='未结账' and [email protected]

通过对比这两条SQL语句,我们就能知道,如果结账-购卡的时候就把IsCheck字段改成“已结账”那么我们结账-退卡的时候就查不出来这条记录。

说完了registerIsCheck和logoutIsCheck字段的由来,下面再说说registerHandler和logoutHandler的由来:

如果我们的卡表里面只有一个Handler字段,那么如果我们在操作员1处购卡,在操作员2处退卡,那么该记录的Handler最后应该是谁呢?

通过以上的论述,相信大家对红色框中的四个字段的由来很信服了,如果大家还有什么不懂地方,可以找我私下讨论。

时间: 2024-10-12 18:02:40

机房收费系统 之 结账漏洞的相关文章

职责链模式——机房收费系统下机结账

在机房收费系统中,学生下机结账最让人头疼了.因为学生的消费时间(下机时间-上机时间-上机准备时间)有三种情况: 1.消费时间<=0,也就是下机时间与上机时间的间隔在上机准备时间范围内,这种情况是不收费的. 2.消费时间<=最少上机时间,这种情况下消费时间按照最少上机时间收费. 3.消费时间>最少上机时间,这种情况还要考虑递增单位时间.比如递增单位时间是10分钟,消费时间是42分 钟,42/10=4.....2,这种情况要按照50分钟收费. 以上消费时间就分了三种情况,更复杂的是第二种和第

机房收费系统——报表(2)

二.代码部分 跟之前写的excel相比,我觉得报表还是有点相同的.大体思路是这样的: 先定义. (报表:Dim Withevents 对象变量 As 类名 这种用法是加载该类的事件,Withevents之后就能在代码编辑窗看到该类的事件了(如果有的话). 因为类不像控件,双击控件就可以进入事件编辑. 使用WithEvents 变量时,应该注意下面这些限制条件: WithEvents变量不能是派生对象变量.也就是说,不能把它声明为As  Object-当声明该变量时必须指定类名. 不能把 With

机房收费系统学生下机结账小结

这几天一直在考虑机房收费系统学生下机操作.学生下机,一则须要加入学生下机记录信息:还须要计算学生在整 个上机过程中所花费的金额,而且更新学生剩余金额.那么如何做在性能上或者扩展上更好一些呢? 操作 1.加入学生下机信息 2.计算学生上机时间 3.依据上机时间来计算学生所花费的金额 4.更新学生的剩余金额 设计模式 在通过学生上机时间来计算学生所花费的金额这步操作上,须要进行一些条件分支语句的推断.由于上机时间被分为 了三部分:准备时间.至少上机时间.上机时间.所以在步骤3中有大量的条件分支语句,

机房收费系统——测试计划

测试计划(GB8567--88) 1引言 在项目基本编码工作完成的就要进行测试,对于排除出错误和修复漏洞有重要作用. 1.1编写目的 测试的主要目的就是尽可能多的找到系统中的漏洞,并且设计出测试用例,对系统测试.目的及在于对测试的方法.测试流程,有一定大体上的掌控.本文档的预期读者是测试人员. 系统测试在整个项目开发过程中,比例占到了40%~50%.基本上在项目进行编码的过程中就开始了测试,所以测试的好坏也影响了系统的功能实现情况. 1.2背景 说明: a.  测试计划所从属的软件系统的名称:机

机房收费系统——測试计划

測试计划(GB8567--88) 1引言 在项目基本编码工作完毕的就要进行測试.对于排除出错误和修复漏洞有重要作用. 1.1编写目的 測试的主要目的就是尽可能多的找到系统中的漏洞,而且设计出測试用例,对系统測试.目的及在于对測试的方法.測试流程,有一定大体上的掌控. 本文档的预期读者是測试人员. 系统測试在整个项目开发过程中.比例占到了40%~50%.基本上在项目进行编码的过程中就開始了測试,所以測试的好坏也影响了系统的功能实现情况. 1.2背景 说明: a.  測试计划所从属的软件系统的名称:

机房收费系统合作——再看数据库设计

机房合作我负责了最简单的D层,接口层,工厂层.反正D层是我来写,于是数据库索性也就顺便设计了.已经是第三次敲机房收费系统了,每次都是相隔半年左右吧.需求搞得透透的了,数据库也就好设计了.基本跟第二次没什么大的区别,就是把Student表和Card表分开了. 重构的时候,我的数据库几乎什么都用到了:事务,存储过程,触发器,视图,联合查询等等.所以,这次设计数据库还是SO Easy的..并且,为了让婵婵和牛迁迁师哥写的方便,我把组合查询都写成了存储过程!!!!费了一番功夫,但是D层简单了不少.还记得

机房收费系统总结

经过二十天的艰苦奋斗我的机房收费系统终于敲完了,在回家之前又让师傅验收了一边终于通过,自己当时感觉那叫一个兴奋呀,终于可以高高兴兴回家了,太好了.当时兴奋过头导致没有写总结,以致回到家后才写总结. 我在做机房收费系统时,感觉最让人头疼的就是结账.算钱,虽然自己是个理科生,可是这算账真不敢恭维,那真叫个一塌糊涂,怎么都算不清楚.那时真的想找块豆腐去撞一下,把自己给撞清醒了.不过好在最后终于做出来,当时感觉世界瞬间就亮了. 其实在做完机房收费系统,最大的感受就是要理清自己的思路,无论是结账还是上下机

机房收费系统中遇到的SQL语句问题

个人版机房收费系统正在进行中,遇到了几个有关SQL语句的问题. 1.sum函数的使用: 在结账部分,要求出某个表中某一列的和.在第一次机房系统中,我不知道sum函数的存在,很傻很天真地用循环一个一个往上加.下面以求所有卡中余额的和来说说sum函数怎么使,SQL语句为:select sum(cash)from T_Card.这个格式不是固定的,可以根据需求更改,比如求多列的和:select sum(列名1),sum(列名2)...from [表名] where....查询出来的结果只有一行,如果只

机房收费系统——数据库设计说明书

GB8567--88 数据库设计说明书 1      引言 优质数据库在处理大数据的程序或系统中是有非常重要的作用的,所以对于数据库的设计有很多的要求和规定.首先数据库要有很好的可维护性.灵活性,并且数据库的算法逻辑性也要有一定的优化性,这样可以对资源进行有效利用,并且处理数据的时间也会缩短. 1.1   编写目的 由于上机的人越来越多,产生的上机数据越来越多,原始的保存方式已经不能满足数据存储的需要,所以使用数据库对各种记录进行存储.并且数据库可以节省很多的资源,如人力.时间.空间等. 数据库