Обеспечение того, чтобы код JavaScript не был изменен

1

Допустим, у нас есть небольшой код JavaScript, что-то вроде этого:

function calculate(input) {
      input = input + 100;
      // the code will send the result here to the server
}

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

Есть ли способ на сервере, с помощью которого я могу убедиться, что функция, которая была запущена, не была изменена при запуске?

ИСПОЛЬЗОВАНИЕ: у меня есть несколько больших вычислений, которые мне нужно было бы выполнить, и я думал о создании кода для этих вычислений в JS (который мог бы их немного замедлить), но если бы я дал достаточно хороший стимул ( может быть, денежное вознаграждение или что-то похожее), чтобы другие люди использовали свои компьютеры в этих вычислениях, вычисляли частичную информацию и отправляли ее мне, мне потребовалось бы намного меньше вычислительной мощности, потому что работа была бы распределена между другими компьютерами.

Единственный способ решить эту проблему в данном сценарии использования на данный момент - это рассчитать частичные задания несколько раз в нескольких системах, и если результаты не совпадают, это будет означать, что кто-то вмешивается в код расчета, но если таковой имеется у кого есть идея получше, у меня все уши :)

  • 3
    Предполагая, что вы говорите о JS, выполняемом в браузере - нет, сделать это невозможно.
  • 1
    ну, если вам нужна такая проверка, вам придется обрабатывать ее на стороне сервера. В браузере нет кода JavaScript, который пользователь потенциально не мог бы изменить
Показать ещё 16 комментариев
Теги:

1 ответ

3

Я имею в виду, что у сервера нет возможности узнать, как были рассчитаны его данные, поэтому обычно это не так. Если вам необходимо проверить достоверность данных, вы должны выполнять вычисления на сервере, а не на клиенте.

Если вы хотите убедиться, что функция не изменена через консоль или что-то еще, вы можете присвоить ее константе и заморозить: const calculate = Object.freeze(function(input) {/* code here... */});

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

РЕДАКТИРОВАТЬ Ваше обновление звучит очень похоже на сценарий использования для блокчейна...

  • 0
    Это не поможет мне, к сожалению. Я обновлю вопрос вариантом использования, для чего мне это нужно.
  • 0
    Что делать, если я freeze 2 функции, как константы, одну, которая извлекает данные с сервера, который должен быть обработан, вместе с хешем, и другую, которая вычисляет и отправляет исходный хеш на сервер. Если функция functons замерзает как константа при запуске страницы, никто не может изменить эту функцию?
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню