2016-07-27 42 views
-1

我對網絡開發相當陌生,最近終於設法使用JavaScript編寫簡單的在線遊戲。我用來管理高分系統的原始方法是在提交到php腳本(即javascript> HTML(表單)> PHP> DB)之前將一系列javascript變量傳遞到HTML表單中:Javascript遊戲黑客預防

Javascript:

var score = 345345; //score after playing game 
document.theform.score.value = score; 
document.theform.submit(); 

HTML:

<form name="theform" action="scorehandler.php" method="post"> 
    <input name="score" type="hidden" value=""> 
</form> 

使用此方法但是可以讓用戶輕鬆地通過重新創建表單並提交自己的本事。


我得到的是通常的做法,以防止用戶從黑客可能是做盡可能多的編碼在服務器端儘可能(即使用PHP來替換儘可能多的代碼儘可能的),但它似乎它可能會對遊戲造成一些潛在的問題(例如,php的同步性)

有沒有辦法以某種方式隱藏客戶端的html表單(以及相關的javascript vars)而不必重新編碼php中的所有內容?還是有一些其他的標準解決方法呢?

任何幫助,非常感謝!

+3

的JavaScript/HTML需要可以看出通過瀏覽器進行渲染和訪問,因此沒有確保這些的方法。你可以通過模糊處理來尋求安全性,但這通常不太適用。 –

+0

沒有辦法保護html和js,因爲它在客戶端呈現,但爲了防止惡意表單提交,您可以使用CSRF令牌,並且還有很多其他方法可以防止惡意輸入。 –

+4

相關閱讀:http://stackoverflow.com/questions/3531968/why-is-client-side-validation-a-security-risk-as-opposed-to-server-side-validati http://stackoverflow.com/questions/13942498/should-you-validate-server-side-if-youre-validating-client-side - 尤其是第二個。 「絕對不要相信任何來自瀏覽器的內容。」用戶可以完全控制瀏覽器。他們可以欺騙任何東西。 – Sumurai8

回答

-2

您可以生成某種散列和隨機密鑰算法來發送驗證頁面。

您可以使用散列+鹽值對分數進行加密,生成唯一的隨機數值,然後將散列,分數和隨機數發送給您的驗證者。

在驗證階段,使用salt +用戶提交的分數重新生成散列。如果兩個哈希值都相同,則接受分數。然後檢查隨機數值(一些隨機的數據位,如時間戳),以查看散列是否已經發送(阻止用戶僅僅複製散列數據並重復發送它),如果該隨機數是唯一的,則接受答案。

希望有一點道理。

JavaScript沒有任何本地哈希算法,所以你可以使用像JS庫做你的哈希:

https://github.com/blueimp/JavaScript-MD5