@Fr1eZe

Как правильно «Спрятать» мой js код на сервере?

Мне дали задачу разработать простую веб-викторину на один раз. Я написал код на html + js. Естественно ответы можно посмотреть через консоль разраба. При помощи каких ресурсов я могу спрятать ответы от глаз допытливых?
  • Вопрос задан
  • 192 просмотра
Решения вопроса 1
Aleksandr-JS-Developer
@Aleksandr-JS-Developer
Бери и делай
Это смотря что за викторина. Одно дело, когда она проверяет знание истории с весёлой фразой в конце. Совсем другое, когда вы разыгрываете мерседес. Взламывается всё, что угодно - главное какой профит будет хакеру.
В принципе, в первом варианте, ответы можно разбить по цифрам из юникода и хранить в цифрах.
подробнее
Каждой цифре можно прибавлять "шаг" (например, число 12) и парсить обратно в символы (это называется "Шифр Цезаря", только не с алфавитом, а с таблицей юникод. 99.9% любителей полазить в f12 уйдут с ничем или получат удовлетворение от "взлома" супернадёжного шифра и получат удовольствие от сайта не меньше, чем от весёлой фразы в конце викторины.
Простая "hello world!" превращается в "104-101-108-108-111-32-119-111-114-108-100-33"

Вот тут накидал пример: jsfiddle

Во втором случае, вам надо понять, что НЕВОЗМОЖНО что-то спрятать в JS. Потому, что, в конце-концов, весь код целиком загружается в браузер. Любой, самый секретный, самый чудовищно-сложный, шифр как-то преобразуется в обычный текст. Для этого есть функция в вашем приложении. Злоумышленник просто залезет в код и использует вашу функцию для дешифровки.
подробнее
Поэтому, всё-же, нужен backend. С backend`а приходит вопрос и варианты ответов. Когда пользователь делает ввод, то на сервер идёт запрос, проверяется пользовательский ввод, и приходит ответ уже от сервера, верен ли ввод пользователя или нет. От сервера может даже сразу прийти страница, куда направлять пользователя, в зависимости от правильности его ввода. Для таких задач и был придуман backend вообще-то...


Ссылки:
String.fromCharCode()
String.prototype.charCodeAt()
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
@vabka
Токсичный
Добавить бэкенд и проверять ответы на сервере.
Ответ написан
black1277
@black1277
Вольный стрелок
Вам нужно пропустить код на js через обфускатор. Он сделает код крайне трудным для понимания и восстановления. Мало кто захочет копаться в абрекадабре, хотя в принципе восстановить можно (вопрос - стоит ли оно того?)
Ответ написан
@Lukmann
Как я знаю js спрятать нельзя,можете на php запросы отправлять и сравнивать ответ
Ответ написан
@rPman
Не слушайте других, ваша задача решаема без бакэнда (но сложнее само собой).

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

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

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы