Як я можу запобігти користувачеві редагувати мій код у своєму браузері?


11

Опис

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

Питання

Як я можу запобігти, щоб користувачі та зловмисники вглядалися та редагували мій код ?

  • Прикладом може бути:

    • Ctrl+ Shift+I

    • У Devtools , перейдіть до джерел , виберіть файл для редагування (тобто index.html) та введіть правки

    • Натискання Ctrl+ Sпризведе до редагування в реальному часі

Я хотів би запобігти тому, щоб описаний приклад стався ... Чи можливо це?


Ось що я подумав:

Я створю ще один файл JavaScript на стороні клієнта, preven_keys.js

Він слухатиме Ctrl+ Shift+ I.

Якщо він повернеться true(тобто натискали клавіші), він натисне logклавіші.

Однак це не зупинить користувача безпосередньо використовувати Devtools.


16
Ви не можете перешкодити нікому бачити або змінювати ваш JavaScript, який працює в браузері. Не можу
jfriend00

7
Тільки тому, що відповідь на питання "Ви не можете". Це не означає, що його слід зволікати.
RubberDuck

1
Дуже тісне питання: надішліть лише перевірку JavaScript у формі AJAX . Особливо ознайомтеся з прийнятою відповіддю з її тривіальним прикладом того, як надіслати POST-дзвінок, який на ваш сервер виглядає ідентичним тому, що надійшов від вашого клієнта, незважаючи навіть на те, що він навіть не надходить із веб-браузера.
8bittree

Відповіді:


35

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

Якщо у вас є код, який ви не хочете виставляти, не надсилайте його в браузер. Натомість, дозвольте браузерові надсилати запит на сервер, де ви виконуєте секретний код.

Як конкретний приклад, не перевіряйте паролі клієнта. Клієнт може бути модифікований так, щоб він завжди сказав серверу "пароль був правильним". Натомість автентифікація повинна відбуватися на вашому надійному сервері.


4
"Клієнт може бути модифікований так, щоб він завжди сказав серверу" пароль був правильним "." кашель лібсш кашель
Філіп Кендалл

Дуже дякую! Я надсилав обробників для входу, виходу та реєстрації. Я змінив його на маршрути на сервері.
Едвін Пратт

23

Ви не можете. Одне з основних принципів обчислень: ви не можете довіряти клієнту . Яку б розумну схему ви не придумали, я можу її обійти, якщо буду керувати клієнтом.


2
Я перемістив усі обробники валідації, завантаження, завантаження, userAccouts () на сервер.
Едвін Пратт

1
"Ви не можете довіряти клієнту" - це лише одна сторона монети. Інша сторона каже: "Ви не власник клієнта". Веб-переглядач, на якому працює ваш JavaScript, не ваш, ОС, що працює за допомогою браузера, не ваша, а обладнання, на якому працює браузер, - не ваше. Що б власник цих матеріалів не мав стосунку до даних, які ви надсилаєте їм, це не ваша справа . Ваші клієнти викликають повагу не намагатися узурпувати їх речі.
cmaster - відновити моніку

2

Чому ви не хочете змінити код?

Безпека? Довіра? Комерційна таємниця?

Потім не надсилайте код, змушуйте клієнта надіслати запит і повернути результат. Можливо, це не приватний або привілейований результат, достатньо всього лише для багатьох інтерфейсів.

Тому що трохи змінені версії власного коду шкодять вашій суті?

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

Ці методи піднімають планку на фактичному рівні навичок та інструментів, необхідних для створення незначного варіанту вашого веб-сайту. Просто майте на увазі, що ці методи можуть зробити ваш код повільнішим, ввести цікаві та безглузді помилки та повідомлення про помилки, але все-таки їх може подолати хтось із потрібними інструментами та / або навичками. Тож справді подумайте, чи варто того. Наприкінці дня кожен бажаючий міг просто насправді написати той самий код.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.