Как сохранить несанкционированные манипуляции в JavaScript - PullRequest
1 голос
/ 11 февраля 2012

Я написал сервер-клиентское приложение на javascript / HTML5, которое должно позволить клиентам общаться / играть в игры в режиме реального времени, используя Node.js на стороне сервера.

Я знаю использование частных переменных ии т.п .Но как защитить весь игровой движок от несанкционированного доступа через консоль API?

Как в том, как написать это так, чтобы все переменные попадали в частную область и после их запуска они работали в значительной степени независимо без регистрации одной переменной в глобальной области видимости, чтобы никто не мог испортить Игру!

Из того, что я исследовал, я могу сделать что-то вроде

 function Game(){
   // All declarations here
   // Start a logic in here
 }

и затем, назвав это

 new Game();

, сделаем это?но есть ли лучший способ сделать то же самое?

Ответы [ 4 ]

2 голосов
/ 11 февраля 2012

Вы не можете доверять всему, что работает на клиентском оборудовании, и тому подобное.Даже с приведенным вами примером любой может легко изменить и перезагрузить ваш скрипт, чтобы обмануть.Тогда вам лучше всего не прилагать к этому никаких дополнительных усилий, а просто написать свое приложение и запустить его через препроцессор, такой как UglifyJS .Шаблон анонимной функции, указанный Робом в его ответе, также распространен.

Кроме того, о хэше MD5 - нет, даже если он находится в «закрытой области видимости», вы все равно можете просматривать и изменять его в отладчике JavaScript.Дело в том, что кто-то всегда будет обманывать из-за всей природы среды выполнения JavaScript - просто вам нужно будет сделать как можно более сложным обмануть, запутывая ваш код (очевидно, используяпрепроцессор) и другие подобные методики.

2 голосов
/ 11 февраля 2012

Вы можете запустить приложение JavaScript без регистрации какой-либо одной переменной с помощью анонимной функции:

(function() {
    //local variables here.
})();

Однако , существует нет надежного способа предотвращения мошенничества: можно легко проанализировать ваш код и создать поддельные AJAX-запросы. С последними браузерами захватить ваш код невероятно легко.

С помощью геттеров и сеттеров каждый может эффективно перехватывать ваши функции. Используя устаревшее свойство arguments.callee.caller, злоумышленник может прочитать источник вызова функции, эффективно получая доступ к закрытию, как определено в верхней части этого ответа.

Пример:

var _alert = alert;
window.alert = null;
Object.defineProperty(window, 'alert', {
    'value': function(m) {
        console.log('Intercepted. Function source: ' + arguments.callee.caller);
        _alert.call(this, m);
    }
});
(function(){
    var localVar = 'secret';
    alert('Hi!');
})();
0 голосов
/ 11 февраля 2012

Вся безопасность может быть обойдена с достаточным количеством времени. Цель каждой меры безопасности состоит в том, чтобы увеличить время, необходимое для взлома. Как говорит Роб У. это и создает поддельные запросы Ajax, чем избегая глобальных переменных.

Однако я согласен, что приложение на основе JavaScript никогда не может быть очень безопасным. Лучшее, на что вы можете надеяться, это «раздражать, чтобы взломать»

Как я могу скрыть (защитить) JavaScript?

0 голосов
/ 11 февраля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...