機房收費系統之結賬BUG
來源:懂視網
責編:小采
時間:2020-11-09 14:54:25
機房收費系統之結賬BUG
機房收費系統之結賬BUG:聲明:以下內容只對將卡表和退卡表放在同一張表的同學適用! 最近大家都已經開始做VB.NET機房收費系統重構版,在這里跟大家聊聊我在機房收費系統中發現的漏洞。 在機房收費系統中有這樣一個窗體--結賬。個人認為結賬的功能是:領導對操作員注冊退卡進行結賬
導讀機房收費系統之結賬BUG:聲明:以下內容只對將卡表和退卡表放在同一張表的同學適用! 最近大家都已經開始做VB.NET機房收費系統重構版,在這里跟大家聊聊我在機房收費系統中發現的漏洞。 在機房收費系統中有這樣一個窗體--結賬。個人認為結賬的功能是:領導對操作員注冊退卡進行結賬
聲明:以下內容只對將卡表和退卡表放在同一張表的同學適用! 最近大家都已經開始做VB.NET機房收費系統重構版,在這里跟大家聊聊我在機房收費系統中發現的漏洞。 在機房收費系統中有這樣一個窗體--結賬。個人認為結賬的功能是:領導對操作員注冊退卡進行結賬
聲明:以下內容只對將卡表和退卡表放在同一張表的同學適用!
最近大家都已經開始做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最后應該是誰呢?
通過以上的論述,相信大家對紅色框中的四個字段的由來很信服了,如果大家還有什么不懂地方,可以找我私下討論。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com
機房收費系統之結賬BUG
機房收費系統之結賬BUG:聲明:以下內容只對將卡表和退卡表放在同一張表的同學適用! 最近大家都已經開始做VB.NET機房收費系統重構版,在這里跟大家聊聊我在機房收費系統中發現的漏洞。 在機房收費系統中有這樣一個窗體--結賬。個人認為結賬的功能是:領導對操作員注冊退卡進行結賬