2016-07-27 6 views
-1

Я довольно новичок в разработке веб-сайтов и недавно, наконец, сумел прописать простую онлайн-игру, используя javascript. Первоначальный метод, который я использовал для управления системой высоких баллов, состоял в том, чтобы передать серию javascript vars в HTML-форму, прежде чем отправлять на скрипт php (например, javascript> HTML (форма)> PHP> DB):Защита от взлома игры 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-вары) с клиентской стороны без необходимости перекодировать все в 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

Вы можете создать какой-то алгоритм хеширования и nonce key, чтобы отправить страницу проверки.

Вы должны зашифровать оценку с помощью значения hash + salt, сгенерировать уникальное значение nonce, а затем отправить хэш, счет и nonce в ваш верификатор.

На этапе проверки вы регенерируете хэш, используя соль + пользовательский бал. Если оба хэша одинаковы, примите оценку. Затем проверьте значение nonce (некоторый случайный бит данных, например временную метку), чтобы увидеть, был ли ранее отправлен хеш (чтобы пользователи не просто копировали хэшированные данные и неоднократно отправляли их), и если unce уникален, тогда принимайте ответ.

Надеюсь, что это имеет смысл.

JavaScript не имеет собственные алгоритмы хеширования, так что вы можете использовать что-то вроде библиотеки JS, чтобы сделать ваш хеширования:

https://github.com/blueimp/JavaScript-MD5 
Смежные вопросы