房费制 它 结账BUG
最近,我们已经开始做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最后应该是谁呢?
通过以上的论述,相信大家对红色框中的四个字段的由来非常信服了,假设大家还有什么不懂地方,能够找我私下讨论。
版权声明:本文博客原创文章,博客,未经同意,不得转载。
房费制 它 结账BUG相关推荐
- 机房收费系统 之 结账BUG
声明:以下内容只对将卡表和退卡表放在同一张表的同学适用! 最近大家都已经开始做VB.NET机房收费系统重构版,在这里跟大家聊聊我在机房收费系统中发现的漏洞. 在机房收费系统中有这样一个窗体--结账.个 ...
- 房费制——报表(1)
报告对我真的是一个新事物.他花了很长的时间才对报告 主要的了解. 首先,VB中有一个报表的控件Grid++Report Engine5.0TypeLibrary.其次.报表的制作是通过"Gr ...
- 房费制——概要设计说明书
概要设计说明书 1引言 1.1编写目的 这是一个宏观的把控系统开发总概括,对于对象.类等进行一定的大体的设计.设计人员能够通过概要设计为接下来的具体设计做准备. 预期读者是设计人员. 1.2背景 说明 ...
- 常见的POS打印机分类
首页 --> 新闻资讯 --> 行业新闻 常见的POS打印机分类 一.税控POS机 税控POS机(又称为金融税控POS机)是一种既具有法律严肃性和不可破坏性又具有计税控制管理功能的电子收款 ...
- 为什么短暂的秦朝,如今有人推崇
因为商鞅变法后的秦是人类文明史上罕见的BUG,在一个铁器尚未普及的时代,秦达到了接近工业社会的组织力和动员力,并将这一体制的活力维持了百余年,这本身就是个奇迹. 后世封建王朝只有朱元璋治下的明代接近这 ...
- 作为一个工程师结果读不懂英文官方文档,这可怎么办
目录 1.从最简单的源码开始:别幻想一步登天 2.循序渐进:先搞定底层依赖的技术 3.一定要以Hello World作为入口来阅读 4.抓大放小,边写注释边画图 5.反复三遍,真正理解源码 6.借力打 ...
- 渝粤题库 西北工业大学 基础会计学 作业
基础会计学 单选题 "管理费用"属于( )账户 "制造费用"账户按用途和结构分类,属于( )账户 "资产=负债+所有者权益"不是( )的依据 ...
- [python][Bug记录]特殊16进制转成对应的语言
字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(en ...
- 在线学位课程_您在四年制计算机科学学位课程中学到的知识
在线学位课程 by Colin Smith 通过科林·史密斯 您在四年制计算机科学学位课程中学到的知识 (What you learn in a 4 year Computer Science deg ...
最新文章
- POJ2762 Going from u to v or from v to u? 强连通+缩点
- SAP Spartacus HTTP拦截器Interceptor
- js 通用 1000 金额 三位格式化 1,000
- 数学通大道,算法合自然?
- [Unity脚本运行时更新]C#6新特性
- “瘟疫”笼罩下的物联网危与机
- Python+OpenCV:立体图像深度图(Depth Map from Stereo Images)
- C语言 复制字符串 malloc
- iOS autoreleasePool 深入理解
- Posta:跨文档信息安全搜索工具
- R语言非参数检验(二)
- 问题解决:Deepin-TIM版本太低无法登录
- 88家上市公司区块链分布图:七成拓展落地应用 互联网公司善于底层基础
- ArcGIS Model批量矢量裁剪矢量
- 卫星影像去雾与色彩复原
- dp在约会上是什么意思_第一次约会,女生让你碰这三个部位,十有八九就是对你有意思...
- OpenCV颜色空间——Luv颜色空间
- 算法工程师独得恩宠 四面楚歌的Android工程师该何去何从?
- 猿辅导python编程老师面试_猿辅导辅导老师面试过程➕感受
- AR增强现实与AI人工智能融合的未来
热门文章
- 【Linux】服务管理命令和压缩管理的详细解读
- 9.Springcloud的Hystrix服务熔断和服务降级
- 写一个函数返回参数二进制中1的个数
- Linux磁盘分区详解(parted)
- cc java区别_cC和C++和java的问题有啥区别?
- sf | 空间矢量对象的“聚合”操作
- 前端开发者正在被迫成为全栈开发人员
- 零基础转行web前端,如何高效的去学习web前端?
- 汇编语言:程序如下,编写code段中的代码,将a段和b段中的数据一次相加,结果放到c段中
- QPainter的使用