Предотвращение кражи HTML

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

Нет, вы не можете, из-за Developer Tools / Inspector. Однако вы можете создать PHP-скрипт, который будет размещать на странице только некоторые части кода, а некоторые опускать.

Jack Bashford 29.08.2018 00:40

Вы живете во вселенной Star Trek, где загрузка кода всегда стирает его с сервера?

Robert Columbia 29.08.2018 00:41

Добро пожаловать в StackOverflow! Выполните поиск по запросу «Обфускация HTML» - это может помочь вам найти ответ :)

Jack 29.08.2018 00:42

@RobertColumbia - этот саркастический комментарий помогает как?

David Makogon 31.08.2018 01:53
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
4
206
2

Ответы 2

Обфускация 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>
&#13&#10&#60&#97&#32&#104&#114&#101&#102&#61&#34&#109&#97&#105&#108&#116&#111&#58&#115&#111&#109&#101&#111&#110&#101&#64&#100&#111&#109&#97&#105&#110&#46&#99&#111&#109&#34&#62&#77&#97&#105&#108&#32&#109&#101&#60&#47&#97&#62
</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.

&#13&#10&#60&#97&#32&#104&#114&#101&#102&#61&#34&#109&#97&#105&#108&#116&#111&#58&#115&#111&#109&#101&#111&#110&#101&#64&#100&#111&#109&#97&#105&#110&#46&#99&#111&#109&#34&#62&#77&#97&#105&#108&#32&#109&#101&#60&#47&#97&#62&#13&#10

Это называется обфускацией Character Entities.

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

Обновлено:

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

alert(1)

становится:

[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+(![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]+[+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]])()

Это практически невозможно взломать, так как вам нужно будет «заполнить» веб-сайт данными, чтобы получить коды символов, а затем использовать регулярные выражения для создания декодера.

@ JBDouble05 дал отличный ответ на ваш вопрос, и я полностью рекомендую его. Я хотел поделиться примером, который я собрал для развлечения, в котором используются некоторые из описанных им приемов. Он использует обфускацию HTML с помощью пробельных символов нулевой ширины. Я также закинул JSF * CK в В самом деле, чтобы исходный код был интересным: D

Во-первых, URL-адрес, обслуживающий обфусцированный код: http://jackpattishall.com/obfuscated.html

(Использует padStart, поэтому вам нужно будет просматривать в браузере, который это поддерживает!)

Если вы просмотрите исходный код (используя Chrome), вы заметите, что около 98% разметки видимый составляет JSF * CK (в основном все эти () и []):

eval all the way down

Если вы прокрутите достаточно долго, вы увидите variable, которому, кажется, ничего не назначено:

what is this sorcery!?

Переменной m фактически назначаются следующие пробельные символы zero-width:

const m = "​​‍‍‍‍​​​‍‍​​‍​​​‍‍​‍​​‍​‍‍‍​‍‍​​​‍​​​​​​‍‍​​​‍‍​‍‍​‍‍​​​‍‍​​​​‍​‍‍‍​​‍‍​‍‍‍​​‍‍​​‍‍‍‍​‍​​‍​​​‍​​‍‍​‍‍‍‍​‍‍​​​‍​​‍‍​​‍‍​​‍‍‍​‍​‍​‍‍‍​​‍‍​‍‍​​​‍‍​‍‍​​​​‍​‍‍‍​‍​​​‍‍​​‍​‍​‍‍​​‍​​​​‍​​​‍​​​‍‍‍‍‍​​‍​​‍​​​​‍‍​​‍​‍​‍‍​‍‍​​​‍‍​‍‍​​​‍‍​‍‍‍‍​​‍​‍‍‍​​​‍​​​​​​‍​‍​‍​​​‍‍​‍​​​​‍‍​‍​​‍​‍‍‍​​‍‍​​‍​​​​​​‍‍‍​‍​​​‍‍​​‍​‍​‍‍‍‍​​​​‍‍‍​‍​​​​‍​​​​​​‍‍‍​‍‍‍​‍‍​​​​‍​‍‍‍​​‍‍​​‍​​​​​​‍‍​‍‍‍‍​‍‍​​​‍​​‍‍​​‍‍​​‍‍‍​‍​‍​‍‍‍​​‍‍​‍‍​​​‍‍​‍‍​​​​‍​‍‍‍​‍​​​‍‍​​‍​‍​‍‍​​‍​​​​‍​‍‍‍​​​‍​​​​​​‍​‍​‍​‍​‍‍‍​​‍‍​‍‍​‍​​‍​‍‍​‍‍‍​​‍‍​​‍‍‍​​‍​​​​​​‍​​‍​‍​​‍‍​​​​‍​‍‍‍​‍‍​​‍‍​​​​‍​‍​‍​​‍‍​‍‍​​​‍‍​‍‍‍​​‍​​‍‍​‍​​‍​‍‍‍​​​​​‍‍‍​‍​​​​‍​‍‍​​​​‍​​​​​​‍‍‍​‍‍‍​‍‍​​‍​‍​​‍​​​​​​‍‍‍​‍​​​‍‍‍​​‍​​‍‍​​​​‍​‍‍​‍‍‍​​‍‍‍​​‍‍​‍‍​​‍‍​​‍‍​‍‍‍‍​‍‍‍​​‍​​‍‍​‍‍​‍​​‍​​​​​​‍‍‍​‍​​​‍‍​‍‍‍‍​​‍​​​​​​‍‍‍​​‍‍​‍‍​‍‍‍‍​‍‍​‍‍​‍​‍‍​​‍​‍​‍‍‍​‍​​​‍‍​‍​​​​‍‍​‍​​‍​‍‍​‍‍‍​​‍‍​​‍‍‍​​‍​​​​​​‍‍‍​​‍​​‍‍​​‍​‍​‍‍​​​​‍​‍‍​​‍​​​‍‍​​​​‍​‍‍​​​‍​​‍‍​‍‍​​​‍‍​​‍​‍​​‍​​​​‍​​‍‍‍‍​​​​‍​‍‍‍‍​‍‍​​‍​​​‍‍​‍​​‍​‍‍‍​‍‍​​​‍‍‍‍‍​";

Попробуйте скопировать / вставить предыдущую строку в консоли Chrome. У вас должно получиться что-то вроде:

the man behind the curtain!

(Любой текстовый редактор, который показывает специальные символы, будет делать то же самое!)

Код 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:

http://jsfiddle.net/z5gu4bq1/

Надеюсь, это было полезно. Удачи с JavaScript! И, пожалуйста, никогда не делайте этого в продакшене :)

Ресурсы:

  1. JSF * CK
  2. Справочник по обфускации белого пространства

Другие вопросы по теме