我知道這是不可能的,但我能得到多麼接近?安全性:客戶端數據重新編碼,同時保持完整性
我創造了成就,當用戶'獲得成就'時,他的瀏覽器會通過JavaScript彈出框告訴他,並向服務器發送消息以更新他的個人資料。
我寧願沒有我的用戶能夠打網頁服務並獲得所有成就。使用私鑰簽署請求會更好,但必須將其存儲在.js文件中,然後輕鬆地進行嗅探。我可以混淆它,或者爲每個用戶做一個獨特的。併爲請求添加時間戳。
有什麼更好的建議嗎?
我知道這是不可能的,但我能得到多麼接近?安全性:客戶端數據重新編碼,同時保持完整性
我創造了成就,當用戶'獲得成就'時,他的瀏覽器會通過JavaScript彈出框告訴他,並向服務器發送消息以更新他的個人資料。
我寧願沒有我的用戶能夠打網頁服務並獲得所有成就。使用私鑰簽署請求會更好,但必須將其存儲在.js文件中,然後輕鬆地進行嗅探。我可以混淆它,或者爲每個用戶做一個獨特的。併爲請求添加時間戳。
有什麼更好的建議嗎?
正如原來的問題所承認的,我認爲這在 情況下基本上是不可能的,在這種情況下很難讓服務器重新運行客戶端的操作。 (例如,一個平臺時間接近的遊戲)
Obfustication可能是你最好的選擇。首先做一些加密,幷包括 計時信息 - 使用每個用戶的公鑰/私鑰。這可以消除基本的流量嗅探/重放 。注重客戶端代碼,所以他們至少不得不爲解碼它。我認爲這可能會消除試圖欺騙的99%的人。直到最後1%寫入一個Firefox附加組件解鎖 成就,並至少給其他99%。
除此之外,好吧,沒有任何成就獎勵他們與任何東西重要。
那麼問題是,你如何確定何時有人有成就?如果是客戶端,就像
quest.hasGoldenRod = true;
那麼是的,你會遇到麻煩,阻止他們自己設置。
做到這一點的方法是讓服務器鏡像客戶端所採取的操作,以確保他們實際上合法獲取了該項目。
然後,當客戶說'我明白了'時,服務器會'讓我檢查',並且如果它也可以驗證客戶端確實得到它,那麼一切都很好,併爲他們提供成就。
簽名不幫你。你有兩種方法:
你可以去完整的驗證。唯一能夠完全保證這一點的方法就是讓服務器參與進來,就像絲綢般的說。如果成就是用戶在某個遊戲中遇到某個「區域」 - 遊戲會發送一個「嘿,我到了洛杉磯!」你就會「我知道你做到了,當你進入每個新區域時,你一直告訴我,我一直在跟蹤。」
您可以使用混淆和定時等技術進行「合理的」驗證。讓服務器將計算函數userEarnedGoldBarAcheivement發送到作爲測試函數的客戶端 - 並且該函數每天都會稍微改變(所以如果您向{goldBar:true,key:12345}發送請求,我會「呃,呃,那個關鍵是昨天的!「)
有趣的。可以說成就是‘鍵入的文本保羅到一個文本框’,然後服務器無法效仿。它可以知道,它給用戶一個搜索框,但可以」 t知道該操作 – 2009-08-13 05:15:46
另一方面,您*可以*將文本框的內容發送到服務器,並至少檢查它是否與該單詞匹配。 – Amber 2009-08-13 05:20:06
重複「paul」情形,重複此操作。您在客戶端上執行此操作,並將相同的指令發送到服務器,然後確保它們處於相同狀態。 – 2009-08-13 05:25:26