我正在设计一个网站,我想确保没有人可以窃取该代码。我想防止代码被带出网站,如果用户尝试这样做,则会显示错误消息。
答案 0 :(得分:5)
HTML模糊处理是一种转换工具,既可以保留代码,又可以防止对其进行反向工程。您可以找到有关here的更多信息。
这里是混淆代码的示例。
这是非常简单的HTML代码:
<a href="mailto:someone@domain.com">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)
成为:
[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+(![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]+[+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]])()
这几乎是不可能破解的,因为您需要用数据“模糊”网站以获得字符代码,然后使用正则表达式来构建解码器。
答案 1 :(得分:2)
@ JBDouble05给您的问题一个great answer,我完全推荐它。我想分享一个例子,我把它凑在一起很有趣,它采用了他描述的一些技术。它通过零宽度的空白字符使用HTML模糊处理。我还投入了JSF * CK以使真的使源代码有趣:D
首先,提供混淆代码的URL:http://jackpattishall.com/obfuscated.html
(使用padStart
,因此您需要在支持该功能的浏览器中查看!)
(使用Chrome浏览器)查看源代码时,您会发现98%左右的标记 visible 是JSF * CK(基本上所有()
和{{1 }}):
如果滚动足够长的时间,您会看到[]
似乎没有分配任何内容:
实际上,变量variable
被分配了以下m
个空格字符:
zero-width
尝试在Chrome控制台中复制/粘贴上一行。您应该得到类似的东西:
(任何显示特殊字符的文本编辑器都将执行同样的操作!)
const m = "";
JSF * CK代码基本上如下(但最小化):
massive
负责混淆的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
这是一个JSFiddle,它显示了// 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);
}
的更多内容:
希望这很有帮助。玩JavaScript吧!而且请不要在生产中这样做:)
资源: