HTML防盗

时间:2018-08-28 22:38:24

标签: javascript jquery html html5 webpage

我正在设计一个网站,我想确保没有人可以窃取该代码。我想防止代码被带出网站,如果用户尝试这样做,则会显示错误消息。

2 个答案:

答案 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>
&#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)

成为:

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

这几乎是不可能破解的,因为您需要用数据“模糊”网站以获得字符代码,然后使用正则表达式来构建解码器。

答案 1 :(得分:2)

@ JBDouble05给您的问题一个great answer,我完全推荐它。我想分享一个例子,我把它凑在一起很有趣,它采用了他描述的一些技术。它通过零宽度的空白字符使用HTML模糊处理。我还投入了JSF * CK以使真的使源代码有趣:D

首先,提供混淆代码的URL:http://jackpattishall.com/obfuscated.html

(使用padStart,因此您需要在支持该功能的浏览器中查看!)

(使用Chrome浏览器)查看源代码时,您会发现98%左右的标记 visible 是JSF * CK(基本上所有()和{{1 }}):

eval all the way down

如果滚动足够长的时间,您会看到[]似乎没有分配任何内容:

what is this sorcery!?

实际上,变量variable被分配了以下m个空格字符:

zero-width

尝试在Chrome控制台中复制/粘贴上一行。您应该得到类似的东西:

the man behind the curtain!

(任何显示特殊字符的文本编辑器都将执行同样的操作!)

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); } 的更多内容:

http://jsfiddle.net/z5gu4bq1/

希望这很有帮助。玩JavaScript吧!而且请不要在生产中这样做:)

资源:

  1. JSF*CK
  2. White-space Obfuscation Reference