Как я могу запретить пользователю редактировать мой код в своем браузере?

11

Описание

Я разрабатываю приложение Node.JS (больше похоже на полноценный сайт). Приложение отправит пять файлов JavaScript и будет иметь <script>теги, связывающие их вместе.

Вопрос

Как я могу запретить пользователям и злоумышленникам просматривать и редактировать мой код ?

  • Примером может быть:

    • Ctrl+ Shift+I

    • В Devtools Готы Источники выберите файл для редактирования (т.е. index.html) и редактирования записи

    • Нажатие Ctrl+ Sприведет к редактированию в реальном времени

Я хотел бы предотвратить приведенный выше пример ... Возможно ли это?


Вот что я подумал:

Я создам другой файл JavaScript на стороне клиента, protect_keys.js

Он будет слушать Ctrl+ Shift+ I.

Если он вернется true(т.е. клавиши были нажаты), то это будут logклавиши.

Однако это не остановит пользователя от непосредственного использования Devtools.

Эдвин Пратт
источник
16
Вы не можете запретить кому-либо видеть или изменять ваш JavaScript, который работает в браузере. Не могу.
jfriend00
7
Тот факт, что ответ на вопрос «Вы не можете», не означает, что его следует опустить.
RubberDuck
1
Очень тесно связанный вопрос: проверка только JavaScript в форме AJAX . В частности, ознакомьтесь с принятым ответом с его тривиальным примером того, как отправить вызов POST, который на ваш сервер выглядит идентично тому, который пришел от вашего клиента, даже если он не поступает из веб-браузера.
8bittree

Ответы:

35

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

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

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

Амон
источник
4
«Клиент может быть изменен, чтобы всегда сообщать серверу« пароль был правильным ».» кашель libssh кашель
Филипп Кендалл
Большое спасибо! Я отправлял обработчики для входа в систему, выхода из системы и регистрации. Я изменил его на маршруты на сервере.
Эдвин Пратт
23

Ты не можешь Одно из фундаментальных правил вычислений: нельзя доверять клиенту . Какую бы хитрую схему вы ни думали, я могу обойти ее, если буду контролировать клиента.

Филип Кендалл
источник
2
Я переместил все проверки, загрузки, выгрузки, обработчики userAccouts () на серверное включение.
Эдвин Пратт
1
«Вы не можете доверять клиенту» - это только одна сторона медали. Другая сторона говорит: «Вы не являетесь владельцем клиента». Браузер, который запускает ваш javascript, не ваш, ОС, которая запускает браузер, не ваша, а оборудование, на котором работает браузер, не ваше. Что бы ни делал владелец этого материала с данными, которые вы ему отправляете, это не ваше дело . Ваши клиенты не должны пытаться узурпировать их вещи.
cmaster - восстановить монику
2

Почему вы не хотите, чтобы код был изменен?

Безопасность? Доверять? Коммерческая тайна?

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

Потому что слегка измененные версии вашего собственного кода наносят ущерб вашей прибыли?

Используйте затенение кода, манипулятор имени и тривиальные сегменты кода.

Эти методы поднимают планку на реальном уровне навыков, и инструменты, необходимые для создания небольшого варианта вашего сайта. Просто имейте в виду, что эти методы могут замедлить ваш код, могут привести к появлению интересных и бессмысленных ошибок и сообщений об ошибках, и все же их может преодолеть кто-то, обладающий необходимыми инструментами и / или навыками. Так что действительно подумайте, стоит ли это того. В конце концов, любой мог просто написать один и тот же код.

Kain0_0
источник