HTML5 でゲームを構築し、Web フォームがデータをサーバーに投稿します。
ゲーム内のスコアは Javascript を使用して計算され、フォームはデータをサーバーに送信します。
このアーキテクチャは、計算されたスコアの代わりに不正な値を投稿するようにクライアントを変更できる攻撃に対して脆弱ではありませんか?
どうすればこれを防ぐことができますか?
簡単に言うと、サーバー側ですべての検証を行う必要があります。クライアント側のスクリプトを使用して見栄えを良くすることに問題はありませんが、クライアントからは何も信頼できません。
例として Stackoverflow を取り上げます。投票すると、クライアント側で即座に計算されますが (物事を適切かつ迅速に行うため)、送信されるとサーバーによって適切に検証されます。
たとえば、自分の回答に賛成票を投じようとすると、サーバーは次の JSON で拒否します。
{"Success":false,"Warning":false,"NewScore":0,"Message":"You can't vote for your own post.","Refresh":false}
JavaScriptが喜んでそれを提出したとしても。
したがって、ゲームのスコアをサーバー側で計算する必要もあります。
ユーザー入力を信頼しないでください。特に、サーバーにデータを送信するときに SQL インジェクションを実行する可能性のあるフォームを介して。( PHP で SQL インジェクションを防ぐにはどうすればよいですか?も参照してください)
サーバー側で可能な限り多くのデータを検証してみてください。
JavaScript インジェクション ( http://www.testingsecurity.com/how-to-test/injection-vulnerabilities/Javascript-Injection ) も使用していることを確認すると、スクリプトに変更が挿入される可能性があるため (スコア値など)