2012-12-02 50 views
0

我正在構建一個需要一些適度重處理的Ruby on Rails應用程序。爲了擴展應用程序,我試圖卸載瀏覽器上的處理。這是一個用戶必須回答問題的遊戲。當答案需要驗證時,適度的重處理就來了。爲了驗證答案是否正確,客戶端需要存儲答案,或者至少能夠從服務器請求答案,但在某些客戶端,JavaScript需要將用戶的答案與正確的答案進行比較。爲了防止作弊,我需要在客戶端獲得正確的答案?保護客戶端數據安全的技巧

事情我已經試過

  1. 我試圖散列答案數據,並在HTML中嵌入它,但不幸的是我需要訪問散列的答案數據,因爲它的價值是在加工過程中使用。
  2. 我嘗試使用AJAX從服務器請求答案數據,但我可以使用一些工具來檢查JSON響應並查看返回的答案數據。

我心想沒有試過

  1. 如果我使用SSL加密,並要求每當它需要回答的數據?這不會阻止用戶查看自加密後返回的JSON數據嗎?對不起,如果我完全沒有這個基礎,我是新開發的網絡,仍然在學習。

是否有任何其他技術用於在客戶端使用我正在使用的技術保護數據?或者至少使用戶難以查看答案數據的任何技術?

非常感謝您的智慧!

回答

0

這是不可能的。如果您需要未處理的答案數據來處理輸入,則該數據必須位於客戶機器上,這意味着它已被暴露。

讓我解釋一下,在一些僞代碼:

func isValid(myAnswer, superSecureData) 
    if decode(superSecureData) == myAnswer 
     return true 

    return false 

攻擊者只需要做到:

print decode(superSecureData) 

或者,更好的甚至是:

return true 

當然,這會更安全:

func isValid(myAnswer, superSecureData) 
    if encode(myAnswer) == superSecureData 
     return true 

    return false 

但是,正如你所說,你不能哈希答案,正如我已經提到的,攻擊者仍然可以強制一個函數簡單return true(這就是爲什麼你應該對所有據稱有效的服務器端檢查答案)。

+0

+1 - 黃金法則是你不能相信客戶說的任何東西。 –

+0

那麼難嗎?我正在讀一讀使用編譯的Java小程序來解決相同問題的人。有一個很難在客戶端運行的軟件的例子。你的想法? – BeachRunnerFred

+0

SSL加密怎麼樣? – BeachRunnerFred