一个在用项目,最近总是发现不正常的数据进来,而且是成功状态,后果非常严重。但之前负责这个项目的同事离职了,现在我在接手,所以bug找的总是不得头绪。
今天按照逻辑来说,已经彻底将这个bug排除了,在此记录一下。
因为项目已经在用, 不能说的太细,先大概简单说一下bug。
情况一:小A没有分配提交数据的权限,结果他们却将数据提交上来。
情况二:小A正常情况下,应该向所属主管提交数据,结果他们却能将数据提交到经理那,甚至董事长那,跨级提交。
第一种情况,后来发现是存储过程写的有问题,在判断是否有提交权限时,使用了select sum(*),后面又用if(@@rowcount=0)来判断是否有结果,这样即使没有记录,sum出来的也会是0,rowcount会一直有结果,条件也会一直成立,最后一道防线没起到作用。
补救办法:修改存储过程为select @cou=isnull(SUM(cou),0) ,后面判断用if(@cou=0),前台之前没有判断,现在也加上判断。
第二种情况发生的情况是因为用户在提前数据交会产生一个session,提交页面根据这个session来判断用户有没有权限提交数据。
这时如果小B有提交权限,他先登录,访问提交页面,创建一个session。到正式提交页面,不点确认提交按钮,而是直接在地址再输入登录地址,使用小A的帐户来登录,然后再通过地址栏,直接访问提交页面,这时小B访问创建的session还是存在的,这样即使小A没有权限提交,只要session存在,小A也是能提交的。
补救办法:登录时,清空session。
总结:其实会产生bug,还是逻辑没有理顺,按说这也是个小bug,只是平时的习惯,没有太注意而已。