2010-07-04 33 views
4

如果我想創建一個簡單的防欺詐和不可否認系統,我應該考慮哪些關鍵功能?對於這個問題,我主要關注數據庫行的完整性。這不是安全許可問題。創建一個簡單的不可否認/防欺詐系統

使用的足球數據庫爲例,一些我將實現主要特點是:

  1. 防止DBA使用傳統的SQL修改行數據。例如,如果數據庫行已經存儲2:1作爲結果,如果DBA將結果更改爲2:3,我們應該能夠檢測到修改。所有更改應通過主應用程序完成。

  2. 阻止一個行中的數據的另一行的使用後端的變化複製。我們應該能夠發現欺詐變化。

我還應該考慮讓我的系統更加欺詐證據的任何其他問題或功能?我應該瞭解哪些最佳做法?任何指針將不勝感激。

非常感謝提前。

回答

3

創建一列,這是其他列的加密簽名。只要ID包含在簽名計算中,就不能複製一行,因爲ID會改變。如果沒有重新計算哈希,就不能執行修改,因此DBA的更改也是可檢測的。

這並沒有解決DBA 刪除行的問題,請注意,它只會驗證每個單獨的行是否經過了適當的業務邏輯。你可能會爲整個桌子包含一個簽名,但是開始變得非常沉重!

當然,在某些時候你需要一個祕密 - 簽名密鑰的私人部分。您的代碼將需要訪問......不管是誰寫的代碼可以包括後門電子郵件自己的私有密鑰等遲早你要相信有人,我懷疑。 (你可以申請多個簽名,當然,從不同的球隊 - 這樣的團隊必須以僞造任何勾結。)

+0

感謝您深思熟慮的迴應。 +1 – Syd 2010-07-04 07:38:36

+0

+1用於*應用多個簽名想法*。 – 2010-07-04 08:30:00

+0

鑑於時間的流逝,我沒有找到比Jon更好的答案。我很高興接受Jon的。創建所有列的哈希簽名(而不僅僅是一些特殊的字段)將防止DBA複製另一行或複製特定的列。要做到這一點,每一行都必須有附加的時間標記要求。 – Syd 2010-07-12 02:45:42

2

是完全直言不諱:你是在浪費你的時間。

DBA具有與您的數據庫相同的根訪問權限。如果不是,他們將會非常無效。系統管理員也會遇到同樣的問題,基本上你所能做的任何事情都不過是安慰劑而已。你可以做的唯一事情就是一個具有這種訪問級別的惡意人員不會給他們開始的訪問權限。

您可以做的最好的做法是讓它成爲通過創建審計跟蹤更困難。記錄用戶登錄,註銷,他們做什麼,系統響應什麼事件等等。這個唯一真正的價值是能夠(希望)重建發生的事情,如果你手動決定進入並稍後再看。

至於改變足球比賽的結果,問問你自己有多可能發生。當然,這並不會改變足球比賽的結果。它只是改變它被記錄的方式。任何看到或參與的人都會意識到實際結果,因此有人在系統上更改它有什麼價值?

在公司,錯誤和惡意,並通過對賬過程處理。股票經紀人將擁有一個團隊,負責運行有關係統內容的報告,並將其與實際完成的銀行交易進行比較。任何差異都會被標記爲紅色。所以你可以在系統上改變你的平衡,但它會被備份。

這個難題的另一部分是對DBA活動的限制實際上並不能解決問題。應用程序開發者可以釋放任意代碼即使經過審查,系統仍然可以在構建工程師或具有對生產環境的根級訪問權的人編譯修改後的版本並運行它。

+0

即使我們使用足球比賽作爲最簡單的例子,如果結果可以在小費競賽中提高自己的積分,尤其是在比賽結束之前完成改變時,您可能會驚訝於有人可能希望改變結果。實際點數正在分配中。 我不同意你的第一點,即DBA擁有root權限,他可以改變任何事情。但是,我想談談審計追蹤(+1)的必要性。對於一個簡單的系統,我不必實施審計跟蹤,但是當我設計一個更復雜的系統時,我會添加這個考慮因素。 – Syd 2010-07-04 07:48:02

+0

我想知道你爲什麼離開meta-stackoverflow?我只是在那裏閱讀你的一個問題,並提高它的投入和賞金 – 2010-07-04 19:09:31

+0

@Johannes ..已經2天但只有兩個答案。我相信以前有人處理過這個問題。讓他們分享他們的經驗來設計更好的設計是非常好的。我會再等3天。如果沒有更好的答案,我會做標記(現在喬恩領先)。 – Syd 2010-07-06 08:31:31