Можно ли использовать прокси-объект JavaScript для того, чтобы «заманить» пользователя в ловушку при поиске его свойств / значений путем очистки объекта PRIOR до получения информации / данных? - PullRequest
0 голосов
/ 02 марта 2019

сказал просто:

Я пытаюсь создать защитный барьер вокруг объекта JavaScript, используя прокси-сервер для установки «ловушек» для любой формы поиска или манипуляции.Эти ловушки потребуют, чтобы параметр SessionKey был предоставлен с любыми такими манипуляциями с Объектом, или же по умолчанию используется для очистки всей информации и свойств Объекта.

(Конечно, этот SessionKey предоставляется PHP для входа пользователя, который отправляется обратно при успешном входе.)

Если у меня есть это право, а я нетбезусловно, самый опытный кодер здесь, Object будет вызывать функции только с соответствующим параметром SessionKey, так как этот объект знает SessionKey.

Я не могу на 100% помешать любым или всем таким попыткам проникнуть в мой код, но, возможно, я могу настроить сигнализацию «отключения», которая делает все такие попытки неудачными.Нет SessionKey?НЕТ DOM (.empty ()), нет WebServices / API.Ничего.

Спасибо за вашу помощь, я очень благодарен.

1 Ответ

0 голосов
/ 11 марта 2019

То, что вы хотите, на самом деле не может быть сделано.Вы МОЖЕТЕ создать прокси, чтобы перехватывать вызовы извлечения / манипуляции, но вы не можете сделать основной объект закрытым.

Например, если у вас есть объект

const privateObj = { name: 'John Smith', ssn: '123-45-6789' };

и прокси

const proxy = new Proxy(privateObj, {} /* handler for getter/setter traps */);

вы можете консоль войти в прокси, чтобы получить что-то вроде этого:

[[Handler]]: Object
[[Target]]: Object
[[IsRevoked]]: false

, и вы можете развернуть [[Target]], чтобы увидеть свойства базового объекта.Поэтому, если вы хотите, чтобы это свойство было полностью приватным, вы не захотите использовать прокси.Кроме того, если пользователь может проверить прокси, он может легко получить доступ к базовому объекту и изменить его вне ловушек прокси.

Если вы хотите иметь возможность действительно защитить этот объект, было бы лучшечтобы защитить его в закрытии функции и иметь обертки getter / setter вокруг этого объекта.

Вы можете попробовать в качестве первого шага:

const protectObject = (SessionKey, ...objectProps) => {
    const protectedObject = { // Do something here to create the object
        ...objectProps        // and its properties you want to protect
    };

    return {
        accessProp(_SessionKey, prop) {
            if (_SessionKey !== SessionKey) throw Error("Your session key doesn't match");
            return protectedObject[prop];
        },
        setProp(_SessionKey, prop, val) {
            if (_SessionKey !== SessionKey) throw Error("Your session key doesn't match");
            protectedObject[prop] = val;
        }
    };
};

Так что теперь у вас есть закрытый объект, который защищен:

const privateObj = protectObject('12345', 'John Smith', '7/20/1992', '123-45-6789');

privateObj.accessProp('12345', 1); // '7/20/1992'
privateObj.accessProp('1234', 2);  // Uncaught Error: Your session key doesn't match
privateObj.setProp('12345', 1, '7/21/1993');
privateObj.accessProp('12345', 1); // '7/21/1993'
...