Я работаю над дизайном веб-сайта и хочу убедиться, что никто не сможет украсть код. Я хотел бы предотвратить удаление кода с веб-сайта и отобразить сообщение об ошибке, если пользователь попытается это сделать.
Вы живете во вселенной Star Trek, где загрузка кода всегда стирает его с сервера?
Добро пожаловать в StackOverflow! Выполните поиск по запросу «Обфускация HTML» - это может помочь вам найти ответ :)
@RobertColumbia - этот саркастический комментарий помогает как?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Обфускация HTML - это инструмент преобразования, который сохраняет код и предотвращает его обратное проектирование. Вы можете узнать об этом подробнее здесь.
Вот пример запутанного кода.
Это чрезвычайно простой HTML-код:
<a href = "mailto:[email protected]">Mail me</a>
Это можно превратить в следующее:
<script type = "text/javascript">
<!--
var s = "=b!isfg>#nbjmup;tpnfpofAepnbjo/dpn#?Nbjm!nf=0b?";
m = ""; for (i=0; i<s.length; i++).m+=String.fromCharCode(s.charCodeAt(i)-1); document.write(m);
//-->
</script>
<noscript>

<a href="mailto:someone@domain.com">Mail me</a>
</noscript>
Это называется обфускацией Combined.
<script type = "text/javascript">
<!--
var s = "=b!isfg>#nbjmup;tpnfpofAepnbjo/dpn#?Nbjm!nf=0b?";
m = ""; for (i=0; i<s.length; i++) m+=String.fromCharCode(s.charCodeAt(i)-1); document.write(m);
//-->
</script>
<noscript>
You must enable JavaScript to see this text.
</noscript>
Это называется обфускацией JavaScript.

<a href="mailto:someone@domain.com">Mail me</a>

Это называется обфускацией Character Entities.
Все эти методы совершенно бесплатны на этом веб-сайте и позволяют сохранить конфиденциальность всего кода.
Обновлено:
После дальнейшего исследования я нашел еще один веб-сайт, JSF ** K, который позволяет кодировать элементы, используя серию скобок, круглых скобок, восклицательных знаков и знаков плюса. Ниже показано, как он кодирует простой элемент:
alert(1)
становится:
[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+(![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]+[+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]])()
Это практически невозможно взломать, так как вам нужно будет «заполнить» веб-сайт данными, чтобы получить коды символов, а затем использовать регулярные выражения для создания декодера.
@ JBDouble05 дал отличный ответ на ваш вопрос, и я полностью рекомендую его. Я хотел поделиться примером, который я собрал для развлечения, в котором используются некоторые из описанных им приемов. Он использует обфускацию HTML с помощью пробельных символов нулевой ширины. Я также закинул JSF * CK в В самом деле, чтобы исходный код был интересным: D
Во-первых, URL-адрес, обслуживающий обфусцированный код: http://jackpattishall.com/obfuscated.html
(Использует padStart, поэтому вам нужно будет просматривать в браузере, который это поддерживает!)
Если вы просмотрите исходный код (используя Chrome), вы заметите, что около 98% разметки видимый составляет JSF * CK (в основном все эти () и []):
Если вы прокрутите достаточно долго, вы увидите variable, которому, кажется, ничего не назначено:
Переменной m фактически назначаются следующие пробельные символы zero-width:
const m = "";
Попробуйте скопировать / вставить предыдущую строку в консоли Chrome. У вас должно получиться что-то вроде:
(Любой текстовый редактор, который показывает специальные символы, будет делать то же самое!)
Код massive JSF * CK в основном следующий (но уменьшен):
const zero_regex = new RegExp(zero, 'g');
const one_regex = new RegExp(one, 'g');
const binToText = text => {
let str = text.replace(zero_regex, '0').replace(one_regex, '1');
if (str.match(/[10]{8}/g)) {
return str.match(/([10]{8}|\s+)/g).map(val => {
return String.fromCharCode(parseInt(val, 2));
}).join('');
}
}
script, отвечающий за обфускацию, выглядит так:
// Our zero-width whitespace chars
const zero = '';
const one = '';
const textToBin = text => {
let len = text.length;
let output = [];
let i = 0;
for (; i < len; i++) {
output.push(text[i].charCodeAt().toString(2).padStart(8, '0'));
}
return output.join('').replace(/0/g, zero).replace(/1/g, one);
}
Вот JSFiddle, который показывает немного больше о magic:
Надеюсь, это было полезно. Удачи с JavaScript! И, пожалуйста, никогда не делайте этого в продакшене :)
Ресурсы:
Нет, вы не можете, из-за Developer Tools / Inspector. Однако вы можете создать PHP-скрипт, который будет размещать на странице только некоторые части кода, а некоторые опускать.