我正在開發一個java項目,我希望能夠從客戶端收集統計信息,我擔心會發生的一個可能的問題是操縱用於收集的變量,這會導致非法統計。它是否有可能阻止變量的操縱,或者它總是可能的?停止對用於數據收集的變量的操作?
例如:我想記錄客戶端每小時所做的操作。作爲所執行的動作量的計數器的變量被操縱,並且將大得多的量添加到計數器。然後將這些數據上傳到服務器(當然,使用多層體系結構來防止更多可能的問題)並被視爲「合法」。
有什麼辦法可以防止這種情況發生?
我正在開發一個java項目,我希望能夠從客戶端收集統計信息,我擔心會發生的一個可能的問題是操縱用於收集的變量,這會導致非法統計。它是否有可能阻止變量的操縱,或者它總是可能的?停止對用於數據收集的變量的操作?
例如:我想記錄客戶端每小時所做的操作。作爲所執行的動作量的計數器的變量被操縱,並且將大得多的量添加到計數器。然後將這些數據上傳到服務器(當然,使用多層體系結構來防止更多可能的問題)並被視爲「合法」。
有什麼辦法可以防止這種情況發生?
根據數據上傳的方式,有多種方法來保護信息。
如果你上傳的某種文本或數據文件,使用基本的加密,即使有密碼的ZIP,應足以從改變信息停止普通用戶。
您的應用程序也可以簡單地使用RMI或Web服務上傳的信息,從來沒有給用戶操作數據的變化。
所有這一切當然是假定應用程序本身收集的信息 - 如果用戶必須輸入數據的機會,有防止他們給你假的信息沒有真正的方法。
不知道這是否是一個桌面或Web應用程序,我會建議你以某種方式加密你的文件上傳。它不一定非常複雜,只要有人不能在文本編輯器中進行編輯即可。
只要記住,如果東西客戶機上運行,它可以被操縱。 Java不是一種安全的語言,就此而言,沒有任何事情是可以做到的,雖然你可以做很多事情來保護應用程序,但總有人會有一點聰明的東西可以破解它。
如果我這樣做,我會做一個安全的機器上的統計數據的積累。主數據收集代碼是否向累加器發送「事件」消息,並讓累加器保存原始事件及其到達時間戳記的日誌。這不會阻止人們操縱統計數據,但它可以更容易地在事後檢測可疑模式。
基於這種想法,您可以安排事件生成器應用程序(在用戶的計算機上)使用某種涉及共享密鑰或公鑰/私鑰加密的握手。我不認爲你可以完全確保這一點,但通過默默無聞的安全措施足以應對那些沒有技能來逆向工程代碼的人試圖欺騙的企圖。但是就像Ewald說的那樣,任何算法過程都可以通過對其硬件有足夠控制的人進行反向設計。如果過程需要使用「祕密」來操作,那麼可以揭示該祕密。
你給了我幾個想法Ewald,非常感謝!我會投票給你,但我沒有所需的聲譽,我的道歉。順便說一句,這是一個桌面應用程序。再一次,謝謝! – Ruinous
不用擔心 - 只要它對你有幫助。桌面應用程序非常棒,您可以爲它們提供比Web應用程序更多的保護。這不會是一種愚蠢的證據,但它會阻止偶然用戶操縱數據。如果您遇到困難,請添加註釋,Stack Overflow上有很多非常聰明的人可以幫助您,我每天都會學到新的東西。 – Ewald