Создание "частного" объекта JSON? - PullRequest
2 голосов
/ 29 июня 2011

Хотя у меня есть подозрение, что в веб-приложении нет способа создать полностью неприкасаемый объект JSON, мне было интересно, есть ли у кого-нибудь из вас способы поддерживать глобальный объект JSON, который нельзя изменить с помощью инструментов разработчикаКонсоли.Я знаю, что называть это «частной» переменной - не самое точное описание, но ограничения, которые частная переменная в языках OO - это то, что я хотел бы применить к моему объекту JSON.

У меня естьПриложение, которое я разрабатываю и которое выиграет от того, что опытный пользователь не будет взаимодействовать с объектом, который я использую для хранения данных в файле Javascript.

Буду признателен за любые предложения о том, как подойти к этому.

Ответы [ 7 ]

6 голосов
/ 29 июня 2011

Если ваш Javascript запущен в браузере, он уязвим для манипуляций. Обойти это невозможно. Поместите любые действительно личные данные на стороне сервера и используйте AJAX для доступа к ним из вашего Javascript.

4 голосов
/ 29 июня 2011

На самом деле вы можете иметь «приватные» переменные в javascript и методе getter для доступа к ним:

вы можете сделать:

function privateData(){
     var _myVariable = 1;
     return {
          getData: function(){
                 return _myVariable;
           }
      }
}

var myObject = privateData();

myObject._myVariable; //it's undefined
myObject.getData();//returns 1

В этом примере переменная _myVariable недоступна в браузере и не может быть изменена пользователем каким-либо образом, поскольку ее локальная область находится внутри функции. Ваша функция возвращает объект, который может обращаться к этой переменной, потому что, возвращая объект, вы создаете замыкание.

В этом случае getData является свойством возвращаемого объекта и может обращаться к _myVariable, потому что это локальная область действия функции privateData.

Я рекомендую книги:

  • объектно-ориентированный Javascript и шаблоны Javascript от Стоянова
  • Javascript: хорошие детали Крокфорд

для некоторых продвинутых техник javascript

3 голосов
/ 29 июня 2011

Эта статья Дугласа Крокфорда http://javascript.crockford.com/private.html может помочь.

Помните, что как только код попадает на клиентский компьютер, он становится под их контролем.Так что не используйте это как любой тип безопасности.

1 голос
/ 29 июня 2011

Лучше всего шифровать данные или предоставлять им какой-то ключ целостности. Ключ целостности - это сгенерированный на стороне сервера хеш-код некоторых данных, а также соль, которую вы будете проверять на сервере в обоих направлениях.

Шифрование данных поможет избежать изменений на стороне клиента; ключ целостности поможет избежать изменений на стороне клиента, которые передаются на сервер.

0 голосов
/ 29 июня 2011

Я не думаю, что можно помешать людям изменять объект, который вы создали в javascript.

Вы можете сохранить хэш данных и убедиться, что хэш все еще корректен, когда вы используетеданные от объекта, но это только усложнит для опытного пользователя изменить объект, не невозможно.(Безопасность путаницей, на самом деле совсем не безопасность.)

0 голосов
/ 29 июня 2011

Если он правильно закрыт, то его нельзя будет так же легко изменить (но все же может быть, если хакер действительно хорош в своей работе)

0 голосов
/ 29 июня 2011

То, что вы просите, не может быть выполнено, если браузер / движок не поддерживают const

...