2012-06-18 88 views
0

我已經在HTML5中構建了一個遊戲,並且Web表單向服務器發佈了數據。驗證客戶端的真實性

使用Javascript計算遊戲中的分數,表單將數據發佈到服務器。

這種體系結構是否容易受到攻擊,客戶端可以修改,從而發佈流氓值而不是計算得分?

我該如何防止這種情況發生?

+0

感謝您的答案,但我仍然有一個關於這個疑問。假設修改後的客戶端向服務器發佈數據如下(它是一種速度打字測試遊戲)。如果他執行了POST併發布了完整的分數,並且將輸入的文本張貼爲正確的段落。我怎樣才能防止這一點? – user1016313

回答

3

爲了保持簡短 - 您需要完成所有的驗證服務器端。有使用客戶端腳本來讓事情看起來不錯,但你不能從客戶端相信任何沒有問題。

以Stackoverflow爲例。當你投票時,它立即被計算在客戶端(保持事情的快捷),但一旦提交,它就會被服務器正確驗證。

例如,如果我試圖給予好評我自己的答案服務器具有以下JSON拒絕它:

{"Success":false,"Warning":false,"NewScore":0,"Message":"You can't vote for your own post.","Refresh":false} 

即使JavaScript的愉快提交它。

因此您還需要計算您的遊戲得分服務器端

0

不要信任用戶輸入,尤其是在您將數據發送到服務器時可能會執行SQL注入的表單。 (也How can I prevent SQL injection in PHP?見)

嘗試驗證儘可能多的數據可能服務器端。

看到你也可以使用JavaScript的注意JavaScript注入(http://www.testingsecurity.com/how-to-test/injection-vulnerabilities/Javascript-Injection),因爲它們可以注入變爲烏爾腳本(如分值)

+1

您需要驗證所有服務器端(不是儘可能)。 –

+0

儘可能多的imo,但並非每件事都可以驗證。在大多數檢查某些標準 – Gooey

+0

檢查的標準是*驗證* **不** *驗證*。請參閱[這裏差(http://www.matthewedmondson.info/2010/08/difference-between-validation-and.html) –